Это популярное сообщение. Dennis_Chikin 3 658 Опубликовано 16 Мая 2014 Это популярное сообщение. Поделиться Опубликовано 16 Мая 2014 Ковыряемся в файлах ТЧ Прежде чем писать в тему - внимательно читаем первый пост, и пользуемся поиском. Возможно, ответ на Ваш вопрос уже есть. Касательно телепатии: если Вы передаете Ваши файлы телепатическим путем - ответы будут передаваться тоже телепатически. Если Вы предлагаете угадать, отчего у Вас в подвале происходит странный стук - ответ будет передан стуком. 4 8 6 12 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
dPlayer 501 Опубликовано 14 Декабря 2016 Поделиться Опубликовано 14 Декабря 2016 (изменено) Секция actor_dialogs я так понимаю не работает в релизе? Или диалоги всё равно надо прописывать в характер_деск? Просто хочется использовать стандартные профили НПС из оригинала, как им прописать несколько диалогов, в meet не выходит прописать больше 1 диалога в схеме, т.е. конструкция вида meet_dialog = dialog1, dialog2 даёт доступность только dialog1. Изменено 14 Декабря 2016 пользователем dPlayer Ссылка на комментарий
Kirgudu 1 217 Опубликовано 14 Декабря 2016 Поделиться Опубликовано 14 Декабря 2016 @dPlayer, стартовому диалогу тоже можно задавать условия: meet_dialog = {+info1} dialog1, dialog2 2 Инструмент Ссылка на комментарий
HellRatz 2 892 Опубликовано 14 Декабря 2016 Поделиться Опубликовано 14 Декабря 2016 @dPlayer, а можешь сказать применение? Просто нужные диалоги же итак прописываются в профиль НПС. GTA 3 MAP X-Ray | NFS U:2 MAP X-Ray | RTCW MAP X-Ray | L2D | Раритетные моды на моем облаке — на память о былом. Ссылка на комментарий
UnLoaded 313 Опубликовано 14 Декабря 2016 Поделиться Опубликовано 14 Декабря 2016 (изменено) Секция actor_dialogs я так понимаю не работает в релизе? Судя по тому, что в ф-ции init_meet(xr_meet.script) нет никаких упоминаний про actor_dialogs - таки да, не работает. meet_dialog = dialog1, dialog2... даёт доступность только dialog1. Ну так все правильно - meet_dialog устанавливает новый стартовый диалог, а он в отличии от actor-диалогов может быть только один. Изменено 14 Декабря 2016 пользователем UnLoaded Ссылка на комментарий
Overfirst 631 Опубликовано 14 Декабря 2016 Поделиться Опубликовано 14 Декабря 2016 meet_dialog устанавливает новый стартовый диалог, а он в отличии от actor-диалогов может быть только один.По условию их может быть n-ое количество. meet_dialog = {-esc_stalker_most_leader_dialog_start_compl} esc_stalker_most_leader_dialog_start, {+esc_stalker_most_leader_dialog_start_compl} esc_stalker_most_leader_def_dialog Ранее был известен под ником BoBaH_671. Ссылка на комментарий
dPlayer 501 Опубликовано 14 Декабря 2016 Поделиться Опубликовано 14 Декабря 2016 По условию их может быть n-ое количество. К каждому выходит какое-то условие надо, а просто так не включатся? а можешь сказать применение? Чтобы не плодить ненужную кучу профилей, стараюсь использовать оригинальные. Вот, например sim_stalker_general, там около шести профилей в этом классе - разное вооружение/визуалы и т.п.. Ссылка на комментарий
Overfirst 631 Опубликовано 14 Декабря 2016 Поделиться Опубликовано 14 Декабря 2016 К каждому выходит какое-то условие надо, а просто так не включатся? Разумеется. Если прописать через запятую три диалога без условий, то у тебя всегда будет играться первый. Можно не писать эти условия в самой секции meet, напиши в скелете диалога, чтобы он не был цикличным. Сделай в начале проверку на отсутствие инфо, которое выдашь в конце диалога. Как вариант. 1 Ранее был известен под ником BoBaH_671. Ссылка на комментарий
_Val_ 2 225 Опубликовано 14 Декабря 2016 Поделиться Опубликовано 14 Декабря 2016 К каждому выходит какое-то условие надо Вообще-то это логично. Делает ГГ что-то, получает один диалог, не делает - другой. Ну и до бесконечности.. А ты хотел, чтобы было доступно сразу несколько диалогов без каких-либо предусловий? 1 Ссылка на комментарий
UnLoaded 313 Опубликовано 14 Декабря 2016 Поделиться Опубликовано 14 Декабря 2016 По условию их может быть n-ое количество. Только не надо обманывать себя и других: по условиям можно прописать выбор из любого кол-ва диалогов, но при разговоре с неписем он будет только один(тот, что прошел по условиям). Ссылка на комментарий
Overfirst 631 Опубликовано 14 Декабря 2016 Поделиться Опубликовано 14 Декабря 2016 (изменено) по условиям можно прописать выбор из любого кол-ва диалогов, но при разговоре с неписем он будет только один(тот, что прошел по условиям). Я про это и толкую. Диалог начинает непись, всегда будет один диалог, тут все логично. Видимо, не так поняли друг друга. а он в отличии от actor-диалогов может быть только один. Сначала мне это показалось как вообще один, т.е. после него ты никаких диалогов заюзать не сможешь. Вот еще пример для @dPlayer c довольно емкой структурой условий: meet_dialog = {+mechanic_start_polter_quest -esc_mechanic_night_polters_complete} esc_mechanic_quest_polters_compl, {+esc_mechanic_repair_dialog_done -mechanic_start_polter_quest !check_night_time} esc_mechanic_quest_polters_day, {+esc_mechanic_repair_dialog_done -mechanic_start_polter_quest =check_night_time} esc_mechanic_quest_polters_night, {-esc_technic_inspect_obj_second_compl +technic_inspect_object_complete} esc_technic_inspect_obj_second, {+esc_defence_village -esc_technic_inspect_obj_third_compl +esc_technic_inspect_obj_second_compl} esc_technic_inspect_obj_third, {-esc_technic_meet_possible} esc_technic_default_no_meet_dialog, {+esc_technic_meet_possible} esc_technic_default_meet_dialog Изменено 14 Декабря 2016 пользователем BoBaH_671 1 Ранее был известен под ником BoBaH_671. Ссылка на комментарий
dPlayer 501 Опубликовано 14 Декабря 2016 Поделиться Опубликовано 14 Декабря 2016 А ты хотел, чтобы было доступно сразу несколько диалогов без каких-либо предусловий? Конкретно сейчас нет, а в целом да, хотелось бы любое кол-во диалогов. Предусловия не важны, всё равно чаще выходит так, что без прекондишенов нужен только 1 разговор с НПС, а потом всяко появятся условия. Ссылка на комментарий
Kirgudu 1 217 Опубликовано 14 Декабря 2016 Поделиться Опубликовано 14 Декабря 2016 (изменено) На самом деле, довольно легко сделать действительно случайный стартовый диалог. Пишу «вслепую», поэтому извиняйте, если накосячил или вообще предложил лажу. Где-нибудь в xr_conditions пишем такой код: local random_dialog = nil function get_random_dialog(actor, npc, p) local max_count = p and p[1] or 1 if random_dialog == nil or random_dialog.counter >= max_count then random_dialog = {dialog_set = false, counter = 1} else random_dialog.counter = random_dialog.counter + 1 end math.randomseed(time_global()) if not random_dialog.dialog_set then random_dialog.dialog_set = random_dialog.counter == max_count or math.random(random_dialog.counter, max_count) == max_count return random_dialog.dialog_set else return false end end Затем в логике пишем так (пример для трёх равнозначных диалогов): meet_dialog = {=get_random_dialog(3)} dialog1, {=get_random_dialog(3)} dialog2, {=get_random_dialog(3)} dialog3 Важно: 1. аргумент, передаваемый в функцию, должен быть равен общему числу диалогов; 2. функцию обязательно надо использовать в том числе для последнего диалога в цепочке, чтобы не сбился внутренний счётчик; 3. дополнительные условия (например инфопорции) при таком подходе использовать нельзя; 4. данная реализация может быть применима только к одному конкретному выбору случайного диалога. Если необходимо применить аналогичный подход в нескольких местах (с разным количеством диалогов для выбора), из переменной random_dialog надо делать массив, а в функцию передавать 2 аргумента - номер комплекта диалогов и кол-во диалогов в этом комплекте. Соответсвенно и код функции претерпит небольшие изменения. При таких последовательных вызовах функция случайным образом назначит активным один из диалогов. При повторной попытке заговорить счётчик диалогов сбросится и случайный выбор будет сделан заново. Изменено 14 Декабря 2016 пользователем Kirgudu 2 Инструмент Ссылка на комментарий
Overfirst 631 Опубликовано 14 Декабря 2016 Поделиться Опубликовано 14 Декабря 2016 @Kirgudu, как вариант, можно ещё использовать вероятность ~. Не? meet_dialog = {~30} dialog1, {~60} dialog2, {~10} dialog3 1 Ранее был известен под ником BoBaH_671. Ссылка на комментарий
Kirgudu 1 217 Опубликовано 14 Декабря 2016 Поделиться Опубликовано 14 Декабря 2016 (изменено) @BoBaH_671, вот понятия не имею. Но не исключено. Почему бы не проверить, если есть возможность? Если сработает (сам посмотреть не могу) - это, пожалуй, будет оптимальней, чем то, что я понаписал выше. Что ж, хотя бы поупражнялся. Изменено 14 Декабря 2016 пользователем Kirgudu Инструмент Ссылка на комментарий
Overfirst 631 Опубликовано 14 Декабря 2016 Поделиться Опубликовано 14 Декабря 2016 (изменено) @Kirgudu, сработало. Только у меня диалог после открытия практически сразу исчезает. Быть может, эта штука висит на апдейте даже во время диалога? Тогда проверка возвращает false, и диалоговое окно закрывается. Надеюсь, ты понял, что за несвязную чушь я сказал. Думаю, так оно и есть. Играя в моды, сдавая квест на поиск какого-то предмета, я открывал окно диалога, продавал предмет, и диалог после закрытия торговли сбрасывался. С вероятностью так же, на апдейте висит, похоже. Изменено 14 Декабря 2016 пользователем BoBaH_671 Ранее был известен под ником BoBaH_671. Ссылка на комментарий
Stalkeruga_238 2 Опубликовано 14 Декабря 2016 Поделиться Опубликовано 14 Декабря 2016 Подскажите, как выдать поршень при поднятии предмета? Ссылка на комментарий
dPlayer 501 Опубликовано 14 Декабря 2016 Поделиться Опубликовано 14 Декабря 2016 @Stalkeruga_238, function search_weapon_complete1(actor, npc) if db.actor ~= nil then if db.actor:object("ПРЕДМЕТ") then db.actor:give_info_portion("ПОРШЕНЬ") return true end end return false end Ссылка на комментарий
UnLoaded 313 Опубликовано 15 Декабря 2016 Поделиться Опубликовано 15 Декабря 2016 Подскажите, как выдать поршень при поднятии предмета? Файл bind_stalker.script, в нем ф-ция on_item_take. Она срабатывает при появлении(взятии) предмета в инвентаре ГГ. В ней добавь проверку нужного предмета, к примеру по его конфиговой секции: local section = obj:section() if section and section == "секция_предмета" then -- что то делаем end Ссылка на комментарий
Kirgudu 1 217 Опубликовано 15 Декабря 2016 Поделиться Опубликовано 15 Декабря 2016 (изменено) Только у меня диалог после открытия практически сразу исчезает.Это потому, что настройки диалога у тебя неправильные. Дело в том, что необходимость выбора того или иного диалога рассчитывается последовательно, а вероятности при расчёте не складываются. Смотри: meet_dialog = {~30} dialog1, {~60} dialog2, {~10} dialog3Первый диалог будет выбран с вероятностью 30% (число сравнивается со случайным числом в диапазоне от 1 до 100, если больше - сработало). 70% - вероятность, что не будет выбран. Второй диалог будет выбран с вероятностью 60%, но относительно 70% вероятности не выбора первого диалога. Общая вероятность выбора второго диалога 0.7*0.6*100% = 42%. Отсюда 30%+42% = 72% - вероятность выбора первого или второго диалога, 28% - вероятность не выбора. Третий диалог будет выбран с вероятностью 10%, но уже от этих оставшихся 28%. Общая вероятность выбора третьего диалога составит 0.1*0.28*100% = 2.8%. Отсюда 72%+2.8% = 74.8% - общая вероятность выбора одного из трёх диалогов. Получается, с вероятностью 100%-74.8% = 25.2% никакой диалог не будет выбран. И даже если у тебя получилось при начале разговора попасть в «правильные» 74.8% - на апдейте, тут ты прав, происходит выбор диалога заново, с некоей вероятностью он оказывается пуст, и в таком случае в скрипте логики происходит вызов функции restore_default_start_dialog(). Возможно, именно она и закрывает диалоговое окно - движкоправы могут сказать точнее. Чтобы условие гарантированно приводило к какому-либо диалогу, необходимо, чтобы последний диалог в цепочке от вероятности не зависел: meet_dialog = {~30} dialog1, {~60} dialog2, dialog3Но и тогда диалоговое окно теоретически может сбрасываться, если во время апдейта новый выбранный диалог будет отличаться от старого - для смены диалога в таком случае вызывается функция set_start_dialog(dialog). Вызывает ли эта функция аналогичное закрытие диалогового окна, мне неизвестно. Надо проверять. Update: Прошу считать данный пост недействительным - причина ниже. Изменено 15 Декабря 2016 пользователем Kirgudu 1 Инструмент Ссылка на комментарий
dPlayer 501 Опубликовано 15 Декабря 2016 Поделиться Опубликовано 15 Декабря 2016 (изменено) @Kirgudu, ну ты сообразил А сумма вероятностей должна быть = 100? Как передать в диалог текущее значение параметра (ну например состояние оружия)? Изменено 15 Декабря 2016 пользователем dPlayer Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти