AERIE Team

Все об играх серии Baldur's Gate
Текущее время: 29 май 2017, 06:54

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Подскажите алгоритм
СообщениеДобавлено: 15 июн 2011, 01:12 
Не в сети
Аватара пользователя

Зарегистрирован: 11 июл 2005, 12:08
Сообщения: 16
Всем добрый день.
Просьба помочь с пониманием алгоритма работы в ситуации с глюком:
Поставил BGT-сборку от SubZero, поставил на нее несколько NPC-модов, в том числе Imoen's Romance.
В общем все работает корректно, за исключением диалогов с Джахейрой.
Ее диалоги почему-то подменяются диалогами из Imoen's Romance.
Для некоторых квестов это фатально. Например, в диалоге с бароном Плойером, после того как Джахейру проклинают,
диалог должен продолжиться, чтобы в итоге Плойер и компания телепортировались. Однако вместо этого начинается какой-то диалог про сны об Имоен. На том все и заканчивается. Плойер и маги по прежнему на месте, где с магами сразу можно договориться, а Плойера - завалить, не выходя из таверны. :-)
Поставил Near Infinity. Нашел соответствующие пункты диалога,
нашел скрипты, которые содержат процесс наложения проклятья (все по цепочке).
Заканчиваются скрипты так:
Цитата:
IF
True()
THEN
RESPONSE #100
CutSceneId("Terrece")
ApplySpellRES("dw#fpplo","Jaheira") // Исцеление легких ран
SmallWait(5)
ForceSpell("Jaheira",JAHEIRA_WEAKNESS)
SetGlobal("JaheiraCursed","GLOBAL",1)
Wait(1)
ActionOverride("Jaheira",StartDialogueNoSet(Player1))
END


И вот тут попал в тупик. Как компилятор понимает - откуда продолжать диалог?
Вроде никаких указаний в ActionOverride("Jaheira",StartDialogueNoSet(Player1)) нет...
Как мне отловить баг? Гуру, поясните пожалуйста на этом примере.

_________________
Обожаю наемных убийц - что с ними не делай - никогда совесть не мучает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подскажите алгоритм
СообщениеДобавлено: 15 июн 2011, 21:46 
Не в сети
Аватара пользователя

Зарегистрирован: 09 сен 2006, 19:38
Сообщения: 558
Откуда: СПб
Interact() - вызывает бантерный диалог из INTERDIA.2DA
StartDialogNoSet(), Dialog() - вызывают текущий диалоговый файл, указанный в файле кричи. Для партийцев это контролируется из PDIALOG.2DA

Структура таблиц - сначала death variable персонажа (в приведенном скрипте это jaheira), затем соответствующие ей файлы

В первой все должно быть понятно, одна колонка для Теней, вторая - там где стоит суффикс 25 - для Трона.
Во второй первая колонка отвечает за диалоговый файл, который присваивается НПС после их удаления из партии (суффикс P), вторая - после присоединения (суффикс J). Как и с бантерами, суффикс 25 для Трона. Еще тут есть имена скриптов, но они к делу вряд ли относятся.

У Джахи в графе JOIN_DIALOG_FILE должно стоять jaheiraj.

_________________
They killed Fry :( Them bastards have killed her :'(


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подскажите алгоритм
СообщениеДобавлено: 16 июн 2011, 10:53 
Не в сети
Аватара пользователя

Зарегистрирован: 11 июл 2005, 12:08
Сообщения: 16
Спасибо, буду смотреть.

_________________
Обожаю наемных убийц - что с ними не делай - никогда совесть не мучает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подскажите алгоритм
СообщениеДобавлено: 16 июн 2011, 21:55 
Не в сети
Аватара пользователя

Зарегистрирован: 11 июл 2005, 12:08
Сообщения: 16
Посмотрел таблицы. В JOIN_DIALOG_FILE стоит JAHEIRAJ, остальное вроде тоже похоже.
Насколько я понял, проблема не в том, что выбирается не тот файл, проблема в том, что из этого файла начинается другой диалог непонятно почему. Нашел Response, стартующий этот диалог (из Imoen's Romance, но тоже с Джахой). Все равно ничего не понял.
Для продолжения диалога по правильной ветке должны сработать 2 триггера.
Global("ENDOFBG1","GLOBAL",2)
Global("JaheiraCursed","GLOBAL",1)
И диалог должен продолжиться со State 33.
С первым не разобрался, но нашел его в других диалогах, которые сработали. Значит все в порядке.
Вторая переменная насколько я понял устанавливается в приведенном выше скрипте.
Тем не менее, вместо этого запускается State 1210
Триггеры:
!Global("PhaereFixMRJa","GLOBAL",1)
Global("HadImoenDreamRomance2","GLOBAL",1)
!GGT("Chapter",3)
Global("WeTalkedOfItAlready","LOCALS",0)
Не знаю поможет ли эта информация.
Хотелось бы понять суть.
Потому что глючили и другие бантеры с Джахой, она начинала что-то говорить, видимо про Имоен и бантер на этом заканчивался.
Поясните если можно чуть подробнее логику. Я сам бывший программист, надеюсь, что смогу понять.

_________________
Обожаю наемных убийц - что с ними не делай - никогда совесть не мучает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подскажите алгоритм
СообщениеДобавлено: 17 июн 2011, 01:26 
Не в сети
Аватара пользователя

Зарегистрирован: 09 сен 2006, 19:38
Сообщения: 558
Откуда: СПб
Диалоговый state бывает двух типов - с триггером и без. Когда скриптовой командой активируется диалог, то проверяются по очереди все стейтовые триггеры. Первый, в котором условие верно, выдает игроку свой стейт (если все ложны, то это порой приводит к stutter'у, когда непись постоянно останавливается).

По-хорошему, все запуски диалога должны включать переменную-предохранитель, но иногда этим пренебрегают - намеренно или случайно - в результате чего одновременно несколько стейт-триггеров могут оказаться верными.

В модовых диалогах новым стейт-триггерам можно в принудительном порядке указывать очередность (иначе называемую WEIGHT) относительно уже имеющихся, что и проделывает Имоен Романс. Вероятно, он напоролся на какой-то ранее установленный мод, тоже игравшийся с очередностью, отчего попутался порядок триггеров.

Тут еще про него сказано http://www.shsforums.net/topic/19539-bg ... atibility/
Цитата:
- Imoen Romance v1.20 or above

* Install ONLY just before reaching Irenicus' Dungeon, or use BG2 game only - destroys Imoen's joining/leaving dialogue (goes to Copper Coronet) and causes problems when forcing dialogue with Imoen during Baldur's Gate and Tales of the Sword Coast; Irenicus' dungeon-specific banters do not work


Чем все это дело лечить - не знаю. Можно переустановить все, но тогда будут глючить сейвы. Можно долго и нудно править вручную - то еще занятие, если учесть в каком беспорядке находится исходник диалога из ИР, - причем не факт, что глючит одна только Джаха.

Можно попробовать сделать частичную переустановку
1) сохранить копию вейду лога, чтобы потом не ошибиться в порядке
2) по очереди снять моды вплоть до Имоен Романса, деинсталлировать и его тоже
3) открыть текстовым редактором файл imoenrom/imoendia.d, в нем найти
Код:
APPEND JAHEIRAJ
IF WEIGHT #26
~!Global("PhaereFixMRJa","GLOBAL",1)
Global("HadImoenDreamRomance2","GLOBAL",1)
!GGT("Chapter",3)
Global("WeTalkedOfItAlready","LOCALS",0)~
Код:
APPEND JAHEIRAJ
IF WEIGHT #508
~Global("JaheiraThoughtMR","GLOBAL",1)~ THEN BEGIN JTMR1

