📄 exittrigger.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 + -