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

Мастерская по разбору "вылетов" X-Ray


aka_sektor

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


[error]Expression : m_textures.find(def_texture_name)!=m_textures.end()
[error]Function : CUITextureMaster::FindItem
[error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\ui\UITextureMaster.cpp
[error]Line : 156
[error]Description : wpn_bm16f_410

Что тут собственно, требуется разобрать? вылет находил я сам, после моего же сообщения он в "справочнике" и появился. Причина вылета - где-то кому-то понадобилась текстура с именем, указанным в логе. И не нашлась.


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


Expression    : data
Function    : CVirtualFileReader::CVirtualFileReader
File        : E:\stalker\sources\trunk\xrCore\FS.cpp
Line        : 462
Description    : ...\gamedata\textures\wpn\wpn_gauss.dds
Arguments    : Not enough storage is available to process this command

Причина:

Нехватка памяти для обработки указанной текстуры. Вместо текстуры может быть практически любой файл: звук, модель,
all.spawn
, файл геометрии локации и т.д.
Лечение:
Попробуйте загрузить последнее сохранение. Если не помогает - снизьте графические настройки игры.
Expression : data
Function : CVirtualFileReader::CVirtualFileReader
File : D:\prog_repository\sources\trunk\xrCore\FS.cpp
Line : 545
Description : d:\games\s.t.a.l.k.e.r. - call of pripyat\gamedata\textures\wpn\wpn_rpk_grips_bump.dds
Arguments : Not enough storage is available to process this command.

Вроде как всему виной слабый PC (32-битная винда, и малое кол-во ОЗУ).

Дополню. Не совсем любой файл, а какой-то именно тяжелый. Текстура большого размера, очень тяжелая модель, очень тяжелый и длинный звуковой или (возможно) видео-файл. И при условии слабого PC с 32-битной виндой и небогатым запасом оперативной памяти, движок может споткнуться на загрузке тяжелых файлов с таким логом.


Expression : fatal error
Function : CInifile::r_section
File : D:\prog_repository\sources\trunk\xrCore\Xr_ini.cpp
Line : 502
Description :
Arguments : Can't open section 'up_sect_fifthc_ak74u'. Please attach [*.ini_log] file to your bug report

По вылету 502, в справочнике довольно расплывчато описано в чем ошибка.


У тебя тоже невесть что: каком ini файле? Просят лог прикрепить к багрепорту, это не относится к причине ошибки.

Вот эта приписка "Please attach [*.ini_log] file to your bug report" не знаю где и зачем добавлена, но ini-файл это другое, вообще-то. это ресурс получаемый функцией system_ini(), т.е. файл system.ltx и все другие файлы, подключенные к нему с помощью инклюдов, а также подключенные к файлам, которые подключены к system.ltx, и т.д.

Нужно понять: где именно отсутствует секция?

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


1) не подключили или неправильно подключили инклюдом файл, в котором эта секция все таки есть.
2) опечатка в названии секции в конфиге или там где к ней обращаются. т.е. в конфиге есть одно, а вызывают что-то не совпадающее.
3) Ну просто нету такой секции, и не должно быть, допустим. Тогда поиском по скриптам и конфигам найти все упоминания этой секции и удалить.
4) Неправильное наследование. Следует понимать, что все подключенные к system.ltx ресурсы, движок читает как один ini-файл, линейно сверху вниз. Наследовать секции можно только от тех секций, которые к данному моменту уже прочитаны.
Примеры:
Вот так - можно.
[sect_a]
param = 1
param2 = 0
	[sect_b]:sect_a
param_3 = 5
А вот так - нельзя. Произойдет вылет Can't open section 'sect_b'
[sect_a]:sect_b
param = 1
param2 = 0
	[sect_b]
param_3 = 5


Expression : fatal error
Function : WinMain
File : D:\prog_repository\sources\trunk\xrEngine\x_ray.cpp
Line : 946
Description : <no>
Arguments : stack overflow


Тоже не совсем ясно, что же тут требует пояснений. Переполнение стека - достаточно простое явление. Где-то, как правило в каком то цикле, накосячили с вызовом функций, или какая-то функция вызывает рекурсивно сама себя, возможно через посредников, тем самым переполняя стек. Решение тут простое - при написании кода понимать, что будет игра по нему делать, и не требовать "проглотить самое себя, начиная с хвоста" - тогда и движок за собственным хвостом гоняться не будет.


  • Спасибо 1
  • Полезно 2

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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


