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

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


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

0023:0835392D xrRender_R4.dll

[error][ 298] : Слишком много попыток занесения события для семафора.

На все эти описания можно смело забивать - это выводится результат работы последней вызванной WinApi функции. Движок при своей работе не вызывает winapi. Конкретно эта ошибка вообще могла остаться еще со старта игры от проверки запуска нескольких копий.
  • Спасибо 2
  • Полезно 2
Ссылка на комментарий

Гм, а может кто-нибудь, у кого все под руками, глянет, как именно, по каким условиям, неписи забывают своего best_enemy() ? Ну и best_danger() ?

 

в смысле, не просто поменять одного на другого, а вообще забыть ?

Или "какой-нибудь враг найдется всегда" ?

Изменено пользователем Dennis_Chikin
Ссылка на комментарий

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

 

Подробное изложение вопроса:

 

 

Здесь идет считывание <phrase_list> или <init_func>.

void CPhraseDialog::load_shared	(LPCSTR)
        ...
	//заполнить граф диалога фразами
	data()->m_PhraseGraph.clear();

	XML_NODE* phrase_list_node = pXML->NavigateToNode(dialog_node, "phrase_list", 0);
	if(NULL == phrase_list_node){
		LPCSTR func = pXML->Read(dialog_node, "init_func", 0, "");

		luabind::functor<void>	lua_function;
		bool functor_exists = ai().script_engine().functor(func ,lua_function);
		THROW3(functor_exists, "Cannot find precondition", func);
		lua_function	(this);
		return;
	}
        ...

Вызывается эта функцию отсюда:

void CPhraseDialog::Load(shared_str dialog_id)
{
	m_DialogId = dialog_id;
	inherited_shared::load_shared(m_DialogId, NULL);
}

Эта в свою очередь отсюда:

bool CPhraseDialogManager::AddAvailableDialog(shared_str dialog_id, CPhraseDialogManager* partner)
{
//	PHRASE_DIALOG_INDEX dialog_index =  CPhraseDialog::IdToIndex(dialog_id);
	if(std::find(m_CheckedDialogs.begin(), m_CheckedDialogs.end(), dialog_id) != m_CheckedDialogs.end())
		return false;
	m_CheckedDialogs.push_back(dialog_id);

	DIALOG_SHARED_PTR phrase_dialog(xr_new<CPhraseDialog>());
	phrase_dialog->Load(dialog_id);
        ...

Она в свою очередь: 

void   CActor::UpdateAvailableDialogs	(CPhraseDialogManager* partner)

Могу и далее расписать стек вызовов, но смысла не вижу, т.к. сам ничего не нашел... Суть в том что, граф фраз строится один раз, и дальше обновляются все фразы в этом графе на доступность для произношения. Вопрос: Каким образом можно обновлять и граф фраз?

 

 

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

@Старлей, я класс написал для динамического построения диалога и фраз, который, к слову, слабо пересекается с тем что есть, так как стандартный вариант диалогов слабо пригоден для этих целей (насколько я помню там довольно трудно вклиниваться в то что есть, если вообще возможно (опять же разумеется без перелопачивания всего что есть)). Разберись с интерфейсами, там не сказать что сильно сложно. А так смотри, можешь написать обработку m_PhraseGraph, но задача довольно не тривиальна, так как в графах диалога сложные массивы, явно работать как с простым вектором не выйдет.

 

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

Изменено пользователем Карлан
Ссылка на комментарий

Всем привет. В ЗП у ПДА есть такая возможность - если закрыть его и открыть снова, то будет открыта последняя вкладка. Что именно отвечает за это?

И вопрос вдогонку - как принудительно активировать определенную вкладку?

К20

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

Всем привет, я тут на просторах интернета нашел статейку повествующую о некотором билде Метро 2033 заделаном на модифицированном X-Ray'ее, даже ссылка на билд есть и

есть. Интересно из него можно что полезного получить?
  • Нравится 1
Ссылка на комментарий

@Дизель, Я сам архив с билдом не качал, но просматривал его содержимое на Яндекс диске, структура файлов в папке content аналогична геймдате в сталкере, только в папке anims есть неизвестные мне файлы с форматом *trk

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

@Дизель, это не микс, это почти чистый X-Ray, приблизительно между 1.0007 и 1.5. Так сказать, 1.3. Даже эффекты почти совпадают.

Солидарен с @Earth2Space - там нет ничего интересного.

Добавлено RayTwitty,

Движок метро имеет очень отдаленное отношение к сталкерскому, говорить что это "почти чистый х-рей" в корне неправильно.

  • Не согласен 2
Ссылка на комментарий

Всем привет. В ЗП у ПДА есть такая возможность - если закрыть его и открыть снова, то будет открыта последняя вкладка. Что именно отвечает за это?

И вопрос вдогонку - как принудительно активировать определенную вкладку?

Вопрос закрыл. За это отвечает проверка

if ( !m_pActiveDialog ) в UIPdaWnd.cpp

  • Полезно 2

К20

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

Такой вопрос у меня появился. Известно, что X-RAY считывает некоторые ресурсы (XML, текстуры и др.) в самом начале запуска программы (когда мы видим заставки), а некоторые другие ресурсы при загрузке уровня. Так вот если, мы хотим изменить некоторые ресурсы или их параметры в "горячем режиме" (во время "работы" игры) которые прогружаються с запуском программы, то что бы увидеть изменения в игре нам понадобиться полностью выйти из игры и зайти снова притом всякие действия вида: vid_restart 1 или перезагрузка локации нам не помогут. Возможно ли движковыми правками сделать перечитывание игрой оных ресурсов не выходя из игры, например скриптовой ф-цией (и) или консольной командой?


 

 

если руки прямые.
Вот в этом главная проблема... Изменено пользователем Graff46
Добавлено RayTwitty,

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

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

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


вот тут кое-что можно прочесть http://pastebin.com/dXjwaFLv, в принципе по вектору развития не много прибавилось, сейчас в основном работаю над оптимизацией того что есть, то есть убираю все уродские скриптовые костыли с помощью движка, количество ВСЕХ скриптов уже сейчас меньше чем в среднестатистическом глобальнике, то есть вся обвязка уже достаточно ясно видна, хоть и есть еще около 10 кандидатов на ликвидацию :).

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

 

 

Причину бага с глитчами камеры в ЗП я так найти не смог.

Такова селяви.

 

И глитчится она, к слову, не только при перезарядке, это если тебе скажут еще к чему-нибудь ее прикрутить ;).

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

 

 

И глитчится она, к слову, не только при перезарядке, это если тебе скажут еще к чему-нибудь ее прикрутить

Баг происходит, когда заканчивается один эффектор при активности другого. Т.е. если минимум два эффектора активны.

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

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

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

 

Проверить баг просто: перезаряжаемся и стрефимся

Да уже поднадоело это передёргивание камеры при перезарядке. Может и вправду уже кто-то исправил?

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

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

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

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

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

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

Войти

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

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

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