Форум Trainsim

Форум Trainsim (http://www.trainsim.ru/forum/index.php)
-   TrainZ - Моделирование (http://www.trainsim.ru/forum/forumdisplay.php?f=25)
-   -   Клавиши в trainz (http://www.trainsim.ru/forum/showthread.php?t=3366)

TRam_ 02.09.2008 20:50

ну и что? главное - что можно сделать кучу процессов которые будут работать одновременно(звуки, управления тягой, тормозами, проскальзыванием, тормозной рукояткой, компрессором, светом, "прикрепляемыми" и(или) анимрованными сценами (возможна даже "вложенная анимация", хотя официально это не возможно :) ), звуком, как 2-мерным, так и 3-мерным(и при удалении от этого звук естественно затухает))).
Но запомните - при торможении мы сможем опустошить только ГМ, т.к. "зарядка" в трейнз "автоматическая", автомат начинает прекрашать подачу воздуха в ТМ без сверхзарядки совсем (к сожалению я ошибся насчёт неё).

genesis 02.09.2008 23:09

[QUOTE=TRam_;42084]возможна даже "вложенная анимация", хотя официально это не возможно :)[/QUOTE]
Не понял что здесь имеется ввиду О_о Если сложение/наложение анимаций то все работает и поддерживается самим джетом

TRam_ 03.09.2008 11:50

это не поддерживается плагином. обычные точки привязки неанимируемы

Evgenyi 03.09.2008 16:45

[QUOTE=Combine;41169]Не нравится, не катайся ;)[/QUOTE]

Сто раз согласен:drinks: ! Наконец-то будет лок, который управляется как в реале. Или вреале вы тоже нажимаете Num3, чтобы затормазить;) ?

Вопрос по теме:
Тут недавно вышел ВЛ80Р-1867 со скриптом включения ГВ и МВ. А можно это дело привязать к клавишам?

Combine 03.09.2008 19:07

[QUOTE]Но запомните - при торможении мы сможем опустошить только ГМ[/QUOTE] ГМ не бывает. Есть НМ, ТМ...

TRam_ 03.09.2008 19:34

вибачте, ГР (головний резервуар :) )

привязать то можно, но нужно и скрипт переделать и сделать скрипт кабины (а поскольку админ этого скрипта TRam_, и он пока не разрабатывает, то ответ нет)

TRam_ 22.07.2009 19:12

возобновляю эту старую, забытую тему....

итак... Открываем папку любой trz , папку Settings, файл keyboard.txt

В нём мы видим все используемые этой игрой клавиши, и строки, кодирующие эти клавиши.
Именно СТРОКИ движок trz воспринимает при нажатии клавиш. Как видете, многие клавиши
повторяются для разных строк (значит, обе эти строки будут обрабатываться одновременно).


В трс можно два способа "информирования" скрипта о нажатии клавиши - скриптовый и косвенно-скриптовый.

Начнём с косвенно-скриптового, т.е. с распознавания сообщений о том или ином действии клавиши.
Таких действия 4 - включение гудка, включение "звонка"(Америка...), включение посыпания песка
и поднятие токоприёмника. Покажу, как их "доставать". Если у нас 2009(более ранним не надо),
то в trainzoptions.txt прописывем строку

-enablescriptmessagelogging

Заходим в trz, устанавливаем на рельсы электровоз, и нажимаем клавиши из keyboard.txt
соответствующие строкам

train_horn
train_sand
train_bell
train_pantograph_toggle

После этого выключаем trz и просматриваем файл "JetLog.txt". В нём находим интресующие нас
строки -

? 000004B8 Warn 1:01.1 Trainz : ScriptLog> router message from 0002 '' to 0000 '', message Train, NotifyHorn
? 000004B8 Warn 0:53.1 Trainz : ScriptLog> router message from 0002 '' to 0000 '', message Train, NotifySanding
? 000004B8 Warn 0:54.2 Trainz : ScriptLog> router message from 0002 '' to 0000 '', message Train, NotifyBell
? 000004B8 Warn 0:58.7 Trainz : ScriptLog> router message from 0002 '' to 0000 '', message Train, NotifyPantographs

Значит, для того, чтобы "поймать" эти клавиши, достаточно создать в скрипте локомотива функцию-обработчик одного из этих
сообщений типа

