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

[SoC] Ковыряемся в файлах


Halford

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

Функция dialogs.relocate_item_section_from_actor, куда транслируются параметры из функции dialog_drda.chern_joe_hand_gave, требует на входе передачи первого и второго собеседников. Но указываемая в свойстве квеста <function_complete> функция вызывается совсем не с этими параметрами (ведь там нет диалога), а с такими: (task, objective), где task - идентификатор квеста, а objective - число, предположительно показывающее статус задания. Вот и выходит, что в переменную second_speaker вместо второго собеседника попадает число 1,0 (см. лог), а в переменную first_speaker - id квеста вместо ожидаемого первого собеседника.

Да, и в ванильном ТЧ функций relocate_item_section_from_actor, relocate_item_section_to_actor и who_is_npc нет, ты их брал откуда-то ещё, например из ЧН (где они как раз присутствуют).

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

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


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

Эти функции не подходят для использования в качестве завершающих в квесте, а вот как раз для диалога они прекрасно подходят, поскольку именно в диалоге движок формирует и передаёт в вызываемую функцию параметры first_speaker и second_speaker.

Соответственно, вызывать функцию chern_joe_hand_gave необходимо из диалога при нужном ответе, указав ссылку на неё в элементе <action>. Возможно, инфопорцию chern_joe_hand_gave тоже следует выдавать из диалога.

Изменено пользователем Kirgudu
  • Полезно 1

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


Ссылка на сообщение
53 минуты назад, dPlayer сказал:

А куда приведёт эта дорога если взялся за всеми любимый автоквест?

Поскольку я работал только с ЧН, то не в курсе, что это за пресловутый "всеми любимый автоквест", не могу знать и дорожку к нему. :)
Но убеждён на сто процентов, что последовательным поиском по конфигам и скриптам (а если припрёт, то и по коду движка) можно найти если не всё, то очень и очень многое.

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

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


Ссылка на сообщение
6 часов назад, Norman Eisenherz сказал:

отдельное похожее окно для своих целей

Которое, если вдруг потребуется, в сочетании с рестриктором и созданием/удалением автоматического перехода по координатам актора для моментального переноса после подтверждения вполне может заменить всё тот же стандартный переход своим, кастомным. Тут уже как фантазия позволит.

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


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

@Labadal есть ещё Шрам в начальном игровом ролике ЧН, лежащий на кровати, емнип, как раз в позиции "руки по швам".
"mar_intro_1_actor" - что-то в этом роде.

Изменено пользователем Kirgudu
  • Спасибо 1
  • Нравится 2
  • Полезно 1

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


Ссылка на сообщение
1 час назад, imcrazyhoudini сказал:

Как сделать чтобы remark был зациклен

Можно добавить промежуточную секцию с вилкой на возврат по небольшому таймеру (если требуется пауза) или переход дальше:

[remark@1]
target = esc_baza_novice_walk_3, 0
meet = no_meet
combat_ignore_cond = always
on_timer = 5 | remark
on_info = {+esc_zombie_off} walker

А из секции remark сделать переход на remark@1.

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


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

@imcrazyhoudini погоди, не обратил внимание, что во втором ремарке у тебя тоже звук с возвратом на начало по окончании.
Тогда моё предложение можно не принимать во внимание, оно неверное по сути. Не знаю, без собственноручной пробы в игре сказать не могу. Пусть более искушённые в логике отвечают. )

  • Нравится 1

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


Ссылка на сообщение
4 часа назад, Norman Eisenherz сказал:

Может, передавать ранг как аргумент, чтобы обойтись одной функцией?

Тогда, если правильно помню, функция должна содержать в своём объявлении ещё два параметра, которые в исходном её виде неявно опускаются, а при передаче аргумента обязательны:

function actor_rank(actor, npc, min)
  --...
end

при этом желательно проверить, в каком виде приходит в функцию аргумент min: числа или таблицы с единственным элементом.

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

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


Ссылка на сообщение
39 минут назад, mole venomous сказал:

return db.actor:object("gen_document_1354") and db.actor:object("gen_document_1355")

Можно ещё OR воткнуть - в зависимости от того, требуется наличие обоих или хотя бы одного предмета из двух. :)

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

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


Ссылка на сообщение
20 часов назад, UriZzz сказал:

Как указывать игровое время? 3*60 = 120 минут игрового времени? Или тут ошибка/опечатка?

Опечатка. Первым параметром в данной функции идут игровые секунды, поэтому 3*60 - это 3 (три) игровые минуты.


 

10 часов назад, UriZzz сказал:

Но почему схема проигрывается дважды?

Таймер start_game_timer( XXX, "m_amk_weather.blowout_main" ) с разными значениями тайминга XXX запускается и в blowout_start() и в самой blowout_main() - тут не может быть пересечений? Больше ни за что взгляд не цепляется. Ну разве что сам выброс может длиться суммарно почти 30 минут, и тогда следующее срабатывание мультитаймера практически накладывается на конец выброса.

Я бы на твоём месте сделал табличку значений переменной  "blowout", напротив каждого из них указал прошедшее с начала выброса время, а также какой длительности запускается на данном шаге таймер. Чтобы наглядно посмотреть на предмет пересечений.

 

Update: Ну да, так и есть, если я правильно подсчитал. Все шаги выброса срабатывают у тебя последовательно и без пропусков, при этом сумма таймеров в шагах с 1 по 6 даёт ровно 30 игровых минут. Ровно столько, через сколько срабатывает мультитаймер запуска следующего выбора.

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

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


Ссылка на сообщение
3 часа назад, Balavnik сказал:

Можно ли с помощью встроенных методов движка менять любые строки в любых файлах папки config?

В ЧН и ЗП, а также в модифицированных движках или расширителях.
В оригинальном ТЧ нет поддержки методов IO.

  • Полезно 3

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


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

@Balavnik по информации из этого конфига движок создает в памяти свою табличку соответствия числовых значений story_id их строковым синонимам и помещает её в публичный класс story_ids, таким образом ты получаешь возможность использовать в скриптах и конфигах не только числа, но и элементы перечисления, например:
alife():story_object(192) равно alife():story_object(story_ids.gar_exit_to_agroprom_01)

Изменено пользователем Kirgudu
  • Полезно 4

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


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

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