⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exittrigger.cpp

📁 Blood 2全套源码
💻 CPP
字号:
// ----------------------------------------------------------------------- //
//
// MODULE  : ExitTrigger.cpp
//
// PURPOSE : ExitTrigger - Implementation
//
// CREATED : 3/24/98
//
// ----------------------------------------------------------------------- //

#include "ExitTrigger.h"
#include "cpp_server_de.h"
#include "SharedDefs.h"
#include "BloodServerShell.h"
#include "PlayerObj.h"
#include "ObjectUtilities.h"
#include "ClientServerShared.h"


BEGIN_CLASS(ExitTrigger)
	ADD_STRINGPROP(NextWorld, "")
	ADD_STRINGPROP(StartPointName, "start")
	ADD_BOOLPROP(EndEpisode, DFALSE)
	ADD_BOOLPROP(SubWorld, DFALSE)
	ADD_REALPROP_FLAG(ResetTime, 0.0f, PF_HIDDEN)
	ADD_STRINGPROP_FLAG(TargetName1, "", PF_HIDDEN)
	ADD_STRINGPROP_FLAG(MessageName1, "", PF_HIDDEN)
	ADD_REALPROP_FLAG(MessageDelay, 0.0f, PF_HIDDEN)
	ADD_STRINGPROP_FLAG(TargetName2, "", PF_HIDDEN)
	ADD_STRINGPROP_FLAG(MessageName2, "", PF_HIDDEN)
	ADD_REALPROP_FLAG(MessageDelay2, 0.0f, PF_HIDDEN)
	ADD_STRINGPROP_FLAG(TargetName3, "", PF_HIDDEN)
	ADD_STRINGPROP_FLAG(MessageName3, "", PF_HIDDEN)
	ADD_REALPROP_FLAG(MessageDelay3, 0.0f, PF_HIDDEN)
	ADD_STRINGPROP_FLAG(TargetName4, "", PF_HIDDEN)
	ADD_STRINGPROP_FLAG(MessageName4, "", PF_HIDDEN)
	ADD_REALPROP_FLAG(MessageDelay4, 0.0f, PF_HIDDEN)
	ADD_STRINGPROP_FLAG(TargetName5, "", PF_HIDDEN)
	ADD_STRINGPROP_FLAG(MessageName5, "", PF_HIDDEN)
	ADD_REALPROP_FLAG(MessageDelay5, 0.0f, PF_HIDDEN)
	ADD_STRINGPROP_FLAG(TargetName6, "", PF_HIDDEN)
	ADD_STRINGPROP_FLAG(MessageName6, "", PF_HIDDEN)
	ADD_REALPROP_FLAG(MessageDelay6, 0.0f, PF_HIDDEN)
	ADD_STRINGPROP_FLAG(TargetName7, "", PF_HIDDEN)
	ADD_STRINGPROP_FLAG(MessageName7, "", PF_HIDDEN)
	ADD_REALPROP_FLAG(MessageDelay7, 0.0f, PF_HIDDEN)
	ADD_STRINGPROP_FLAG(TargetName8, "", PF_HIDDEN)
	ADD_STRINGPROP_FLAG(MessageName8, "", PF_HIDDEN)
	ADD_REALPROP_FLAG(MessageDelay8, 0.0f, PF_HIDDEN)
	ADD_STRINGPROP_FLAG(TargetName9, "", PF_HIDDEN)
	ADD_STRINGPROP_FLAG(MessageName9, "", PF_HIDDEN)
	ADD_REALPROP_FLAG(MessageDelay9, 0.0f, PF_HIDDEN)
	ADD_STRINGPROP_FLAG(TargetName10, "", PF_HIDDEN)
	ADD_STRINGPROP_FLAG(MessageName10, "", PF_HIDDEN)
	ADD_REALPROP_FLAG(MessageDelay10, 0.0f, PF_HIDDEN)
	ADD_BOOLPROP(TouchActivate, DFALSE)
	ADD_BOOLPROP(PlayerActivate, DTRUE)
	ADD_BOOLPROP(AIActivate, DFALSE)
	ADD_BOOLPROP(ObjectActivate, DFALSE)
	ADD_BOOLPROP(TriggerRelayActivate, DTRUE)
END_CLASS_DEFAULT(ExitTrigger, Trigger, NULL, NULL)


// ----------------------------------------------------------------------- //
//
//	ROUTINE:	ExitTrigger::ExitTrigger()
//
//	PURPOSE:	Initialize object
//
// ----------------------------------------------------------------------- //

ExitTrigger::ExitTrigger() : Trigger()
{
	m_hstrNextWorld			= DNULL;
	m_hstrStartPointName	= DNULL;
	m_nExitType				= ENDWORLD_ENDOFWORLD;
}


// ----------------------------------------------------------------------- //
//
//	ROUTINE:	ExitTrigger::~ExitTrigger()
//
//	PURPOSE:	Deallocate object
//
// ----------------------------------------------------------------------- //

ExitTrigger::~ExitTrigger()
{
	CServerDE* pServerDE = GetServerDE();
	if (!pServerDE) return;

	if (m_hstrNextWorld)
	{
		pServerDE->FreeString(m_hstrNextWorld);
	}
	if (m_hstrStartPointName)
	{
		pServerDE->FreeString(m_hstrStartPointName);
	}
}

// ----------------------------------------------------------------------- //
//
//	ROUTINE:	ExitTrigger::EngineMessageFn
//
//	PURPOSE:	Handle engine messages
//
// ----------------------------------------------------------------------- //

DDWORD ExitTrigger::EngineMessageFn(DDWORD messageID, void *pData, DFLOAT fData)
{
	switch(messageID)
	{
		case MID_PRECREATE:
		{
			if (fData == PRECREATE_WORLDFILE || fData == PRECREATE_STRINGPROP)
			{
				ReadProp((ObjectCreateStruct*)pData);
			}
		}
		break;

		case MID_SAVEOBJECT:
			Save((HMESSAGEWRITE)pData, (DDWORD)fData);
			break;

		case MID_LOADOBJECT:
			Load((HMESSAGEREAD)pData, (DDWORD)fData);
			break;

		default : break;
	}


	return Trigger::EngineMessageFn(messageID, pData, fData);
}


// ----------------------------------------------------------------------- //
//
//	ROUTINE:	ExitTrigger::ReadProp
//
//	PURPOSE:	Set property value
//
// ----------------------------------------------------------------------- //

DBOOL ExitTrigger::ReadProp(ObjectCreateStruct *pData)
{
	CServerDE* pServerDE = GetServerDE();
	if (!pServerDE || !pData) return DFALSE;

	char buf[MAX_CS_FILENAME_LEN];

	buf[0] = '\0';
	pServerDE->GetPropString("NextWorld", buf, MAX_CS_FILENAME_LEN);
	if (buf[0]) m_hstrNextWorld = pServerDE->CreateString(buf);

	buf[0] = '\0';
	pServerDE->GetPropString("StartPointName", buf, MAX_CS_FILENAME_LEN);
	if (buf[0]) m_hstrStartPointName = pServerDE->CreateString(buf);

	DBOOL bEndOfEpisode = DFALSE;
	pServerDE->GetPropBool("EndOfEpisode", &bEndOfEpisode);

	DBOOL bSubWorld = DFALSE;
	pServerDE->GetPropBool("SubWorld", &bSubWorld);

	if (bEndOfEpisode)
		m_nExitType = ENDWORLD_ENDOFEPISODE;
	else if (bSubWorld)
		m_nExitType = ENDWORLD_ENDOFSUBWORLD;
	else
		m_nExitType = ENDWORLD_ENDOFWORLD;

	return DTRUE;
}


// ----------------------------------------------------------------------- //
//
//	ROUTINE:	ExitTrigger::SendMessages
//
//	PURPOSE:	
//
// ----------------------------------------------------------------------- //

void ExitTrigger::SendMessages()
{
	CServerDE* pServerDE = GetServerDE();
	if (!pServerDE) return;

	if (g_pBloodServerShell && m_hstrStartPointName)
	{
		g_pBloodServerShell->SetStartPointName(m_hstrStartPointName);
	}

	HMESSAGEWRITE hMsg = pServerDE->StartMessage(DNULL, SMSG_EXITWORLD);
	pServerDE->WriteToMessageHString(hMsg, m_hstrNextWorld);
	pServerDE->WriteToMessageByte(hMsg, m_nExitType);
	pServerDE->EndMessage(hMsg);
}


// ----------------------------------------------------------------------- //
//
//	ROUTINE:	ExitTrigger::Save
//
//	PURPOSE:	Save the object
//
// ----------------------------------------------------------------------- //

void ExitTrigger::Save(HMESSAGEWRITE hWrite, DDWORD dwSaveFlags)
{
	CServerDE* pServerDE = GetServerDE();
	if (!pServerDE || !hWrite) return;

	pServerDE->WriteToMessageHString(hWrite, m_hstrNextWorld);
	pServerDE->WriteToMessageHString(hWrite, m_hstrStartPointName);
	pServerDE->WriteToMessageByte(hWrite, m_nExitType);
}


// ----------------------------------------------------------------------- //
//
//	ROUTINE:	ExitTrigger::Load
//
//	PURPOSE:	Load the object
//
// ----------------------------------------------------------------------- //

void ExitTrigger::Load(HMESSAGEREAD hRead, DDWORD dwSaveFlags)
{
	CServerDE* pServerDE = GetServerDE();
	if (!pServerDE || !hRead) return;

	m_hstrNextWorld			= pServerDE->ReadFromMessageHString(hRead);
	m_hstrStartPointName	= pServerDE->ReadFromMessageHString(hRead);
	m_nExitType				 = pServerDE->ReadFromMessageByte(hRead);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -