Перейти к контенту

Внимание!

В ближайшее время на форум будет загружена новая редакция Правил форума и Пользовательского соглашения. 

Ознакомление обязательно.

_Val_ _Val_

Скриптование


Svoboда

Рекомендуемые сообщения

[ЧН 1.5.10]
Задача: исправить заголовок сообщения, которое выдается вместе с приветствием sound_start через одноименный звуку текст.
Условия: приветствие Левши перед входом на завод выдается через конфиг логики [configs\scripts\yantar\yan_scene_6_stalker_5.ltx], при этом в заголовке сообщения не указывается имя NPC, хотя сообщение выдается от определенного объекта NPC с привязкой id. (Кроме Левши, такой подход применяется для торговцев – без дублирования субтитрами.)
Решение через скрипты: переименовать текст для вывода отдельно от звука, отследить запуск реплики yan_levsha_hello_actor в [xr_meet.script] и добавить свое сообщение с заголовком и оформлением. Проблемы: приходится проверять все приветствия, и после перезагрузки текст выводится повторно – видимо, нужна еще привязка где-то в [xr_sound.script].

 

Возможно ли сделать вывод текста непосредственно через логику NPC, причем так, чтобы оно отобразилось только один раз при запуске звука приветствия? Добавление действия в строку victim вызывает ожидаемый спам сообщения на каждом апдейте, который можно порезать через логический флаг и инфо-поршни задания, но это уже костыли.

 

Spoiler
[meet@1]
meet_state = 30 | hello_wpn@yan_levsha_hello_actor | 10 | guard@yan_levsha_hello_actor 
meet_state_wpn = 15 | backoff@meet_weapon_wait
use_wpn = false
sound_start = yan_levsha_hello_actor
sound_start_wpn = meet_weapon_wait
victim = 30 | actor
victim_wpn = 30 | actor
use	= true
use_wpn	= true
meet_dialog = yan_levsha_hello_dialog

 

 

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Поделиться этим сообщением


Ссылка на сообщение

1. Это примерно то же решение через скрипты с отсеиванием всех других приветствий. Хочется сделать правку именно в логике Левши.

 

2. Убрал звук start_sound – все равно выдается старое сообщение. Подозреваю, что отсюда: meet_state = 30 | hello_wpn@yan_levsha_hello_actor …

Добавил в секцию [camper@wait_cut5] (ждать диалога после убийства шального снорка) строку on_timer = 3000 | %=play_sound(…)% – выдается только новое сообщение, повтора после перезагрузки нет. Вроде получилось…

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Поделиться этим сообщением


Ссылка на сообщение

Например, сделать запись лога через flush и поискать в нем часть фразы "* Game … is successfully loaded from file '…sav' …" – если встречается только один раз, значит первая загрузка. В ТЧ можно добраться до файла через класс fs(), в ЧН/ЗП через библиотеку io.

  • Нравится 1
  • Согласен 1

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Поделиться этим сообщением


Ссылка на сообщение

1. Прошлый ответ не подошел или был пропущен?

https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/616/#comment-1480857

 

2. Статьи выдаются только через инфо-поршни – их и проверять.

2.1. Статья не является обязательной частью описания квеста.

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Поделиться этим сообщением


Ссылка на сообщение

Для привязки достаточно обернуть указанные действия в функцию и вызывать ее по необходимости – можно из логики того же рестриктора:

on_actor_inside = … %=info_check%

 

[xr_effects.script]

function info_check()

local tm = task_manager.get_random_task()
local task = tm.task_info[type_parent]
if task.status = "selected" then …

end

 

Требуется только подставить заголовок нужной задачи (artefact_wolf какой-нибудь) и конечное действие.

  • Полезно 1

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Поделиться этим сообщением


Ссылка на сообщение

1. В системном конфиге нет ссылок на апгрейды, хотя их копии вставлены в конфиги оружия – по аналогии с [inventory_upgrades.script], стоит читать общий файл [item_upgrades.ltx].

2. Для поиска параметра nightvision_sect надо не подставлять весь список up_list, а перебирать отдельные секции из него.

 

 

  • Спасибо 1
  • Нравится 1

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Поделиться этим сообщением


Ссылка на сообщение

Если я правильно понял, это значение task_info.id.complex_type, которое для цикличек выглядит как type_parent.

 

Пример:

id = barmen_kill_stalker_5

complex_type = kill_stalker_barman

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Поделиться этим сообщением


Ссылка на сообщение

1. В обработчик action по умолчанию передается 4 аргумента: speaker1, speaker2, dialog_id, phrase_id (obj, obj, str, str) – последнее значение для фразы с описанием будет равно desc_phrase_id.
2. Порядковые номера фраз в CRandomTask:__init() генерируются подряд: yes_phrase_id = desc_phrase_id +1.
3. Есть готовая таблица self.task_id_by_yes_phrase_id – из нее и получить id.

  • Полезно 2

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Поделиться этим сообщением


Ссылка на сообщение

Проверил таблицу: данные точно заполняются, причем ключи phrase_id, как и в обработчике action, являются текстом – не было ли при сверке перевода в число?

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Поделиться этим сообщением


Ссылка на сообщение

AddAction + yes_phrase_id + task_id аналогично тому, что описано выше, если это циклический квест.

 

Edit: даже проще – если заголовок конфига известен заранее, достаточно добавить в тот же CRandomTask:init_task_dialog проверку

if v.name == "tm_find_artefact_1" then … yes_phrase:AddAction(…)

Изменено пользователем Norman Eisenherz
  • Нравится 1
  • Полезно 1

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Поделиться этим сообщением


Ссылка на сообщение

1. Надо привязаться к yes_phrase; действие "give_task" уже ссылается на нее – свое действие с проверкой ставить рядом.

2. Сообщение выдается при передаче предметов через обертку dialogs.relocate_item_section(…), которая ссылается на news_manager.script.

  • Полезно 1

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Поделиться этим сообщением


Ссылка на сообщение

Избыток ручного ввода. Заголовки секций и перевод названий можно получить из конфигов каждого объекта, а название метки построить по шаблону вроде "section_mapspot" и выбросить всю таблицу weapon_info – вручную останется только создать однотипные описания меток "wpn_name_mapspot" в XML-файле.

Вместо перебора можно привязать создание/удаление меток к сбросу/поднятию оружия на стороне ГГ и сбросу из инвентаря NPC в [death_manager.script].

  • Нравится 1
  • Полезно 1

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Поделиться этим сообщением


Ссылка на сообщение

self.object – объект (мутант), для которого сработал вызов какого-то события (спавн, удаление, апдейт)

self.object:section() – секция мутанта, который обсчитывается в данный момент

  • Согласен 1
  • Полезно 1

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Поделиться этим сообщением


Ссылка на сообщение

1. Нужны скобки вокруг проверок имени: объект И (имя ИЛИ имя …)

 

2. При таком количестве проверок можно переделать код на сверку по списку:

local names = { name_1 = true, name_2 = true, … }

…

if sobj and names[ sobj:section_name() ] then …

  • Спасибо 1
  • Нравится 3

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...