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

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


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

Как убрать вылет при отсутствии звука в тч?

Добавлено  HellRatz,

Это что: вопрос или заголовок к уроку? Знаки препинания и заглавные не забываем.

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

Добрый день, кто то пытался решить проблему в ЗП с проваливаем авто под террейн после перехода на другую локацию? В каком направлении копать чтобы это исправить?

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

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

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

#pragma once

#define CMD_START	(1<<0)
#define CMD_STOP	(1<<1)
 //edited by ARTLantist
enum{
	NO_ACTIVE_SLOT	= 0,
	KNIFE_SLOT		= 1,//btn1
	INV_SLOT_2,			//btn2
	INV_SLOT_3,			//btn3
	GRENADE_SLOT,		//btn4
	BINOCULAR_SLOT,		//btn5
	BOLT_SLOT,			//btn6 
	OUTFIT_SLOT,
	PDA_SLOT,
	DETECTOR_SLOT,
	TORCH_SLOT,
	ARTEFACT_SLOT,
	HELMET_SLOT,
	AMMO_SLOT, //начиная с этой переменной идут новые слоты
	MEDCINE_SLOT,
	GRENADEW_SLOT,
	DOSIMETER_SLOT, //до этой
	LAST_SLOT		= DOSIMETER_SLOT
};

#define RUCK_HEIGHT			280
#define RUCK_WIDTH			7

class CInventoryItem;
class CInventory;

typedef CInventoryItem*				PIItem;
typedef xr_vector<PIItem>			TIItemContainer;


enum eItemPlace
{			
	eItemPlaceUndefined = 0,
	eItemPlaceSlot,
	eItemPlaceBelt,
	eItemPlaceRuck
};

struct SInvItemPlace
{
	union{
		struct{
			u16 type				: 4;
			u16 slot_id				: 6;
			u16 base_slot_id		: 6;
		};
		u16	value;
	};
};

 

И чтобы я не написал, никаких изменений не воспринимается, как будто я ничего нового не вношу. LAST_SLOT всё так же равен 12, как и до этого (значению HELMET_SLOT), а мои новые переменные вообще не имеют никакого значения - их будто вообще нет.

Ради интереса решил поизменять положения стандартных переменных, но в итоге их значения не изменялись: даже если поставить HELMET_SLOT на первое место, он всё равно будет равен 12, а не 0... Как данный момент можно исправить?

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

@ARTLantist ну ты же уже заглядывал в движок CoC - вот посмотри, как сделано там, в CoC много слотов сделано, даже на запас(кастомные), чтоб потом в движок не лазать, и все работают.

Pnkoa7tc_t.png

 

Мать: 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, так ведь в том-то и дело, что я уже и в СоС поглядел, и в ОГСР, у меня точно также всё прописано, но почему-то ничего не работает. Файл будто тупо не реагирует

Ссылка на комментарий
46 минут назад, ARTLantist сказал(а):

но почему-то ничего не работает. Файл будто тупо не реагирует

Странно, не должно быть так, проверил и у себя, и на чистом движке ЗП, всё нормально работает, добавил слот, было 12 - стало 13:

5QSNd2re_t.png
Со студией у тебя всё впорядке?

 

Мать: 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 вот я тоже задумался на счёт того, всё ли в порядке со студией... Но прикол в том, что только в этом файле такая фигня. Во всех осатльных всё нормально работает, всё время изменял (и вчера для проверки тоже попробовал некоторые поизменять), и всё отлично. А этот файл прям вообще ни в какую. Попробую переустановить

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

Приветствую!

Подскажите, реализовывал ли кто у себя группировку предметов на худовой панели артефактов (group_similar) ?

Сам крайне не силён во всей это XML-магии. Буду признателен за ссылку на репозиторий с целью самообразовательно подсмотреть решение.

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

Каким образом можно сделать своего рода итератор для слотов, чтобы можно было перебирать все предметы в нём по очереди? У меня в слот можно помещать несколько предметов (как пояс), из этого вытекает необходимость проверки "размеров" всех предметов (т.к. они все могут занимать от 1 до 2 ячеек сетки в моём случае), которые уже есть в слоте, и которые я в него помещаю, дабы не было вылета из-за недостаточного размера ДрагДроп сетки. 

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

Может быть, кто-то не видел. Относительно свежий слив.

 

Исходники за 2005 год: https://gitlab.com/Loxotron/stk_2005

СДК за 2005 год: https://drive.google.com/file/d/1KqtYzdO9GItdYA_r4nyZNi84r9K3C3h1/view

 

Репозиторий исходного кода X-Ray Engine от 2000 до 2007 года (где-то до 3-4 патча): https://drive.google.com/file/d/1YkGd9mIUuwH8OMXQI-6Cm2WEjHC84u4v/view + конверт в гит: https://github.com/ugozapad/gitxray (что-то могло потеряться. Конвертировал Кирилл Юркин)

 

