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

📄 objectivestrigger.cpp

📁 Blood 2全套源码
💻 CPP
字号:
// ----------------------------------------------------------------------- //
//
// MODULE  : ObjectivesTrigger.cpp
//
// PURPOSE : ObjectivesTrigger - Implementation
//
// CREATED : 10/4/98
//
// ----------------------------------------------------------------------- //

#include "ObjectivesTrigger.h"
#include "cpp_server_de.h"
#include "SharedDefs.h"
#include "BloodServerShell.h"
#include "PlayerObj.h"
#include "ObjectUtilities.h"


BEGIN_CLASS(ObjectivesTrigger)
	ADD_LONGINTPROP(ResourceNum, 0)
	ADD_STRINGPROP(TitleToDisplay, "Objective #1:")
	ADD_STRINGPROP(TextToDisplay, "Use the '|' character to force a line break...")
	ADD_STRINGPROP(Sound, "Sounds\\Thunder.wav")

	ADD_STRINGPROP_FLAG(ActivationSound, "", PF_HIDDEN)
	ADD_REALPROP_FLAG(SoundRadius, 200.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, DFALSE)
END_CLASS_DEFAULT(ObjectivesTrigger, Trigger, NULL, NULL)


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

ObjectivesTrigger::ObjectivesTrigger() : Trigger()
{
	m_hstrTitle = DNULL;
	m_hstrText = DNULL;
	m_hstrSound = DNULL;
	m_nResource = 0;
}


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

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

	if (m_hstrTitle)
		pServerDE->FreeString(m_hstrTitle);

	if (m_hstrText)
		pServerDE->FreeString(m_hstrText);

	if (m_hstrSound)
		pServerDE->FreeString(m_hstrSound);
}

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

DDWORD ObjectivesTrigger::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:	ObjectivesTrigger::ReadProp
//
//	PURPOSE:	Set property value
//
// ----------------------------------------------------------------------- //

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

	GenericProp genProp;

	if(pServerDE->GetPropGeneric("ResourceNum", &genProp) == DE_OK)
		m_nResource = genProp.m_Long;

	if(pServerDE->GetPropGeneric("TitleToDisplay", &genProp) == DE_OK)
	{
		if (genProp.m_String[0]) 
			m_hstrTitle = pServerDE->CreateString(genProp.m_String);
	}

	if(pServerDE->GetPropGeneric("TextToDisplay", &genProp) == DE_OK)
	{
		if (genProp.m_String[0]) 
			m_hstrText = pServerDE->CreateString(genProp.m_String);
	}

	if(pServerDE->GetPropGeneric("Sound", &genProp) == DE_OK)
	{
		if (genProp.m_String[0]) 
			m_hstrSound = pServerDE->CreateString(genProp.m_String);
	}
	return DTRUE;
}


// ----------------------------------------------------------------------- //
//
//	ROUTINE:	ObjectivesTrigger::SendMessages
//
//	PURPOSE:	
//
// ----------------------------------------------------------------------- //

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

	if(m_hstrTitle && m_hstrText)
	{
		HMESSAGEWRITE hMsg = pServerDE->StartMessage(DNULL, SMSG_OBJECTIVES);
		pServerDE->WriteToMessageDWord(hMsg, m_nResource);
		pServerDE->WriteToMessageHString(hMsg, m_hstrTitle);
		pServerDE->WriteToMessageHString(hMsg, m_hstrText);
		pServerDE->EndMessage(hMsg);

		if(m_hstrSound)
			PlaySoundLocal(pServerDE->GetStringData(m_hstrSound), SOUNDPRIORITY_MISC_HIGH);
	}
}


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

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

	pServerDE->WriteToMessageDWord(hWrite, m_nResource);
	pServerDE->WriteToMessageHString(hWrite, m_hstrTitle);
	pServerDE->WriteToMessageHString(hWrite, m_hstrText);
}


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

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

	m_nResource		= pServerDE->ReadFromMessageDWord(hRead);
	m_hstrTitle		= pServerDE->ReadFromMessageHString(hRead);
	m_hstrText		= pServerDE->ReadFromMessageHString(hRead);
}

⌨️ 快捷键说明

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