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

[SOC] Мелкие правки движка


Kondr48

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

@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, как можно видеть), у меня не вышло, хотя совсем глубоко не окапывался. Я уже не помню, но по моему у меня были мысли экспортировать класс, который как раз эти графы все делает.

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


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

 

 

Все диалоги перестраивать каждый раз - лишняя нагрузка

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

 

 

 

Вы, насколько я понял - пытались скриптом генерировать сам граф, я же генерацию графа оставил на движок, только сделал механизм перезагрузки.

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

 

 

 

Мой пост можно воспринимать как иллюстрацию - как победить shared_data.Она используется не только для диалогов.

О том я и говорю, у нас ее вообще нет.

 

Право на жизнь конечно имеет, но мне он кажется весьма переусложненным :).

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


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

@Kondr48, по поводу последнего спойлера. В ТЧ (оригинальном) два параметра переносимого веса. Я их называю ограничивающий и расчетный, ты изменяешь в коде только первый. Что это означает на практике? Это означает, что носить ты сможешь больше, но критический вес остается на той же отметке. Данная логика работы является некорректной с точки зрения оригинального механизма. Отсюда вытекает и проблема какой именно параметр из двух отображать в окне описания, поэтому чтобы все разрешить корректно нужно либо объединить все воедино, либо прибегнуть к какому-то иному алгоритму для массы. Мое решение можно рассмотреть как один из вариантов.

  • Полезно 1

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


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

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