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

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

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

Доброго времени суток. Ув. двигоправы, такой вопрос: вот мы имеем в гл.меню статическую картинку/заставку, в конфиге выглядит так:

	<background x="0" y="0" width="1024" height="768">
		<auto_static x="0" y="0" width="1024" height="768" stretch="1">
			<texture x="0" y="0" width="1920" height="1080">ui\ui_background_new</texture>
		</auto_static>
	</background>

Вместо текстуры стоит видео(ogm) на весь экран, вот xотелось бы "впилить"  сюда <random>, ну т.е. чтоб использовать на подобии, как рандомная музыка в гл.меню, что-то на подобии этого:

	<background x="0" y="0" width="1024" height="768">
		<auto_static x="0" y="0" width="1024" height="768" stretch="1" random="0">
		    	<texture x="0" y="0" width="1920" height="1080">ui\ui_background_new_0</texture>
		    	<texture x="0" y="0" width="1920" height="1080">ui\ui_background_new_1</texture>
		    	<texture x="0" y="0" width="1920" height="1080">ui\ui_background_new_2</texture>
		</auto_static>
	</background>

Что-то вроде "динамической смены заставки гл.меню". Как я понял - надо смотреть в "xrGame\ui\UIXmlInit.cpp" функция:

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

void CUIXmlInit::InitAutoStaticGroup(CUIXml& xml_doc, LPCSTR path, int index, CUIWindow* pParentWnd)
{
	XML_NODE* _stored_root				= xml_doc.GetLocalRoot();
	xml_doc.SetLocalRoot				(xml_doc.NavigateToNode(path,index));

	XML_NODE* curr_root					= xml_doc.GetLocalRoot();
	if(!curr_root)
			curr_root					= xml_doc.GetRoot();
	
	XML_NODE* node						= curr_root->IterateChildren(NULL);
	int cnt_static						= 0;
	int cnt_frameline					= 0;
	int cnt_text						= 0;
	string512							buff;

	while(node)
	{
		LPCSTR node_name			= node->Value();
		if(0==stricmp(node_name,"auto_static"))
		{
			CUIStatic* pUIStatic		= xr_new<CUIStatic>();
			InitStatic					(xml_doc, "auto_static", cnt_static, pUIStatic);
			xr_sprintf					(buff,"auto_static_%d", cnt_static);
			pUIStatic->SetWindowName	(buff);
			pUIStatic->SetAutoDelete	(true);
			pParentWnd->AttachChild		(pUIStatic);

			++cnt_static;
		}else
		if(0==stricmp(node_name,"auto_frameline"))
		{
			CUIFrameLineWnd* pUIFrameline = xr_new<CUIFrameLineWnd>();
			InitFrameLine				(xml_doc, "auto_frameline", cnt_frameline, pUIFrameline);
			xr_sprintf					(buff,"auto_frameline_%d", cnt_frameline);
			pUIFrameline->SetWindowName	(buff);
			pUIFrameline->SetAutoDelete	(true);
			pParentWnd->AttachChild	(pUIFrameline);

			++cnt_frameline;
		}else
		if(0==stricmp(node_name,"auto_text"))
		{
			++cnt_text;
		}
		node						= curr_root->IterateChildren(node);
	}
	xml_doc.SetLocalRoot				(_stored_root);
}

 

 

Или в другом месте копать? А то я тут не соображу, как сюда "внедрить" этот <random="0">..

П.С.: платформа ЗП(CoC_1.5_R6).

 

Изменено пользователем Romann
 

Мать: ASRock X470 Master SLI. Процессор: AMD Ryzen 9 3900X 12-Core(4200 MHz).
Память: Patriot Memory 3200 C16 Series. DDR4-3200(1600МГц), 16Гбх2(32Гб).
Видео: GeForce GTX 1060 6GB. Блок питания: CoolerMaster 750 Вт. Корпус: Zalman i3 Edge.

Химера конечно сильный хищник, а все держится дома. Чего же ты пришел к ней домой и пытаешься её убить? © Болотный Доктор

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

