Назначение скриптам горячих кнопок. Часть 3. — различия между версиями — S.T.A.L.K.E.R. Inside Wiki

Назначение скриптам горячих кнопок. Часть 3. — различия между версиями

Материал из S.T.A.L.K.E.R. Inside Wiki

Перейти к: навигация, поиск
(minifix)
Строка 18: Строка 18:
 
if not con then -- инициализируем схему
 
if not con then -- инициализируем схему
 
con = get_console() -- кешируем консоль
 
con = get_console() -- кешируем консоль
con:execute( con_command .. def_value ) -- инициализируем дефотлным значением, т.к. кнопка не нажата
+
con:execute( con_command .." ".. def_value ) -- инициализируем дефотлным значением, т.к. кнопка не нажата
 
for k,v in pairs(_G[script_name()]) do -- перебираем функции в текущем файле
 
for k,v in pairs(_G[script_name()]) do -- перебираем функции в текущем файле
 
-- v это функция и её имя является кодом клавиши
 
-- v это функция и её имя является кодом клавиши
Строка 33: Строка 33:
 
if str~=def_value and this[str] then
 
if str~=def_value and this[str] then
 
this[str]()
 
this[str]()
con:execute(con_command..def_value) -- записываем значение по умолчанию
+
con:execute(con_command.." "..def_value) -- записываем значение по умолчанию
 
end
 
end
 
end
 
end
Строка 68: Строка 68:
 
if not con then
 
if not con then
 
con = get_console()
 
con = get_console()
con:execute(con_command .. def_value)
+
con:execute(con_command .." " .. def_value)
 
for k,v in pairs(_G[script_name()]) do
 
for k,v in pairs(_G[script_name()]) do
 
if type(v)=='function' and DIK_keys[string.upper(k)] then
 
if type(v)=='function' and DIK_keys[string.upper(k)] then
Строка 79: Строка 79:
 
if str~=def_value and this[str] then
 
if str~=def_value and this[str] then
 
this[str]()
 
this[str]()
con:execute(con_command .. def_value)
+
con:execute(con_command .." " .. def_value)
  
 
--отлова отпускания
 
--отлова отпускания

Версия 19:49, 12 ноября 2012

Зачастую при разработке мода или в игре приходится выполнять различные действия - выдача инфопорций, спавн объектов, включение\отключение скриптового ПНВ, сброс рюкзака, съедание антирада, запуск скриптового меню и т.д. Можно назначать горячие кнопки своим скриптам в любой версии игры, при этом не используя главное меню, кейлоггер или правку движка. Во-первых, это кнопка, нажатие которой отображает на экране название активного квеста (по умолчанию - Tab). Пример можно посмотреть в моде OGSE 0692. В нем на кнопку подвешено съедание антирада и включение пулемета в БТР. Во-вторых, есть алгоритм, использующий другие кнопки. Рассмотрим его подробнее.

Идея довольно проста - использование консольной команды вида "bind_console demo_record 1 knumpad0". В данном примере при нажатии кнопки 0 на дополнительной клавиатуре будет выполнена команда "demo_record 1". Таким образом для каждой кнопки можно задать выполнение своей консольной команды. Мы можем взять в качестве команды какую-нибудь неиспользуемую в сингле, например "mm_net_player_name", а в качестве параметра передавать идентификатор нажатой кнопки. Теперь, если на апдейте ловить значение параметра консольной команды, то будем знать, какая кнопка нажата, и выполнять соответствующую ей функцию.

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

При нажатии клавиш 0,1 или 2 цифровой клавиатуры будет выведено соответствующее каждой кнопке сообщение. Отслеживать можно не только нажатие, но и отпускание кнопки. Cделать это можно аналогично случаю с кнопкой Tab. На наше счастье на одно действие можно забиндить вторую кнопку командой "bind_sec". Вариант кода с отлавливанием отпускания выглядит так:

При нажатии клавиши 0 на дополнительной клавиатуре будет выведено сообщение "нажали 0", а при отпускании "отпустили 0".Функцию update вызываем из апдейта биндера актора. Имена функций берутся из класса-перечисления DIK_keys, описание которого можно найти в lua_help.script.

Автор Charsi. Навел на идею Shadows.

Другие места
LANGUAGE