Ссылка на сообщение
29.03.2020 в 22:51, aka_sektor сказал:

А зачем ограничивать себя AMK форумом?

Затем, что на амк-форуме выше вероятность получить решение проблемы.

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

Хотя да, ты прав, что адекватные ответы могут попадаться и в других местах.

Например, из твоей же подборки

29.03.2020 в 22:51, aka_sektor сказал:

Ответ хороший. Правильный.

  • Смешно 1

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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


Ссылка на сообщение
5 часов назад, Colder сказал(а):

Description   : CUISubLine::GetColorFromText -- can't find first comma

В оригинале ТЧ, при задании цвета текста, движок требует чтоб если в коде цвета есть запятые и/или числа, то там было строго 4 числа и строго три запятые.

Если не так, то вот этот вылет.

А вот так выглядит исправление этого вылета

Скрытый текст

 

.



u32 CUILines::GetColorFromText(const xr_string& str)const{
//	typedef xr_string::size_type size;

	StrSize begin, end, comma1_pos, comma2_pos, comma3_pos;

	begin = str.find(BEGIN);
	end = str.find(END, begin);
	R_ASSERT2(npos != begin, "CUISubLine::GetColorFromText -- can't find beginning tag %c[");
	R_ASSERT2(npos != end, "CUISubLine::GetColorFromText -- can't find ending tag ]");
	
	// try default color
	if (npos != str.find("%c[default]", begin, end - begin))
		return m_dwTextColor;

	// Try predefined in XML colors
//	CUIXmlInit xml;
	for (CUIXmlInit::ColorDefs::const_iterator it = CUIXmlInit::GetColorDefs()->begin(); it != CUIXmlInit::GetColorDefs()->end(); ++it)
	{
		int cmp = str.compare(begin+3, end-begin-3, *it->first);			
		if (cmp == 0)
			return it->second;
	}

	// try parse values separated by commas
	comma1_pos = str.find(",", begin);
	comma2_pos = str.find(",", comma1_pos + 1);
	comma3_pos = str.find(",", comma2_pos + 1);

    //R_ASSERT2(npos != comma1_pos, "CUISubLine::GetColorFromText -- can't find first comma");        
	//R_ASSERT2(npos != comma2_pos, "CUISubLine::GetColorFromText -- can't find second comma");
	//R_ASSERT2(npos != comma3_pos, "CUISubLine::GetColorFromText -- can't find third comma");
	// commented by Zander

	u32 a, r, g, b;
	xr_string single_color;

	begin+=3;

	// Этот код воспринимает цвет и в ARGB, и в RGB формате. При не-валидном коде цвета устанавливается ARGB 255,200,200,200.
	if (npos != comma1_pos && npos != comma2_pos) { // have 2+ comma`s
		if (npos != comma3_pos) { // a,r,g,b code found
			single_color = str.substr(begin, comma1_pos - 1);
			a = atoi(single_color.c_str());
			single_color = str.substr(comma1_pos + 1, comma2_pos - 1);
			r = atoi(single_color.c_str());
			single_color = str.substr(comma2_pos + 1, comma3_pos - 1);
			g = atoi(single_color.c_str());
			single_color = str.substr(comma3_pos + 1, end - 1);
			b = atoi(single_color.c_str());
		}
		else { // r,g,b code found
			a = 255;
			single_color = str.substr(begin, comma1_pos - 1);
			r = atoi(single_color.c_str());
			single_color = str.substr(comma1_pos + 1, comma2_pos - 1);
			g = atoi(single_color.c_str());
			single_color = str.substr(comma2_pos + 1, end - 1);
			b = atoi(single_color.c_str());
		}
	}
	else { // necessary comma not contains
		Msg("!not valid text-color code detected.");
		a = 255; r = 200; g = 200; b = 200;
	}

    return color_argb(a,r,g,b);
}


 

 

Код принимает кодировку ARGB либо RGB, автоматически разбираясь что это. Если оно не то и не другое, ругается в лог и устанавливает цвет текста ARGB 255,200,200,200.

При любой абракадабре на входе, не вылетает никогда.
 

  • Спасибо 1
  • Полезно 2

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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


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

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

×
×
  • Создать...