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

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


Rolan

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

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

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


Ссылка на сообщение

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

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


Ссылка на сообщение
(изменено)

Движок ЗП 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.
спойлер

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


Ссылка на сообщение

Где можно найти рабочие исходники SDK 0.7? Те что идут с исходниками движка скомпилил, но сдк не запустился. Да и размер LevelEditor.exe у меня получился 2.1 мб, а в сдк этот файл 2.4 весит. Т.е. скорее всего исходники не полные.

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


Ссылка на сообщение
18 часов назад, AndreySol сказал:

 

А исходники движка вы откуда взяли? Так, вот к ним и прилагается, обычно, все что необходимо для сборки.

Качал еще очень давно, архив называется X-Ray_Engine_source_code С самими исходниками движка проблем нет. Интересуют исходники СДК, собрать то их получается, но сам СДК с новыми LevelEditor.exe, ActorEditor.exe не загружается вообще. И ошибок никаких не выдает.

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


Ссылка на сообщение

День добрый, есть объект CCar, к нему приаттачиваю объект из инвентаря ГГ, т.е. для предмета указываю родителем (H_SetParent) текущий объект. Проблема в том что после сейв-лоада попытка найти объект с таким айди как у приаттаченого предмета возвращает null Как это исправить?

void CCar::OnEvent(NET_Packet& P, u16 type)
{
	inherited::OnEvent		(P,type);
	CExplosive::OnEvent		(P,type);

	//обработка сообщений, нужных для работы с багажником машины
	u16 id;
	switch (type)
	{
		case GE_OWNERSHIP_TAKE:
		{
			P.r_u16(id);
			CObject* itm = Level().Objects.net_Find(id);
			m_trunk_items.push_back(id);
			itm->H_SetParent(this);
			itm->setVisible(FALSE);
			itm->setEnabled(FALSE);
		}break;
	}

}

 

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


Ссылка на сообщение

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

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


Ссылка на сообщение

День добрый, пытаюсь собрать СДК, при компиляции проекта LevelEditor вылазит ошибка
[C++ Error] ddraw.h(146): E2141 Declaration syntax error
  Full parser context
    LevelEditor.cpp(1): #include L:\cop\project\engine.vc2008\editors\LevelEditor\stdafx.h
    stdafx.h(98): #include c:\program files (x86)\borland\cbuilder6\include\dsound.h
    dsound.h(14): #include l:\cop\project\sdk\DXSDK\Include\d3dtypes.h
    d3dtypes.h(36): #include l:\cop\project\sdk\DXSDK\Include\ddraw.h

 

Ругается на строку
extern _Check_return_ HRESULT WINAPI DirectDrawEnumerateW( LPDDENUMCALLBACKW lpCallback, LPVOID lpContext );
Кто нибудь знает как это можно исправить?

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


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

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

AMK-Team.ru

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