void obrabotchik1(Message msg)
{
// проверяем, что это сообщение послал именно наш поезд
if(cast<train> (msg.src)==me.GetMyTrain())
{
//здесь собственно обработка нажатия
}
}

и "установить" её на локомотив

AddHandler(me,"Train","NotifyHorn","obrabotchik1");

Но это не основной способ получения клавиш.


Рассмотрим основной, скриптовый. Итак, заходим в папку scripts , находим там файл "Cabin.gs" и открываем его.
Тут описывается всё функции кабины, написаные аурановцами и скомпилированные в "Cabin.gsl" папки libraries .

класс CabinControl вообще широко известен, именно он широко используются в ВЛ10-1628 и ЧС4т для
"вылавливания" поворота мышью ручек и тумблеров. Ну класс Cabin является родителем класса DefaultLocomotiveCabin,
установленного почти на всех "нескриптованных" непаровых локомотивах .

А теперь рассмотрим функцию, которая в самом низу этого класса, выглядящую так

public void UserPressKey(string s)
{
Interface.Log("Cabin.UserPressKey> unhandled key-command " + s);
}

Аурановцы говорят, что вызовом этой функции заставить trz "подумать, что нажималась клавиша" нельзя,
эта функция только ВЫЗЫВАЕТСЯ ОБРАБОТЧИКОМ нажатия клавиши на клавиатуре.

Подождите, что-то знакомая строка.... Открываем JetLog.txt и перед строкой

? 000004B8 Warn 0:58.7 Trainz : ScriptLog> router message from 0002 '' to 0000 '', message Train, NotifyPantographs

видим строку (тут прописывание -enablescriptmessagelogging в 2009 роли не играет)

? 000004B8 Warn 0:58.7 Trainz : WorldState::NativeLog> Cabin.UserPressKey> unhandled key-command firebox-door-toggle

Вот-то она, работа этой самой процедуры... А "firebox-door-toggle" - почти то же, что "train_cabin_firebox_door_toggle",
согласно keyboard.txt соответствует клавиша KP1 , та же, что и для токоприёмника.

Ну и перебрав таким же образом (на нескриптованном электровозе) все клавиши, описанные в keyboard.txt, получаем следующий список
"работающих":

а) для всех версий trz

train_cabin_brake_application
firebox-door-toggle (соответствует train_cabin_firebox_door_toggle)
train_cabin_throttle_0
train_cabin_throttle_up
train_cabin_throttle_down
steam-regulator-up (соответсвует train_cabin_regulator_up)
steam-regulator-down (соответсвует train_cabin_regulator_down)
steam-reverser-up (соответсвует train_cabin_reverser_up)
steam-reverser-down (соответсвует train_cabin_reverser_down)
wave (соответсвует train_cabin_coalman_wave)
steam-blower-up (соответсвует train_cabin_blower_up)
steam-blower-down (соответсвует train_cabin_blower_down)
steam-injector-up (соответсвует train_cabin_injector_up)
steam-injector-down (соответсвует train_cabin_injector_down)
cabin-fans (соответсвует train_cabin_fans)
shovel-coal (соответсвует train_cabin_shovel_coal)


б) и для версий 2009 и старше (аурановцы, как и обещали, расширили предыдущий список)


train_cabin_toggle_draincocks
train_cabin_aws_isolate
train_cabin_aws_activate
train_cabin_tpws_reset
train_cabin_tpws_override
train_cabin_dra_on
train_cabin_dra_off
train_cabin_emergency_stop
train_cabin_master_switch_on
train_cabin_master_switch_off
train_cabin_panel_lamp_test
steam-injector2-up (соответсвует train_cabin_injector2_up)
steam-injector2-down (соответсвует train_cabin_injector2_down)
train_cabin_toggle_draincocks
train_cabin_engine_on
train_cabin_engine_off
train_cabin_hardware_0
train_cabin_hardware_1
train_cabin_panel_lamp_test
train_cabin_wipers_on
train_cabin_wipers_off
train_cabin_hardware_0
train_cabin_hardware_1


