|
|
Строка 42: |
Строка 42: |
| | | |
| [[Категория:Скрипты]] | | [[Категория:Скрипты]] |
− |
| |
− | <big>Добавил J.DLRN</big>
| |
− |
| |
− | По поводу таймера в единицах игрового времени: вместо time_global() берётся level.get_time_hours() - время в часах, либо: level.get_time_days() - количество игровых суток, или же: level.get_time_minutes() - игровые минуты.
| |
− |
| |
− | Пример: Шуруп(механик Свободы) берёт заказ на изготовление арбалетных стрел("болтов"), через игровые пять часов отсылает Меченому сообщение типа: "приходи, готово".
| |
− |
| |
− | В bind_stalker ставится:<code>
| |
− | function actor_binder:update(delta)
| |
− | object_binder.update(self, delta)
| |
− | moi_scripts.vse_timers() ----- опрос таймеров
| |
− | </code>
| |
− | В новом файле moi_scripts.script пишутся проверки и обработки:
| |
− | <code>
| |
− | function has_strely_payment(actor, npc) ---проверка платёжеспособности актора
| |
− | return actor:money() >= 4500
| |
− | end
| |
− |
| |
− | function give_shurup_money(actor, npc) --- перемещение денег от актора к механику
| |
− | dialogs.relocate_money(npc, 4500, "out")
| |
− | end
| |
− |
| |
− | function give_strely_to_actor(first_speaker, second_speaker) --- забираем заказ(сорок стрел к арбалету)
| |
− | local i = 0
| |
− | for i = 1,40 do
| |
− | dialogs.relocate_item_section(first_speaker, "ammo_arbolt", "in")
| |
− | end
| |
− | end
| |
− |
| |
− |
| |
− | function message_shurupa() --- актор где-то бродит, надо сообщить о готовности
| |
− | db.actor:give_info_portion("strely_gotovy") --- инфопорция для диалогов
| |
− | local sactor = alife():actor() --получаем серверный объект актера
| |
− | local cactor = level.object_by_id(sactor.id) --по его ID получаем клиентский объект актера
| |
− | cactor:give_game_news(
| |
− | "Меченый, это Шуруп\\nРабота сделана, подходи за заказом.", -- строка сообщение, может быть многострочной
| |
− | "ui\\ui_iconsTotal", --текстура, из которой берется аватара "отправителя"
| |
− | Frect():set(0,0,83,47), --координаты и размеры вырезаемого из текстуры изображения
| |
− | math.random(1000, 3000), --начало показа сообщения с текущего момента (в миллисекундах)
| |
− | 10000 --длительность показа сообщения (в миллисекундах)
| |
− | )
| |
− | local snd_obj
| |
− | snd_obj = xr_sound.get_safe_sound_object([[device\pda\pda_tip]]) -- путь до звукового файла
| |
− | snd_obj:play_no_feedback(db.actor, sound_object.s2d, 1, vector(), 1.0) --- пиликает, чтоб не прошляпил сообщение в горячке боя
| |
− | end
| |
− |
| |
− | local iTimer
| |
− | function vremya_strel() --- функция в диалогах
| |
− | iTimer = level.get_time_hours() + 5
| |
− | end
| |
− |
| |
− | function vse_timers() --- обработка бинд_сталкером
| |
− | if iTimer and iTimer < level.get_time_hours() then --- если прошёл срок
| |
− | iTimer = nil -- отключаем таймер
| |
− | moi_scripts.message_shurupa() --- сообщаем заказчику
| |
− | end
| |
− | end
| |
− | </code>
| |
− | Необходимые для логичной работы диалогов инфопорции(в любом xml-файле с подобными):
| |
− | <code> <info_portion id="strely_deal"></info_portion>
| |
− | <info_portion id="strely_gotovy"></info_portion>
| |
− | <info_portion id="strely_vydany"></info_portion>
| |
− | </code>
| |
− | Сами диалоги, в файле с, допустим, диалогами Свободы - dialogs_military.xml :
| |
− | <code>
| |
− | <dialog id="mil_shurup_strely_dialog"> <!--- диалог самого заказа--->
| |
− | <dont_has_info>strely_deal</dont_has_info>
| |
− | <phrase_list>
| |
− | <phrase id="0">
| |
− | <text>mil_shurup_strely_dialog_0</text>
| |
− | <next>1</next>
| |
− | </phrase>
| |
− | <phrase id="1">
| |
− | <text>mil_shurup_strely_dialog_1</text>
| |
− | <next>2</next>
| |
− | </phrase>
| |
− | <phrase id="2">
| |
− | <text>mil_shurup_strely_dialog_2</text>
| |
− | <next>3</next>
| |
− | </phrase>
| |
− | <phrase id="3">
| |
− | <text>mil_shurup_strely_dialog_3</text>
| |
− | <next>4</next>
| |
− | <next>5</next>
| |
− | </phrase>
| |
− | <phrase id="4">
| |
− | <precondition>moi_scripts.has_strely_payment</precondition> <!--- если деньги есть, то при нажатии на "договорились" : -->
| |
− | <text>mil_shurup_strely_dialog_4</text>
| |
− | <give_info>strely_deal</give_info> <!-- инфопорция "сделка состоялась"-->
| |
− | <action>moi_scripts.give_shurup_money</action> <!-- акция"предоплата"-->
| |
− | <action>moi_scripts.vremya_strel</action> <!-- акция"время пошло"-->
| |
− | </phrase>
| |
− | <phrase id="5"> <!-- есть деньги, или нет - наше дело, можем передумать-->
| |
− | <text>mil_shurup_strely_dialog_5</text>
| |
− | <action>dialogs.break_dialog</action> <!-- акция"выход из диалога"-->
| |
− | </phrase>
| |
− | </phrase_list>
| |
− | </dialog>
| |
− | <dialog id="mil_shurup_strely_dialog_2"> <!--- диалог после выполнения заказа--->
| |
− | <has_info>strely_gotovy</has_info> <!-- время вышло, то же самое, что работа готова-->
| |
− | <dont_has_info>strely_vydany</dont_has_info> <!-- если стрелы уже забирали, то диалог не появится-->
| |
− | <phrase_list>
| |
− | <phrase id="0">
| |
− | <text>mil_shurup_strely_gotovy_0</text>
| |
− | <next>1</next>
| |
− | </phrase>
| |
− | <phrase id="1">
| |
− | <text>mil_shurup_strely_gotovy_1</text>
| |
− | <next>2</next>
| |
− | </phrase>
| |
− | <phrase id="2">
| |
− | <give_info>strely_vydany</give_info>
| |
− | <text>mil_shurup_strely_gotovy_2</text>
| |
− | <action>moi_scripts.give_strely_to_actor</action> <!-- акция"давай стрелы"-->
| |
− | </phrase>
| |
− | </phrase_list>
| |
− | </dialog>
| |
− | </code>
| |
− | Расшифровка текста в stable_dialogs_military.xml :
| |
− | <code>
| |
− | <string id="mil_shurup_strely_dialog_0">
| |
− | <text>Не подскажешь - где мне найти болты к арбалету?</text>
| |
− | </string>
| |
− | <string id="mil_shurup_strely_dialog_1">
| |
− | <text>Найти - врядли. А вот сделать на заказ - могу. Штук сорок.</text>
| |
− | </string>
| |
− | <string id="mil_shurup_strely_dialog_2">
| |
− | <text>И во сколько мне это обойдётся?</text>
| |
− | </string>
| |
− | <string id="mil_shurup_strely_dialog_3">
| |
− | <text>Так, алюминий есть. Сталь на наконечники... Плюс работа, часов пять. Итого - четыре с половиной тыщи.</text>
| |
− | </string>
| |
− | <string id="mil_shurup_strely_dialog_4">
| |
− | <text>Договорились, вот деньги. Зайду через несколько часов.</text>
| |
− | </string>
| |
− | <string id="mil_shurup_strely_dialog_5">
| |
− | <text>Не, меня не устраивает. Пока.</text>
| |
− | </string>
| |
− | <string id="mil_shurup_strely_gotovy_0">
| |
− | <text>Говоришь, справился уже с заказом?</text>
| |
− | </string>
| |
− | <string id="mil_shurup_strely_gotovy_1">
| |
− | <text>Всё готово, забирай.</text>
| |
− | </string>
| |
− | <string id="mil_shurup_strely_gotovy_2">
| |
− | <text>Ну, и отлично. Благодарю за труд.</text>
| |
− | </string>
| |
− | </code>
| |
− | Надо добавить наши диалоги самому персонажу:
| |
− | файл character_desc_military.xml, секция SVOBODA ENGINEER, в конце, перед </specific_character> вставляем
| |
− | <code> <actor_dialog>mil_shurup_strely_dialog</actor_dialog>
| |
− | <actor_dialog>mil_shurup_strely_dialog_2</actor_dialog></code>
| |
− | Заказали работу, заплатили, побродили пять часов, и вот - у нас есть болты к арбалету. Пока заказ одноразовый, разработка повторного обращения за тем же - в процессе:)Всё написано ради проверки работоспособности отсрочки события по времени. Благодарность <big>malandrinus</big> за информацию по выводу сообщения на экран.
| |
− | Добавил J.DLRN e.delorean@qip.ru
| |
Для чего нужны таймеры?
Предположим, вы хотите, чтобы Меченому после диалога пришло сообщение на ПДА, но не сразу, а для придания большего реализма с задержкой в ~7-8 секунд. В таком случае, если вы читаете эту статью, то у вас есть:
- Готовый диалог
- Необходимая функция в свежем скриптовом файле.
Для того, чтобы создать таймер, необходимо открыть файл с вашими скриптами и написать следующее :
Вуаля, теперь всё работает. Спасибо за внимание.
Да, кстати, из диалога вызываем функцию function_onetimer.