lorem

"Помощь в развитии Сайта "


"Торрент- трекер от Наших сайтов"


"Архив сайта"


"Народная Солянка за 17 декабря 2010 - утечка билда!!!!!"


Выбрать дизайн:
Страница 1 из 11
Модератор форума: Fagot 
Форум » Игровая Мастерская » Мастерская » Азбука мододела » [SoC] Как назначить выполнение скрипта на кнопку в игре (Скриптинг)
[SoC] Как назначить выполнение скрипта на кнопку в игре
Фантом Дата: Ср, 14.11.2012, 13:12:06 | Сообщение # 1

Мастер файлов
Страна: Российская Федерация
Твой город: Maloyaz
Сталкер
В Зоне Реактора с 13.11.2012
Сообщений: 19
Заслуги в Зоне Реактора
Итак, выкладываю способ, который в общем-то очень простой, но работает. Итак, как сделать, чтобы при нажатии кнопки ТАВ в игре у вас выполнялось какое-то действие? Сразу два пояснения.

Известен способ как прибиндить кнопкам функции скрипта, но только когда открыто главное меню, или меню спальника, или любое другое скриптовое меню. В скриптовых файлах этих меню есть виртуальный колбек на отлов нажатия кнопок клавиатуры, поэтому когда открыто меню, например, спальника того же - нельзя использовать аптечку или бинт с помощью нажатия горячей кнопки [ или ]. А вот в файле скрипта на них можно прибиндить какую-то функцию, но повторюсь - это только в момент когда на экране есть скриптовое меню.

Второй способ, как сделать работу скрипта по нажатию кнопки в игре - не существует. Однако, имитацию ТАКОГО СПОСОБА УДАЛОСЬ СОЗДАТЬ, но только для клавиши ТАВ.

Объяснение довольно простое - при нажатии кнопки ТАВ в игре на экран выводится текущее задание, которое отмечено в ПДА. Я подозреваю, что когда текущих заданий в ПДА не останется (например, в АМК 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 миллиону - это просто страховка от возможного огромного значения переменной. Я подозреваю, что время в миллисекундах в игре может быть очень большим, но всё равно - страховка не помешает, от редчайшего случая, когда вы включили игру и уехали на пару месяцев на дачу Вдруг тогда timer переполнился бы и произошёл вылет - а теперь timer не переполнится, и вернувшись через год из армии вы обнаружите что на компе, который вы включили будучи ещё призывником, СТАЛКЕР не вылетел из-за корявого Русиного скрипта. Шучу, конечно.

Дальше - слово вам, фантазия безграничная


My zone, my Hardcore
Дополнительная информация

Немного о Фантом..
Зарегистрирован: 13.11.2012
Группа: Сталкеры
Страна: Российская Федерация
город: Maloyaz
 
Форум » Игровая Мастерская » Мастерская » Азбука мододела » [SoC] Как назначить выполнение скрипта на кнопку в игре (Скриптинг)
Страница 1 из 11
Поиск:

Сегодня в Баре - Реактор

Кто был:
Легенда условных обозначений : Призрак, Администратор, Модератор, Проводник, Сталкеры, Чистое небо, Тёмные, Свобода, Наёмники, Нейтралы, Военные, Долг, Монолит, Заблокированные .

Последние сообщения:

Чат

Активисты Форума:

Нужные темы:


Radio Унесённых Сталкером
Чем я заслужил судьбу несчастного изгоя?
LENA_D               (09.10.2010)
CMIT               (03.04.2016)
kapa               (09.01.2014)
Dimon02022               (08.11.2011)
Strelok               (01.11.2014)
ULTRA               (04.09.2015)
tyman21               (09.11.2013)
Этот               (01.08.2015)
vitto               (31.03.2011)

Пришедшие в Бар:


APER               (02.12.2016)
zig-zag               (02.12.2016)
MrKoT               (02.12.2016)
RocioXRuma               (01.12.2016)
сидой123               (01.12.2016)
Клим               (30.11.2016)
Push 2 Check Рейтинг@Mail.ru Этот сайт защищен «Site Guard» Яндекс.Метрика