📄 gamestartpoint.cpp
字号:
// ----------------------------------------------------------------------- //
//
// MODULE : GameStartPoint.cpp
//
// PURPOSE : GameStartPoint - Definition
//
// CREATED : 3/26/98
//
// ----------------------------------------------------------------------- //
#include "GameStartPoint.h"
#include "cpp_server_de.h"
#include "Trigger.h"
#include <mbstring.h>
BEGIN_CLASS(GameStartPoint)
ADD_BOOLPROP(Multiplayer, DFALSE)
ADD_STRINGPROP(TriggerTarget, "")
ADD_STRINGPROP(TriggerMessage, "")
ADD_LONGINTPROP(TeamID, 0) // Team ID (1 or 2, or 0 for any)
END_CLASS_DEFAULT_FLAGS(GameStartPoint, StartPoint, NULL, NULL, CF_ALWAYSLOAD)
// ----------------------------------------------------------------------- //
//
// ROUTINE: GameStartPoint::GameStartPoint
//
// PURPOSE: Constructor
//
// ----------------------------------------------------------------------- //
GameStartPoint::GameStartPoint() : StartPoint()
{
m_bMultiplayer = DFALSE;
m_hstrName = DNULL;
VEC_INIT(m_vPitchYawRoll);
m_hstrTriggerTarget = DNULL;
m_hstrTriggerMessage = DNULL;
m_nTeamID = 0;
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: GameStartPoint::~GameStartPoint
//
// PURPOSE: Destructor
//
// ----------------------------------------------------------------------- //
GameStartPoint::~GameStartPoint()
{
CServerDE* pServerDE = GetServerDE();
if (!pServerDE) return;
if (m_hstrName)
{
pServerDE->FreeString(m_hstrName);
}
if (m_hstrTriggerTarget)
{
pServerDE->FreeString(m_hstrTriggerTarget);
}
if (m_hstrTriggerMessage)
{
pServerDE->FreeString(m_hstrTriggerMessage);
}
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: GameStartPoint::EngineMessageFn
//
// PURPOSE: Handle engine messages
//
// ----------------------------------------------------------------------- //
DDWORD GameStartPoint::EngineMessageFn(DDWORD messageID, void *pData, DFLOAT fData)
{
switch(messageID)
{
case MID_PRECREATE:
{
DDWORD dwRetVal = StartPoint::EngineMessageFn(messageID, pData, fData);
if (fData == 1.0f)
ReadProp();
ObjectCreateStruct *pStruct = (ObjectCreateStruct*)pData;
// change the name so it's easy to find later
if (pStruct)
{
_mbscpy((unsigned char*)pStruct->m_Name, (const unsigned char*)"Blood2StartPoint");
}
return dwRetVal;
}
default : break;
}
return StartPoint::EngineMessageFn(messageID, pData, fData);
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: GameStartPoint::ReadProp
//
// PURPOSE: Read properties
//
// ----------------------------------------------------------------------- //
DBOOL GameStartPoint::ReadProp()
{
CServerDE* pServerDE = GetServerDE();
if (!pServerDE) return DFALSE;
GenericProp genProp;
if (pServerDE->GetPropGeneric("Multiplayer", &genProp) == DE_OK)
m_bMultiplayer = genProp.m_Bool;
if (pServerDE->GetPropGeneric("Name", &genProp) == DE_OK)
{
if (genProp.m_String[0])
m_hstrName = pServerDE->CreateString(genProp.m_String);
}
if (g_pServerDE->GetPropGeneric("TeamID", &genProp) == DE_OK)
{
m_nTeamID = (int)genProp.m_Long;
}
DRotation rRot;
ROT_INIT(rRot);
if (pServerDE->GetPropGeneric("Rotation", &genProp) == DE_OK)
{
m_vPitchYawRoll.x = genProp.m_Vec.x;
m_vPitchYawRoll.y = genProp.m_Vec.y;
m_vPitchYawRoll.z = genProp.m_Vec.z;
}
if (pServerDE->GetPropGeneric("TriggerTarget", &genProp) == DE_OK)
{
if (genProp.m_String[0])
m_hstrTriggerTarget = pServerDE->CreateString(genProp.m_String);
}
if (pServerDE->GetPropGeneric("TriggerMessage", &genProp) == DE_OK)
{
if (genProp.m_String[0])
m_hstrTriggerMessage = pServerDE->CreateString(genProp.m_String);
}
return DTRUE;
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: GameStartPoint::SendTrigger
//
// PURPOSE: Send it's trigger message (if applicable)
//
// ----------------------------------------------------------------------- //
void GameStartPoint::SendTrigger()
{
if (!m_hstrTriggerTarget || !m_hstrTriggerMessage || !g_pServerDE)
return;
SendTriggerMsgToObjects(this, m_hstrTriggerTarget, m_hstrTriggerMessage);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -