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

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


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

18 минут назад, dsh сказал:

Видимо потому, что

Видимо да)

Давно у меня вертелась на уме одна мысль. Озвучу пожалуй:

К 2020 году уже для любой мыслимой фичи в модах на "Сталкер", на вопрос "почему ее еще не сделали?" Правильным ответом будет - потому что никому из тех, кто мог это сделать, оно было не нужно.

Для любой и какой угодно, кем бы то ни было выдуманной. Просто пережеваны уже все идеи давно.

Мне, надо было убедиться. В справедливости этой мысли. Спасибо :) И, пошел я делать свой мод дальше.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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.

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

@Zander_driver, они в сингле особо и не нужны, разве что если нужно что-то записать в них при спавне, с остальным отлично справляется save/load в клиенте.

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

День добрый! Может не совсем в ту тему пишу: пытаюсь собрать исходники СДК 0.7 в борланде, при компиляции такая ошибка выскакивает:
78bb1713f09f2e02b736bea04cbc650e4d6ff436
Может кто знает в чем причина?

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

Подскажите пожалуйста, можно ли сразу переводить движок на vs2019 или для начала нужно мигрировать в vs2010 а потом на vs2019? Если использовать оригиналы исходников а не репос.

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

Всем привет.
Кто-нибудь может помочь с одним движковым вылетом?
Я в С++ достаточно недавно, через отладчик пытался найти суть проблемы, но ничего не понял.
Буду очень благодарен.

Лог:

stack trace:

001B:55CCDF69 xrGame.dll, CDialogHolder::IgnorePause()

Отладчик ругается на строку inherited::shedule_Update (dt); в файле Entity.cpp (xrGame)
 

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

Добрый день, есть метательный нож на классе болта. Все отлично работает, но есть нюанс: если метнуть нож в НПС который в данный момент выполняет работу на смарт кавере - хит нпс не наносится - hit_callback вообще не срабатывает. Для дефолтных работ на смарт каверах (типа stay_table, stay_wall - без указания Available_animations в логике) хит не срабатывает всегда, если указать другую анимку, то с некоторым хит срабатывает (например с ward), с некоторыми (jup_b41_novikov_stand) нет. Подскажите, как можно исправить эту проблему, из-за чего может не срабатывать хит каллбек?

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

Из-за чего может не срабатывать хит-каллбек в неизвестно каком движке, в коде которого делали неизвестно какие изменения.

:crazy2: Даже не знаю. Возможно, неправильно настроена погода на Марсе.

  • Смешно 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.

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

Движок ЗП 1.6.02 Объект на классе болта, вот сам класс
 

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



CBolt::CBolt(void)
{
}

CBolt::~CBolt(void)
{
}

void CBolt::Load(LPCSTR section)
{
	inherited::Load(section);
}

BOOL CBolt::net_Spawn(CSE_Abstract* DC)
{
	BOOL ret = CHudItemObject::net_Spawn(DC);
	m_thrown = false;
	return ret;
}

void CBolt::net_Destroy()
{
	CHudItemObject::net_Destroy();
}

void CBolt::OnH_B_Independent(bool just_before_destroy)
{
	CHudItemObject::OnH_B_Independent(just_before_destroy);
}

void CBolt::OnH_A_Independent()
{
	inherited::OnH_A_Independent();
}

void CBolt::OnH_A_Chield()
{
	inherited::OnH_A_Chield();
	CObject* o= H_Parent()->H_Parent();
	if (o)
		SetInitiator(o->ID());
}

void CBolt::State(u32 state)
{
	switch (state)
	{
	case eThrowStart:
	{
		Fvector						C;
		Center(C);
	}break;
	case eThrowEnd:
	{
		if (m_thrown)
		{
			if (m_pPhysicsShell)
				m_pPhysicsShell->Deactivate();
			xr_delete(m_pPhysicsShell);
			PutNextToSlot();
			if (Local())
			{
				DestroyObject();
			}

		};
	}break;
	};
	inherited::State(state);
}

bool CBolt::DropBolt()
{
	EMissileStates bolt_state = static_cast<EMissileStates>(GetState());
	if (((bolt_state == eThrowStart) ||
		(bolt_state == eReady) ||
		(bolt_state == eThrow)) &&
		(!m_thrown)
		)
	{
		Throw();
		return true;
	}
	return false;
}

void CBolt::DiscardState()
{
	if (GetState() == eReady || GetState() == eThrow)
		OnStateSwitch(eIdle);
}

void CBolt::SendHiddenItem()
{
	if (GetState() == eThrow)
	{
		Throw();
	}
	CActor* pActor = smart_cast<CActor*>(m_pInventory->GetOwner());
	if (pActor && (GetState() == eReady || GetState() == eThrow))
	{
		return;
	}

	inherited::SendHiddenItem();
}

void CBolt::Throw()
{
	if (m_thrown)
		return;

	if (!m_fake_missile)
		return;

	inherited::Throw();
	m_fake_missile->processing_activate();
	m_thrown = true;
}


void CBolt::Destroy()
{
	
}

bool CBolt::Useful() const
{
	return (TestServerFlag(CSE_ALifeObject::flCanSave));
}

void CBolt::OnEvent(NET_Packet& P, u16 type)
{
	inherited::OnEvent(P, type);
}

void CBolt::PutNextToSlot()
{
	if (OnClient()) return;

	VERIFY(!getDestroy());
	NET_Packet						P;
	if (m_pInventory)
	{
		m_pInventory->Ruck(this);

		this->u_EventGen(P, GEG_PLAYER_ITEM2RUCK, this->H_Parent()->ID());
		P.w_u16(this->ID());
		this->u_EventSend(P);
	}
	else
		Msg("! PutNextToSlot : m_pInventory = NULL [%d][%d]", ID(), Device.dwFrame);

	if (smart_cast<CInventoryOwner*>(H_Parent()) && m_pInventory)
	{
		CBolt *pNext = smart_cast<CBolt*>(m_pInventory->Same(this, true));

		VERIFY(pNext != this);

		if (pNext && m_pInventory->Slot(pNext->BaseSlot(), pNext))
		{
			pNext->u_EventGen(P, GEG_PLAYER_ITEM2SLOT, pNext->H_Parent()->ID());
			P.w_u16(pNext->ID());
			P.w_u16(pNext->BaseSlot());
			pNext->u_EventSend(P);
			m_pInventory->SetActiveSlot(pNext->BaseSlot());
		}
		else
		{
			CActor* pActor = smart_cast<CActor*>(m_pInventory->GetOwner());

			if (pActor)
				pActor->OnPrevWeaponSlot();
		}

		m_thrown = false;
	}
}

void CBolt::OnAnimationEnd(u32 state)
{
	switch (state)
	{
		case eHiding:
		{
			setVisible(FALSE);
			SwitchState(eHidden);
		} break;
		case eShowing:
		{
			setVisible(TRUE);
			SwitchState(eIdle);
		} break;
		case eThrowStart:
		{
			if (!m_fake_missile && !smart_cast<CMissile*>(H_Parent()))
			{
				Level().spawn_item(*cNameSect(),Position(), (g_dedicated_server) ? u32(-1) : ai_location().level_vertex_id(), ID(), false);
			}
			if (m_throw)
				SwitchState(eThrow);
			else
				SwitchState(eReady);
		} break;
		case eThrow:
		{
			SwitchState(eThrowEnd);
		} break;
		case eThrowEnd:
		{
			SwitchState(eHidden);
		} break;
		default:
			inherited::OnAnimationEnd(state);
	}
}


void CBolt::UpdateCL()
{
	inherited::UpdateCL();
}


bool CBolt::Action(u16 cmd, u32 flags)
{
	if (inherited::Action(cmd, flags)) return true;

	switch (cmd)
	{
		//переключение типа болтов
	case kWPN_NEXT:
	{
		if (flags&CMD_START)
		{
			if (m_pInventory)
			{
				TIItemContainer::iterator it = m_pInventory->m_ruck.begin();
				TIItemContainer::iterator it_e = m_pInventory->m_ruck.end();
				for (; it != it_e; ++it)
				{
					CBolt *pBolt = smart_cast<CBolt*>(*it);
					if (pBolt && xr_strcmp(pBolt->cNameSect(), cNameSect()))
					{
						m_pInventory->Ruck(this);
						m_pInventory->SetActiveSlot(NO_ACTIVE_SLOT);
						m_pInventory->Slot(pBolt->BaseSlot(), pBolt);
						return						true;
					}
				}
				return true;
			}
		}
		return true;
	};
	}
	return false;
}

BOOL CBolt::UsedAI_Locations()
{
	return inherited::UsedAI_Locations();
}

void CBolt::net_Relcase(CObject* O)
{
	inherited::net_Relcase(O);
}

void CBolt::DeactivateItem()
{
	//Drop bolt if primed
	StopCurrentAnimWithoutCallback();
	if (!GetTmpPreDestroy() && Local() && (GetState() == eThrowStart || GetState() == eReady || GetState() == eThrow))
	{
		if (m_fake_missile)
		{
			CBolt*		pBolt = smart_cast<CBolt*>(m_fake_missile);
			if (pBolt)
			{
				if (m_pInventory->GetOwner())
				{
					CActor* pActor = smart_cast<CActor*>(m_pInventory->GetOwner());
					if (pActor)
					{
						if (!pActor->g_Alive())
						{
							m_constpower = false;
							m_fThrowForce = 0;
						}
					}
				}
				Throw();
			};
		};
	};

	inherited::DeactivateItem();
}

bool CBolt::GetBriefInfo(II_BriefInfo& info)
{
	VERIFY(m_pInventory);
	info.clear();

	info.name._set(m_nameShort);
	info.icon._set(cNameSect());

	u32 ThisBoltCount = m_pInventory->dwfGetSameItemCount(cNameSect().c_str(), true);

	string16 stmp;
	xr_sprintf(stmp, "%d", ThisBoltCount);
	info.cur_ammo._set(stmp);
	return true;
}

void CBolt::SetInitiator(u16 id)
{
	m_thrower_id = id;
}

u16	CBolt::Initiator()
{
	return m_thrower_id;
}

void CBolt::activate_physic_shell()
{
	inherited::activate_physic_shell	();
	m_pPhysicsShell->SetAirResistance	(.0001f);
}

using namespace luabind;

#pragma optimize("s",on)
void CBolt::script_register(lua_State *L)
{
	module(L)
		[
			class_<CBolt, CGameObject>("CBolt")
			.def(constructor<>())
		];
}


 

 

Изменено пользователем W.A.S.P.
спойлер
Добавлено  Опричник,

Правила форума, п. 2.9 (большой текст без спойлера).

Предупреждение.

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

Привет объясните пожалуйста как мне исправить этот ужас при движении вправо(лево), оружие дергается.

Я даже не знаю где и чем это вызвано,помогите исправить.

 

https://youtu.be/jWg9GZlQf_k

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

@yurikteam, Это фишка игры ещё с оригинала - инерция оружия при стрейфах. По идее, всё должно быть плавно, это у тебя частота 5 кадра в неделю, вот и похоже на дёрганье.

  • Согласен 1
  • Не согласен 2

Работы на Artstationhttps://www.artstation.com/artist/stalker_lom

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

@yurikteam, Это фишка игры ещё с оригинала - инерция оружия при стрейфах. По идее, всё должно быть плавно, это у тебя частота 5 кадра в неделю, вот и похоже на дёрганье.

У моего друга игровой ПК, и если без записи у меня 50-70 ФПС, и ничего не меняется, мне помогали перенести исходник с 2008 в 2015 студию, и после этого появилось это.

7 часов назад, Сталкер Лом сказал:

@yurikteam, Это фишка игры ещё с оригинала - инерция оружия при стрейфах. По идее, всё должно быть плавно, это у тебя частота 5 кадра в неделю, вот и похоже на дёрганье.

И в МП такого нет, мне нужно узнать где это описывается, хочу попробовать сравнить, просто я знаю что мне человек который помогал что то испортил, и тут это вылезло.

Добавлено  Опричник,

Изучите "Правила цитирования". https://www.amk-team.ru/forum/topic/13514-obyavleniya/

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

Приветствую. Каким Visual Studio лучше всего пользоваться?

Ну, да поможет Вам F1, да сохранит Вас F2, во имя Control`а, Alt`а и святого Delet`а. Enter.

Ссылка на комментарий
В 20.01.2020 в 17:33, AndreySol сказал:

@XinnogeN XinnogeN

Сразу портируй на 2019, все эти промежутки ни к чему, объем переделок все равно будет +\- тот же.

Спасибо, так и делаю.

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

Всем привет. Есть тут знающие люди, как sound environment в ЗП восстановить?
Где только не лазал, везде какие-то мелкие правки не дающие никакого результата.

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

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

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

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

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

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

Войти

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

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

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