|
|
Модератор форума: Slon |
Форум » РЕДАКТОР - ArmA 2 » Скрипты » назначение действия на клавишу |
назначение действия на клавишу |
› Четверг
› 05.06.2014
› 14:52
› Сообщение #
всем привет, решил сделать такую штуку: вывести на кнопки быстрое использование медикаментов, но что то не совсем работает.
Что не работает я примерно понимаю но вот как исправить не знаю... Суть проблемы заключается в том что вызываю скрипт из инита в самом конце, и дальше через finddisplay 46 вешаю функции на клавишы, ну соответственно по сколько проверка наличия медикоментов в цикле и назначение так же происходит в цикле, стоит проверка что бы не навешивало действие бесконечно.... Так вот получается все вроде бы и работает НО, при заходе или перезаходе оно не работает, то есть оно либо не вешает действие на finddisplay 46 либо после окончательной загрузки обнуляет, если выкинуть например бинт и поднять все работает.... если поставить задержку секунд 10-20 начинает работать при перезаходе, но этого всеравно не хватает при первом входе... вот думаю как бы сделать активацию скрипта после полной загрузки? Пробовал в ините перед вызовом скрипта ставить waituntil {!isnull (finddisplay 46)}; всеравно не помагает =( Сейчас скрипта под рукой нет так что накидаю в кратце от руки: Код init.sqf: waituntil {!isnull (finddisplay 46)}; []execVM "medhotkeys.sqf"; medhotkeys.sqf: _fnc_bandage_fast_key = 0; _fnc_bandage_fast_key_off = 0; while {alive player} do { if ("ItemBandage" in magazines player) then { if (_fnc_bandage_fast_key_off == 1) then { (findDisplay 46) displayRemoveEventHandler ["KeyDown", bandagefastkeyoff]; _fnc_bandage_fast_key_off = 0; }; if (_fnc_bandage_fast_key == 0) then { bandagefastkey = (findDisplay 46) displayAddEventHandler ["KeyDown","if ((_this select 1) == 62) then {cutText [""Используем бинты"", ""PLAIN""];};"]; _fnc_bandage_fast_key = 1; }; } else { if (_fnc_bandage_fast_key == 1) then { (findDisplay 46) displayRemoveEventHandler ["KeyDown", bandagefastkey]; _fnc_bandage_fast_key = 0; }; if (_fnc_bandage_fast_key_off == 0) then { bandagefastkeyoff = (findDisplay 46) displayAddEventHandler ["KeyDown","if ((_this select 1) == 62) then {cutText [""нет бинтов"", ""PLAIN""];};"]; _fnc_bandage_fast_key_off = 1; }; }; }; Если повыводить еще хинты для проверок, то можно увидеть следующее что скрипт запустился и в зависимости от наличия бинтов какой то локальной переменной в начале присваивается значение 1, а так же если вывести bandagefastkeyoff и bandagefastkey так же увидим что одно из этих значений уже определено но не работает.... Пытался так же в цикле ставить проверку if (!isnull (findDisplay 46)) then но результат тот же.... Вот и как бы с этим побороться? |
› Четверг
› 05.06.2014
› 17:08
› Сообщение #
а цикл зачем?
кликнул, проверило, есть - выличило нет - НЕ выличило. всё же просто. |
› Пятница
› 06.06.2014
› 00:05
› Сообщение #
то есть просто сперва повесить само действие а потом проверки?
|
› Пятница
› 06.06.2014
› 01:44
› Сообщение #
примерно так
fnc_bandage_fast_key = 4; - 4 аптечки Id = (findDisplay 46) displayAddEventHandler ["KeyDown", " if ((_this select 1) != 62) exitWith {}; if (fnc_bandage_fast_key > 0) then { лечим; fnc_bandage_fast_key = fnc_bandage_fast_key -1; -минус аптечка }; "]; |
› Пятница
› 06.06.2014
› 10:56
› Сообщение #
либо я не проснулся, либо что то тут не так =)
откуда возьмется изначально 4? Нужно же считать те же аптечки а не задавать статически..... И вот не пойму вот мы скрипт запустили он displayAddEventHandler повесил и все тот останется в памяти? Тогда может так: Код Id = (findDisplay 46) displayAddEventHandler ["KeyDown", " if ((_this select 1) == 62) then { \\ т.к. будут и другие хоткеи и тогда уж лучше все суда запихнуть if ("ItemBandage" in magazines player) then { лечим; \\ удалять бинт будет в скрипте использования бинта } else { hint "нет бинтов"; }; }; "]; Добавлено (06.06.2014, 09:10) Добавлено (06.06.2014, 10:56) |
| |||
| |||
Чат сайта |