Статистика |
Онлайн всего: 1 Гостей: 1 Пользователей: 0 |
|
|
Как назначить выполнение скрипта на кнопку в игре
Известен способ как прибиндить кнопкам функции скрипта, но только когда
открыто главное меню, или меню спальника, или любое другое скриптовое
меню. В скриптовых файлах этих меню есть виртуальный колбек на отлов
нажатия кнопок клавиатуры, поэтому когда открыто меню, например,
спальника того же - нельзя использовать аптечку или бинт с помощью
нажатия горячей кнопки [ или ]. А вот в файле скрипта на них можно
прибиндить какую-то функцию, но повторюсь - это только в момент когда на
экране есть скриптовое меню.
Второй способ, как сделать работу
скрипта по нажатию кнопки в игре - не существует. Однако, имитацию
ТАКОГО СПОСОБА УДАЛОСЬ СОЗДАТЬ, но только для клавиши ТАВ.
Объяснение
довольно простое - при нажатии кнопки ТАВ в игре на экран выводится
текущее задание, которое отмечено в ПДА. Я подозреваю, что когда текущих
заданий в ПДА не останется (например, в АМК 1.4 когда доходишь до
уровня ЧАЭС 2, после разговора с О-Сознанием, пропадало последнее
задание "Убить Стрелка", и не оставалось ни одного) - способ перестанет
работать, но это надо проверять.
Так вот, оказывается, текущее
задание выводится на главный экран игры, то есть на ХУД, не просто так, а
в виде кастом статика. Этот кастом статик записан в файле
gamedata\config\ui\ui_custom_msgs.xml и называется он main_task. Вот
его-то и можно поймать скриптом, и соответственно, назначить на момент
его ловли какое-то действие. Пример ниже.
Все мы знаем функцию
апдейта из файла бинд_сталкер. Вот на неё-то и повесим колбек на
специальный скрипт tabula_rasa.script, вот так:
Код if
tabula_rasa then tabula_rasa.update(delta) end
Понятно, что
вставить этот колбек надо в функцию апдейта в скрипте
bind_stalker.script, а теперь займёмся самим новым скриптом. В нём будет
две основных функции - самого апдейта, где будет проверяться, нет ли на
главном экране кастом статика main_task, и вторая функция, где будет
выполняться какое-то действие.
Код local timer = 0
function
update(delta) timer = timer+delta if timer>1000000 then
timer = 1000000 end local hud = get_hud() if
hud:GetCustomStatic("main_task") and timer>1000 then do_something()
timer = 0 end end
function do_something() local
item = db.actor:object("antirad") if antirad then db.actor:eat(item)
end end
Вот такая вот функция. А теперь - что она
делает? Правильно, при нажатии ТАВ происходит использование антирада,
одной штуки, если он есть. Но такое использование произойдёт не чаще,
чем раз в 1000 миллисекунд, для чего есть специальная проверка - в
переменной timer хранится время, прощедшее с момента последнего нажатия
ТАВ, при котором timer обнуляется. Время хранится в миллисекундах,
поэтому 1000 равно одной секунде. Ну а строка где проверяется, не равен
ли timer миллиону - это просто страховка от возможного огромного
значения переменной
Europa Capital spol. s.r.o – лидирующая компания в
области инвестиционного консалтинга, работающая на рынке Чехии более 15
лет. Основная специализация у компании – покупка-продажа жилой и
коммерческой недвижимости в Чехии.
Иммиграция в Чехию , образование в
Чехии, недвижимость в Чехии – за всеми
этими фразами стоит реальный опыт наших специалистов компаний Europa Capital и успех клиентов.
Мы начинали с малого и шаг за шагом создали команду, которая сегодня
ведет большие проекты. Но это не значит, что мы забросили то, с чего
начинали.
|
Категория: Все о модостроении. | Добавил: ZARK (21.10.2010)
|
Просмотров: 4902
| Рейтинг: 0.0/0 |
Добавлять комментарии могут только зарегистрированные пользователи. [ Регистрация | Вход ]
|
Наш Банер |
Мы будем очень благодарны если вы разместите нашу кнопку у себя на сайте!
|
|