Перейти к контенту
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 10.04.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 10.04.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 10.04.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

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