За сливы благодарим Лохотрона и Vector Qt.

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

@Шипэтя 

Движковая правка вылета, по отсутствию звукового файла, уже давно есть в теме "Уроки по модостроению".

 

@ARTLantist 

А что мешает посмотреть реализацию ф-ции-итератора в том же рюкзаке?

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

В "наследниках" репозитория 1.0007 Rc1 @alpetи @KD87 (XP-DEV) не работает контекстное меню по правой кнопке мыши в окнах обыска ящиков/трупов (не ручаюсь за оригинальные исходники).

Сей вопрос кратко упоминался в теме "Мелкие правки движка", но итоговое решение для XP-DEV озвучено не было.

 

Буду признателен за подсказку: что является причиной и как исправлять такое поведение.

Ссылка на комментарий
19 часов назад, AndreySol сказал(а):

А что мешает посмотреть реализацию ф-ции-итератора в том же рюкзаке?

Посмотреть - ничего не мешает, но там используется TIItemContainer m_ruck, а слоты - далеко не TIItemContainer... Вот я и встал в тупик.

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

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

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

1>x:\sdk\include\boost/type_traits/is_polymorphic.hpp(34) : error C2504: 'CScriptGameObject' : base class undefined
1>        x:\sdk\include\boost/type_traits/is_polymorphic.hpp(44) : see reference to class template instantiation 'boost::detail::is_polymorphic_imp1<T>::d2' being compiled
1>        with
1>        [
1>            T=CScriptGameObject
1>        ]
1>        x:\sdk\include\boost/type_traits/is_polymorphic.hpp(79) : see reference to class template instantiation 'boost::detail::is_polymorphic_imp1<T>' being compiled
1>        with
1>        [
1>            T=CScriptGameObject
1>        ]
1>        x:\sdk\include\boost/type_traits/is_polymorphic.hpp(84) : see reference to class template instantiation 'boost::detail::is_polymorphic_imp<T>' being compiled
1>        with
1>        [
1>            T=CScriptGameObject
1>        ]
1>        x:\sdk\include\boost/mpl/if.hpp(64) : see reference to class template instantiation 'boost::is_polymorphic<T>' being compiled
1>        with
1>        [
1>            T=CScriptGameObject
1>        ]
1>        x:\sdk\include\luabind/back_reference.hpp(177) : see reference to class template instantiation 'boost::mpl::if_<C,T1,T2>' being compiled
1>        with
1>        [
1>            C=boost::is_polymorphic<CScriptGameObject>,
1>            T1=luabind::detail::back_reference_impl<CScriptGameObject>,
1>            T2=luabind::detail::back_reference_do_nothing<CScriptGameObject>
1>        ]
1>        x:\sdk\include\luabind/detail/policy.hpp(670) : see reference to class template instantiation 'luabind::back_reference<T>' being compiled
1>        with
1>        [
1>            T=CScriptGameObject
1>        ]
1>        x:\sdk\include\luabind/detail/convert_to_lua.hpp(65) : see reference to function template instantiation 'void luabind::detail::pointer_converter<luabind::detail::cpp_to_lua>::apply<CScriptGameObject>(lua_State *,T *)' being compiled
1>        with
1>        [
1>            T=CScriptGameObject
1>        ]
1>        x:\sdk\include\luabind/object.hpp(72) : see reference to function template instantiation 'void luabind::detail::convert_to_lua<CScriptGameObject*>(lua_State *,const T &)' being compiled
1>        with
1>        [
1>            T=CScriptGameObject *
1>        ]
1>        x:\sdk\include\luabind/functor.hpp(283) : see reference to function template instantiation 'void luabind::detail::push_args_from_tuple<Index>::apply<T0,boost::tuples::cons<HT,TT>>(lua_State *,const boost::tuples::cons<HT,boost::tuples::cons<HT,TT>> &)' being compiled
1>        with
1>        [
1>            Index=1,
1>            T0=CScriptGameObject *const *,
1>            HT=CScriptGameObject *const *,
1>            TT=boost::tuples::detail::map_tuple_to_cons<boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>::type
1>        ]
1>        x:\sdk\include\luabind/functor.hpp(258) : while compiling class template member function 'luabind::detail::proxy_functor_void_caller<Tuple>::~proxy_functor_void_caller(void)'
1>        with
1>        [
1>            Tuple=boost::tuples::tuple<CScriptGameObject *const *,CScriptGameObject *const *,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>
1>        ]
1>        .\ui\UIActorMenu_action.cpp(107) : see reference to class template instantiation 'luabind::detail::proxy_functor_void_caller<Tuple>' being compiled
1>        with
1>        [
1>            Tuple=boost::tuples::tuple<CScriptGameObject *const *,CScriptGameObject *const *,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>
1>        ]
1>x:\sdk\include\boost/type_traits/is_polymorphic.hpp(26) : error C2504: 'CScriptGameObject' : base class undefined
1>        x:\sdk\include\boost/type_traits/is_polymorphic.hpp(44) : see reference to class template instantiation 'boost::detail::is_polymorphic_imp1<T>::d1' being compiled
1>        with
1>        [
1>            T=CScriptGameObject
1>        ]

 

 

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