4) заменить WEIGHT #26 на большее значение, скажем, WEIGHT #500; главное, чтобы оно не было больше второго, которое тоже можно при желании увеличить, но я думаю, что вряд ли даже в полной мегасборке наползет больше 500
5) установить все снятые моды обратно, в том же самом порядке, в каком они стояли до этого

Если по-прежнему глючит, то я не могу дать больше никаких советов, кроме переустановки - желательно с помощью BWP, т.к. правильный порядок установки модов имеет большое значение, - и начала новой игры.


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

Yakatory писал(а):
С первым не разобрался, но нашел его в других диалогах, которые сработали. Значит все в порядке.
Почти наверняка - искусственное разделение на БГ1 и БГ2 в трилогии.

_________________
They killed Fry :( Them bastards have killed her :'(


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подскажите алгоритм
СообщениеДобавлено: 17 июн 2011, 08:10 
Не в сети
Аватара пользователя

Зарегистрирован: 11 июл 2005, 12:08
Сообщения: 16
Понял, большое спасибо.

_________________
Обожаю наемных убийц - что с ними не делай - никогда совесть не мучает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подскажите алгоритм
СообщениеДобавлено: 17 июн 2011, 11:07 
Не в сети
Аватара пользователя

Зарегистрирован: 11 июл 2005, 12:08
Сообщения: 16
to Ardanis.
Еще один вопрос: поясните, пожалуйста, а почему будут глючить сэйвы если все переустановить? Глобалы ведь остаются теми же? Или в сэйвах хранятся ссылки на какие-то данные, которые изменятся при переустановке?

_________________
Обожаю наемных убийц - что с ними не делай - никогда совесть не мучает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подскажите алгоритм
СообщениеДобавлено: 17 июн 2011, 12:22 
Не в сети
Аватара пользователя

Зарегистрирован: 09 сен 2006, 19:38
Сообщения: 558
Откуда: СПб
Yakatory писал(а):
Или в сэйвах хранятся ссылки на какие-то данные, которые изменятся при переустановке?

Да. Во-первых, могут быть ссылки на исключительно модовые файлы, а во-вторых проблемы с текстом.
Последнее остается актуальным, даже если все ранее имевшиеся моды установлены заново, но в ином порядке. Происходит оттого, что весь игровой текст содержится в одном файле - dialog.tlk, и каждой строке присвоен свой номер, который и указывается в диалогах, названиях предметов, именах актеров и т. д. При установке мода WeiDU добавляет текст в конец dialog.tlk, и в зависимости от порядка инсталляции строка мода А могут быть как впереди, так и позади строк мода Б. Если теперь сохраниться, то игра запишет номера строк в сейв. Если после этого переустановить А и Б в обратном порядке, то при загрузке сейва отображаемый текст перепутается. Это верно для оказавшихся в сейве журнальных записей, имен актеров и их реплик-озвучки. Предметы, скрипты, диалоги в сейв не попадают, так что с ними ничего не случится.

В данном конкретном случае проблема, насколько я могу судить, заключена именно в неправильном порядке установки, т.к. ИР лучше ставить пораньше. Старый очень это мод, доступные тогда инструменты и база знаний были не чета нынешним.

_________________
They killed Fry :( Them bastards have killed her :'(


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB