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

Редактирование движка X-Ray


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

не логичнее ли было удаление строки поставить в самом конце?

В конце чего? :facepalm:

 

 

 

Массивы - это медленно. Зато удобно. Но - много памяти жрет. И да, еще страус-труп грил, шо namespace - признак дурного кода.

Перепиши на досуге, и покажи нам как надо!

Ссылка на комментарий

@Карлан, в конце пространства. После replace_string.

Переписывать? Шутник! Мне оно надо? Нет.

Как надо? Ну тут Страуструпа читать. И не массивчик создавать, а каждый указатель отдельно. ООП - оно такое,, серьзено повышает скорость разработки, однако приводит к перерасходу ресурсов. Все потому, что приходиться абстрактному чему-то перебирать массив, а не обращаться сразу к какой-то абстрактной функции.

И вообще, я просто дал совет, как таковой выглядит с моей точки зрения. Ви же обижаться изволили.

Добавлено RayTwitty,

"в конце пространства. После replace_string."

А какая разница в каком порядке идет список экспортируемых методов? о_0

  • Не нравится 1
Ссылка на комментарий

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

Во-первых, в файле alife_monster_movement_manager_script.cpp надо исправить экспорт метода path_type.

 

Во-вторых, в файле alife_monster_patrol_path_manager.cpp надо добавить метод

 

void CALifeMonsterPatrolPathManager::path(CPatrolPathParams *params)
{
    path(params->m_path);
    start_type(params->m_tPatrolPathStart);
    route_type(params->m_tPatrolPathStop);
   use_randomness(params->m_bRandom);
}

 

 

 

и экспортировать его в Lua, прописав в файле alife_monster_patrol_path_manager_script.cpp. Существующий (тот, что принимает строку как аргумент), наоборот, надо убрать из экспорта. Если он больше нигде не используется, его можно совсем убрать из кода. Также из экспорта можно убрать методы start_type, route_type и use_randomness (те, что работают на запись), т.к. эти параметры считываются из переданного объекта CPatrolPathParams.

 

В-третьих, в файле alife_monster_brain.cpp нужно поставить проверку на can_choose_alife_tasks() до вызова select_task, а не внутри него. И если can_choose_alife_tasks() вернёт true, то делать как есть сейчас (вызывать select_task и далее), а иначе сразу переходить к movement().update(). Как-то вот так:

 

[spoiler=CALifeMonsterBrain::update]

void CALifeMonsterBrain::update ()
{
     if (can_choose_alife_tasks())
     {
          select_task ();
          if (object().m_smart_terrain_id != 0xffff)
               process_task ();
          else
               default_behaviour ();
     }
     movement().update ();
}

 

 

это нужно для того, чтобы установленный из скрипта тип пути не сбрасывался.

Для передвижения в оффлайне этого должно быть достаточно, но надо проверять.

  • Спасибо 1
  • Полезно 2
Ссылка на комментарий

Провел замеры перезагрузки диалогов, инфопоршней и строк на чистой игре (в секундах):

 

0.025326 - диалоги

0.200278 - инфопоршни

0.213696 - строки

 

В чем секрет диалогов? :blink:

Ссылка на комментарий

Кто-нибудь прикалывался по созданию бустеров, вроде так на вскидку не сложно, но муторно, пока начал только разгребаться что есмь "юзабельные итемы", добавил три параметра в конфиг:

 

use_snd = ; аналог ЗП

use_anm = ; проигрывает кам-эффект при использовании

use_ppe = ; проигрывает ппе-эффект при использовании

 

Цикличность эффектов делать не стал, мне интересно вот это (цикличность) надо кому или нет? А то можно воткнуть булевый флаг тип юз_анм_суслик = тру :).

Цикличность задается в секции эффектора.

Моя функция читает файл, а не секцию, вся настройка эффекта идет в движке.

upd:

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

Изменено пользователем Карлан
Добавлено RayTwitty,

Цикличность задается в секции эффектора. Лучше сделать параметр use_eff, а дальше уже как по старинке пусть действует.

Добавлено RayTwitty,

Ну можно оба варианта сделать - не вижу проблемы. Либо указывай секцию эффектора, либо пути до файлов.

  • Нравится 1
Ссылка на комментарий

В дополнение к своему посту про правки, касающиеся оффлайн-передвижения. Во-первых, забыл дописать кое-что - в void CALifeMonsterPatrolPathManager::path надо делать проверку параметра на null. 

void CALifeMonsterPatrolPathManager::path(CPatrolPathParams *params) {

    if (params == null) {

        m_path = null;

        m_actual = false;

        return;

   }
    path(params->m_path);
    start_type(params->m_tPatrolPathStart);
    route_type(params->m_tPatrolPathStop);
   use_randomness(params->m_bRandom);
}

 

 

 

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

 

В файлах xrGame/stalker_alife_task_actions.cpp и xrGame/ai/monsters/states/monster_state_smart_terrain_task* прописано прямое обращение к методу task, возвращающему объект CALifeSmartTerrainTask. Метод этот вызывается из объекта smart terrain. Это плохо тем, что полученный task не будет синхронизирован с данными оффлайн-передвижения, если используется передвижение по путям . Чтобы это исправить, надо, чтобы в классе CALifeMonsterDetailPathManager вместо

params m_destination;

было

CAlifeSmartTerrainTask *m_destination;

при этом реализацию класса CAlifeSmartTerrainTask надо брать из исходников ЗП (чтобы можно было создать CAlifeSmartTerrainTask для произвольной точки). Затем надо внести соответствующие изменения в код класса CALifeMonsterDetailPathManager, чтобы ничего не "поломалось" после изменения типа m_destination. В него же надо дописать что-то примерно такое

public CAlifeSmartTerrainTask * CALifeMonsterDetailPathManager::get_destination() {
      return m_destination;
}

и далее в файлах xrGame/stalker_alife_task_actions.cpp и xrGame/ai/monsters/states/monster_state_smart_terrain_task* заменить вызовы метода task из smart_terrain на вызов CALifeMonsterDetailPathManager::get_destination(). Это значительно исправит синхронизацию онлайн и оффлайн передвижения.

Где-то ещё остался баг, из-за которого старый способ управления npc (game_object.command) конфликтует с новым (motivation_action_manager) по вопросу "куда идти" - в smart terrain task или туда, куда указано через game_object.command. Как-нибудь попозже и про него напишу.

 

 

Изменено пользователем Полтергейст
  • Полезно 1
Ссылка на комментарий

@-StalkMen-, варнинг - не полноценная ошипка))

У меня крокозябры в логе были, когда собирал ANSI-проекты с высталенной кодировкой Unicode. Поменяй, может поможет.

Ссылка на комментарий

@Romz, тебе именно xrEngine скомпиленный на релизе нужен? Или еще xrGame? Если только движок, так у меня есть собранный, давай тебе дам. Но хрГейм я не компилил, на моей машине это... утомительно занятие, так скажем.

Народ, опрос: в сорцах ЗП в каком файле лежит "ограничение" по памяти? Через HEX править не хочу, но ограничение на 4 гб снять хочется... Может где-то рядом с аллокатором? Я нуб, помогите пжслт.

И да, где (опять же в сорцах) лежит параметр FOV? Хотелось бы покопать.

Если кто может немного обьяснить мне структуру X-Ray (для меня она после идТэх 2 вообще запутанная), то прошу в ЛС написать. Спасибо заранее.

Добавлено RayTwitty,

FOV - g_fov в Actor.cpp должен быть.

Ссылка на комментарий

 

 

тебе именно xrEngine скомпиленный на релизе нужен? Или еще xrGame? Если только движок, так у меня есть собранный, давай тебе дам. Но хрГейм я не компилил, на моей машине это... утомительно занятие, так скажем.
Я имел ввиду - готовое для вставки в игру, поставил и играй. Для меня сборка-разборка движков игровых - вообще тёмный лес...

Уже не актуально, нашёл на ап-про тему со всем наличествующим.

Шаман - СисАдмин

Всяко-разно: для ЧН

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

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