Карлан 1 050 Опубликовано 27 Января 2017 @Winsor, слишком муторный подход, мы просто убрали прокладки. Вот же я показывал: Диалог загружается каждый раз при обращении к нему со всеми своими потрохами. Всея динамика как есть, графы, фразы и все что угодно можно переделывать по ходу игры безо всяких пометок. Диалоги перегружаются и во время самого разговора, поэтому у меня даже сделан флаг для локального запоминания фразы (чтобы она не менялась): function create_bye_phrase() if not bye_phr_idx then bye_phr_idx = math.random(4) bye_phr_idx = bye_phr_idx-1 end return game.translate_string("actor_break_dialog_"..bye_phr_idx) end У меня вот как-то так пока, но это все, конечно, мишура: C++ class CPhrase { function GetGoodwillLevel(); --// позволит задавать благосклонность фразе, последний параметр AddPhrase, но при ПЕРЕстроении графа ими будет пользоваться сподручнее function SetGoodwillLevel(number); --// Karlan->ALL: финалайзер доделывать или нет? помоему он не нужен, мишура все это }; C++ class CPhraseDialog { CPhraseDialog() --// конструктор класса --// Karlan->ALL: полной динамики я пока не добился --// FIXME почему-то не строится граф, вроде бы все вершины и ребра явно прописываю, но граф в итоге получается абсолютно полностью избитый, возможно для полной динамики придется сделать еще один подкласс, где будут методы полного построения графа в скриптах, так что пока динамический граф можно строить только из шаблонов function GetDialog(string); --// для теста function SetCaption(string); --// позволяет на лету указать(изменить) заголовок (показывается вместо нулевой фразы) (рекомендуется вызывать ДО создания графа(!)) function SetPriority(number); --// позволяет на лету указать(изменить) приоритет (рекомендуется вызывать ДО создания графа(!)) function IsFinished(); --// проверяет есть ли еще какие-то доступные фразы в графе, если true, то выкинет в список выбора темы }; C++ class CPhraseScript { function SetScriptText(string); --// позволяет задать текст скриптом, на входе айди диалога и айди сказанной фразы в строковых представлениях }; Что, возможно, действительно тут надо - написать класс для создания графов, у меня так руки и не дошли. Попробуй на досуге, я пытался грубыми врезками вклинится без сторонних классов (прямо в CPhraseDialog, как можно видеть), у меня не вышло, хотя совсем глубоко не окапывался. Я уже не помню, но по моему у меня были мысли экспортировать класс, который как раз эти графы все делает. Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 27 Января 2017 Все диалоги перестраивать каждый раз - лишняя нагрузка Не все диалоги, а только те, к которым идет обращение. Нагрузки там никакой нет совершенно. Самый сложные диалоги у Сидоровича, и в скорости их чтения абсолютно ничего не изменилось, стоит-ли говорить о других? Вы, насколько я понял - пытались скриптом генерировать сам граф, я же генерацию графа оставил на движок, только сделал механизм перезагрузки. Нет, я пытался сделать скриптовые механизмы управлением графа. Выстраивает его в любом случае движковый класс, но строит он его по шаблону, и вот для того, чтобы эти шаблоны можно было задавать в скриптах я и делал функции. Мой пост можно воспринимать как иллюстрацию - как победить shared_data.Она используется не только для диалогов. О том я и говорю, у нас ее вообще нет. Право на жизнь конечно имеет, но мне он кажется весьма переусложненным . Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 18 Февраля 2017 @Kondr48, по поводу последнего спойлера. В ТЧ (оригинальном) два параметра переносимого веса. Я их называю ограничивающий и расчетный, ты изменяешь в коде только первый. Что это означает на практике? Это означает, что носить ты сможешь больше, но критический вес остается на той же отметке. Данная логика работы является некорректной с точки зрения оригинального механизма. Отсюда вытекает и проблема какой именно параметр из двух отображать в окне описания, поэтому чтобы все разрешить корректно нужно либо объединить все воедино, либо прибегнуть к какому-то иному алгоритму для массы. Мое решение можно рассмотреть как один из вариантов. 1 Поделиться этим сообщением Ссылка на сообщение