обращаю Ваше внимание - некоторые строки относятся к 2 клавишам одновременно. Хотя файл keyboard.txt в ранних версиях
защищён от записи, Вы можете скопировать его содержимое в копию любого текстового файла из директории trs (для сохранения кодировки)
назвать keyboard.txt и заменить им этот файл.

В 2009 его можно редактировать свободно.

Ну а пример обработки кабиной, например, "wave" такой

void UserPressKey(string s)
{
if (s == "wave")
{
// собственно обработка клавиши
}
}

Напоминаю, что кабина "активна", если вы находитесь на этом локомотиве (но не обязательно в виде "1" - и в "2" и остальных :) )

Skif 23.07.2009 10:11

А если сделать шаг дальше - дописать в файл keyboard.txt еще пару клавиш и назначить им сообщение?

TRam_ 23.07.2009 11:47

Новых строк назначить нельзя. Можно только переназначит клавиши, соответствующие строкам

А сообщения вообще нильзя сделать никак

TRam_ 23.07.2009 12:05

точнее, самый простой способ "улавливания клашиши" и передачи её локомотиву в виде сообщения такой

class Cabin_keyb isclass DefaultLoocmotiveCabin
{

void UserPressKey(string s)
{
if (s == "train_cabin_engine_on")
{
PostMessage(loco,"engine","on",0);
}
else
if (s == "train_cabin_engine_off")
{
PostMessage(loco,"engine","off",0);
}
}

хотя я предпочитаю другой способ, используя класс CabinData

}

Skif 23.07.2009 14:52

Володя, а ты не пробовал раскурочить аурановские файлы? Которые скомпилированные? Они ж все, заразы, дополнительно в виде исходников выложены. Может, стоит там поискать список сообщений?

TRam_ 23.07.2009 15:18

список строк я дал. Думаю, он совершенно полный, т.к. именно по файлу keyboard.txt трейнз расшифровывает клавиатуру (насколько я понял аурановцев). Если хотите, можете перепроверить его на наличие неуказнных мною строк, которые всё-таки работают...

в 2009 нам дали 23(!!!) дополнительных слоков под клавиши. В дефолтных локах они ни на что не влияют. Поэтому смело делай "преобразователь" своего пульта на клавиши, соответствующие им (там большинство расшифровывается как Alt+<клавиша> )

[QUOTE] Которые скомпилированные?[/QUOTE] но зачем? И так 23 новых слота под клавиши работают... Неужели мало?

Задай к ним нужные тебе клавиши и "прилагай" к своему "пульту" новый keyboard.txt , адаптированный к пульту.

genesis 13.11.2009 23:07

Есть предложение глобально изменить keyboard.txt файл, так, чтобы было одинаково у всех.
Что не нравится в текущем варианте:
1. Наличие строк с неназначенными комбинациями, вроде
train_cabin_throttle_8 null
Это снижает количество возможных комбинаций
2. Несколько клавиш, обрабатываемые одной строкой, к примеру:
train_cabin_brake_release q, KP9, KPPgUp
Это сразу лишает возможности отдельно использовать нампад.
3. Клавиши p, [, ] заняты самой игрой. Я не знаю, исправит ли это правка файла, но стоит попробовать.

Одна из целей этого - обеспечить возможность реализации более удобной раскладки клавиш:
Блок qweasd - управление контроллером
r, f - управление реверсивкой
[, ] - КВТ (, и . в случае невозможности)
; ' - КМ
x, h, b - песок, тифон, свисток
Нампад - управление дверями в трамваях и МВПС, а также функции автоинформаторов, МСУД и т.п.

Соответственно, хочется услышать мнения насколько это все необходимо и обосновано, а также возможные последствия от этого шага.

TRam_ 14.11.2009 13:10

считаю что необходимо. Только потом сделать описание, чему каждая клавиша соостветствует и распространять его вместе с keyboard.txt

Skif 14.11.2009 13:35

Согласен. На основе унифицированного файла всем будет удобнее. А вот нумпад желательно бы вообще исключить :) - ну его, этот нумпад. Верхние цифры заняты под камеры, F-ы - под менюшки. Может, стоит рассмотреть вариант Shift+кнопка по образцу МСТС?


Текущее время: 10:11. Часовой пояс GMT +4.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd. Перевод: zCarot
© 2001-2019, Администраторы и разработчики Клуба Trainsim