В скрипте m_netpk.script используется система каллбеков для отлеживания появления объекта в онлайне раньше его биндера, для возможности работы с net_abstract пакетами. У меня вопрос, а нельзя ли ловить появление объекта через level.client_spawn_manager():add(sobj.id, 0 ... ?

Ссылка на комментарий
В 17.11.2017 в 06:06, drksnc сказал:

Клиент получает её один раз, просто сталкеров было двое :biggrin:.

С позицией и поворотами разобрался. Теперь косяк с анимацией - на клиенте после вызова PlayCycle, даже с включеным лупом, анимка останавливается на последнем кадре (вроде), причем на сервере с такими же параметрами все замечательно пашет. 

Еще есть animation().update(), но результат его работы оставляет желать лучшего :( 

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

@Graff46 откуда взялось про онлайн? Насколько я помню, вызов коллбека ставится в  STATE_Read.

 

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

@Romann 

Если я не ошибаюсь, в оригинальном ЗП инициализация главного меню происходит в скрипте "ui_main_menu.script". Там можно и реализовать выбор заставки.

S.T.A.L.K.E.R. CoP Objects (upd 11.03.24)

Ссылка на комментарий
3 часа назад, WinCap сказал:

Там можно и реализовать выбор заставки.

Неа, пробовал скриптом, не выходит. Да и движком эстетичней, что ли, будет.

 

Мать: ASRock X470 Master SLI. Процессор: AMD Ryzen 9 3900X 12-Core(4200 MHz).
Память: Patriot Memory 3200 C16 Series. DDR4-3200(1600МГц), 16Гбх2(32Гб).
Видео: GeForce GTX 1060 6GB. Блок питания: CoolerMaster 750 Вт. Корпус: Zalman i3 Edge.

Химера конечно сильный хищник, а все держится дома. Чего же ты пришел к ней домой и пытаешься её убить? © Болотный Доктор

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

@Romann 

Если в движке, тогда нужно править функцию InitStatic в файле xrGame\ui\UIXmlInit.cpp.

А конкретно строчку:

InitTexture(xml_doc, path, index, pWnd);

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

  • Спасибо 1

S.T.A.L.K.E.R. CoP Objects (upd 11.03.24)

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

подскажите а что делает функция iCeil? Я так понимаю она отличается от стандартной ceil функции. Вот её код -
P.S. я в математике не особо силён)
 

ICF int iCeil(float x)
{
    int a = (*(const int*)(&x));
    int exponent = (127 + 31) - ((a >> 23) & 0xFF);
    int r = (((u32)(a) << 8) | (1U << 31)) >> exponent;
    exponent += 31 - 127;
    {
        int imask = (!(((((1 << (exponent))) - 1) >> 8)&a));
        exponent -= (31 - 127) + 32;
        exponent >>= 31;
        a = ~((a - 1) >> 31); /* change sign */
        r -= (imask&a);
        r &= exponent;
        r ^= a;
        r = -r; /* change sign */
    }
    return r; /* r = (int)(ceil(f)) */
}

 

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

Я в теме "С++" задавал вопрос по табуляции при форматировании текста, подсказали насчет \t, мол должно работать. Попробовал использовать это в отображении защиты броников в инвентаре(ф-ция CUIOutfitInfo::SetItem) - толку ноль. Может я чего не так делал:

_sz += sprintf_s(_buff+_sz,sizeof(_buff)-_sz,"%s \t%+3.0f%%", (_val_outfit>0.0f)?"%c[green]":"%c[red]", _val_outfit*100.0f);

Подскажите...

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

@AndreySol

Табуляция не работает на HUD'е игры.

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

Если хочется добиться идеальной таблицы нужно использовать отдельные статики для каждого столбца.

S.T.A.L.K.E.R. CoP Objects (upd 11.03.24)

Ссылка на комментарий
28 минут назад, WinCap сказал:

Табуляция не работает на HUD'е игры.

Наверное, все же не на HUD'е, а в UI-классах не реализована ? Может кто делал реализацию ?

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

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

Ссылка на комментарий
В 29.11.2017 в 01:10, AndreySol сказал:

Может кто делал реализацию ?

да, делал. Нормальное выравнивание можно получить только при использовании CUIListItem. альтернативный вариант - использовать в тексте &#160;  -это пробел, но за счет разной ширины символов все равно не получить ровных стоблцов.

В 02.12.2017 в 18:00, AndreySol сказал:

отступ текстового описания

если речь идет о классе CUIItemInfo - то там все параметры отсnупов и иже с ними загружаются с xml конфигов.

В 29.11.2017 в 00:41, WinCap сказал:

отдельные статики для каждого столбца

можно переопределить CUIListItem , и уже в нем делать специальные колонки, например, для иконок.

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

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

Ссылка на комментарий
4 часа назад, Winsor сказал:

альтернативный вариант - использовать в тексте &#160;  -это пробел, но за счет разной ширины символов все равно не получить ровных стоблцов.

А как насчет моноширинных шрифтов ? Есть реализации для Сталкера ?

Цитата

да, делал.

А что именно - восстановление табуляции или переход на CUIListItem ?

Изменено пользователем AndreySol
Ссылка на комментарий
16 часов назад, AndreySol сказал:

переход на CUIListItem

вот это.

 

16 часов назад, AndreySol сказал:

моноширинных шрифтов

если дружите с графическими пакетами - можете нарисовать свой шрифт. моноширинного в ТЧ я не видел.

Ссылка на комментарий
20 часов назад, Winsor сказал:

Как то же НПС бьются прикладом, и без этой анимации в худе?

НПСы используют мировую модель оружия, а не худовою + каждый НПС использует библиотеку анимаций stalker_animation.omf, там и есть эта анимация удара (norm_facer_ ) для разных типов оружия(без оружия, пистолеты, дробовики, автоматы, тяжелое).

Конечно такой себе вариант, но можешь попробовать сделать универсальную анимацию удара по типу раскачки оружия из ЛА. 

 

Изменено пользователем TIGER_VLAD
  • Согласен 1
Ссылка на комментарий
41 минуту назад, TIGER_VLAD сказал:

Конечно такой себе вариант, но можешь попробовать сделать универсальную анимацию удара по типу раскачки оружия из ЛА. 

Поскольку Winsor является на текущий момент главным разработчиком мода ОП-2.1 (после ухода Proper70) и учитывая что в этом моде полтыщщи разных стволов, то выглядеть подобная "универсальная" анимка будет отвратно если повесить её на всё.

Плюс. удар прикладом надо ещё настраивать вроде в схеме АИ, если не ошибаюсь.

 

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

Это не совет, нет, просто в качестве пожелания. Зачем тебе , спецу по движку, забивать в данный момент голову подобным барахлом, есть наверно и поважнее дела.

Изменено пользователем BFG
  • Согласен 3
  • Не согласен 1
  • Полезно 1

"Кругом зомби.....у меня кончаются патроны...."

Ссылка на комментарий
Скрытый текст
1 час назад, BFG сказал:

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

никто не обещал... О_О :dash2: Вот НИ тестерам с нового года обещали - это да, слишком много изменений накопилось для этого.

Это не пожелалки тестеров - удар прикладом как самый простой вариант. Меня интересует сама возможность создания анимации, не привязанной к модели.

Ссылка на комментарий
10 минут назад, Winsor сказал:

Меня интересует сама возможность создания анимации, не привязанной к модели.

Я думаю стоит спросить у Шокера, у них там была анимка поднятия ствола(сомневаюсь, что делали анимку каждому стволу), при приближении к препятствию, но правда там на ЗП, т.е. раздельные руки, но возможно можно как-то использовать.

 

Мать: ASRock X470 Master SLI. Процессор: AMD Ryzen 9 3900X 12-Core(4200 MHz).
Память: Patriot Memory 3200 C16 Series. DDR4-3200(1600МГц), 16Гбх2(32Гб).
Видео: GeForce GTX 1060 6GB. Блок питания: CoolerMaster 750 Вт. Корпус: Zalman i3 Edge.

Химера конечно сильный хищник, а все держится дома. Чего же ты пришел к ней домой и пытаешься её убить? © Болотный Доктор

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

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

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