ТЧ 1.0007rc1 (xp-dev 190 rev)

Задача: обрабатывать нажатие кнопок, отвечающих за разделы ПДА, если в слоте ПДА предмет с CLS_ID == CLSID_DEVICE_PDA

Реализация: 

 

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

bool CUIGameSP::IR_OnKeyboardPress(int dik) 
{
	if(inherited::IR_OnKeyboardPress(dik)) return true;

	if( Device.Paused()		) return false;

	CInventoryItem *PDA = smart_cast<CInventoryItem*>(pActor->inventory().ItemFromSlot(PDA_SLOT)); //<-Предмет в слоте ПДА
	
	if(!pActor)								return false;
	if( pActor && !pActor->g_Alive() )		return false;

	switch ( get_binded_action(dik) )
	{
...
   if (PDA->object().CLS_ID == CLSID_DEVICE_PDA) //<-проверяем есть ли PDA в слоте
   {
	case kACTIVE_JOBS:
		if (!MainInputReceiver() || MainInputReceiver() == PdaMenu){
			PdaMenu->SetActiveSubdialog(eptQuests);
			m_game->StartStopMenu(PdaMenu, true);
			return true;
		}break;

	case kMAP:
		if (!MainInputReceiver() || MainInputReceiver() == PdaMenu){
			PdaMenu->SetActiveSubdialog(eptMap);
			m_game->StartStopMenu(PdaMenu, true);
			return true;
		}break;

	case kCONTACTS:
		if (!MainInputReceiver() || MainInputReceiver() == PdaMenu){
			PdaMenu->SetActiveSubdialog(eptContacts);
			m_game->StartStopMenu(PdaMenu, true);
			return true;
		}break;

	case kSCORES:
	{
		SDrawStaticStruct* ss = AddCustomStatic("main_task", true);
		SGameTaskObjective* o = pActor->GameTaskManager().ActiveObjective();
		if (!o)
			ss->m_static->SetTextST("st_no_active_task");
		else
			ss->m_static->SetTextST(*(o->description));
	}
	break;
   }
	}
	return false;
}

 

Проблема: разделы ПДА открываются даже если в слоте ПДА находится предмет на соврешенно ином классе - аптечка, фонарь, etc. Если в слоте ПДА вообще нет предмета - кнопки не срабатывают, как и ожидается.

 

Собственно вопрос - что я делаю не так?

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

@xer-urgне гарантирую, что сработает, но могу предложить:
 

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

Скорее всего, проверка срабатывает на сам класс CInventoryItem, а конфиг читать отказывается.
Самое простое, заменить:


CInventoryItem *PDA = smart_cast<CInventoryItem*>(pActor->inventory().ItemFromSlot(PDA_SLOT));

на:


CPda *PDA = smart_cast<CPda*>(pActor->inventory().ItemFromSlot(PDA_SLOT));

А эту строчку:


if (PDA->object().CLS_ID == CLSID_DEVICE_PDA)

На эту:


if (PDA)

 

 

  • Спасибо 1

jpwsa5byp73nyaufrbis15dcci1y.png
 

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

@DoberBull, спасибо за предложение - с "CPda *PDA =... " так и сделал.

Также было неправильно обрамлять в проверку несколько case - добавил условие "PDA" в каждый case и всё заработало.

 

В итоговой реализации как-то так:

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

CPda* PDA = smart_cast<CPda*>(pActor->inventory().ItemFromSlot(PDA_SLOT));
...

      case kACTIVE_JOBS:

        if ((!MainInputReceiver() || MainInputReceiver() == PdaMenu) && PDA)
        {
          ...
        }

 

 

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

Народ, может хоть вы поможете, есть у кого - нибудь файлы(скомп. движок) для чистого ЗП, с редактированным hud_viewport(значения изменены от 0,2f до 0,05f),10 раз пытаюсь скомпилировать движок, и всё с ошибками, помогите, если можете

Или хотя бы как правильно настроить hud_viewport(какие значения поставить), чтобы приклад при больших hud_fov не просвечивался

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

Обнаружил весьма неприятную вещь в ЗП:

Если убрать фонарик из слота, а потом положить его обратно в слот - он не включается. После перезагрузки всё возвращается на свои места - он опять работает. Как это можно пофиксить? Чёт никак не могу найти чего-то, что может быть связано с этим, в Torch.cpp

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

Кто знает, как быстро создать CGameObject без создания серверной части? Мне надо для звезд люсткугеля, или проджектайлов (projectile).

...в конце концов, важен лишь, машинный код.

СТАЛКЕР только для ПК!

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

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

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

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

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

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

Войти

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

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

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