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

📄 b2baseclass.cpp

📁 Blood 2全套源码
💻 CPP
字号:
//----------------------------------------------------------
//
// MODULE  : B2BaseClass.CPP
//
// PURPOSE : A BaseClass for Blood2 objects
//
// CREATED : 8/4/98
//
//----------------------------------------------------------

#include "cpp_engineobjects_de.h"
#include "B2BaseClass.h"
#include "BloodServerShell.h"
#include "SharedDefs.h"


BEGIN_CLASS(B2BaseClass)
	PROP_DEFINEGROUP(GameSettings, PF_GROUP6)
		ADD_BOOLPROP_FLAG(DifficultyEasy, DTRUE, PF_GROUP6)
		ADD_BOOLPROP_FLAG(DifficultyMed, DTRUE, PF_GROUP6)
		ADD_BOOLPROP_FLAG(DifficultyHard, DTRUE, PF_GROUP6)
		ADD_BOOLPROP_FLAG(TypeCustom, DTRUE, PF_GROUP6)
		ADD_BOOLPROP_FLAG(TypeSingle, DTRUE, PF_GROUP6)
		ADD_BOOLPROP_FLAG(TypeActionMode, DTRUE, PF_GROUP6)
		ADD_BOOLPROP_FLAG(TypeBloodBath, DTRUE, PF_GROUP6)
		ADD_BOOLPROP_FLAG(TypeCTF, DTRUE, PF_GROUP6)
		ADD_BOOLPROP_FLAG(TypeCoop, DTRUE, PF_GROUP6)
END_CLASS_DEFAULT_FLAGS(B2BaseClass, BaseClass, NULL, NULL, CF_HIDDEN)


// Constructor
B2BaseClass::B2BaseClass(DBYTE nType) : BaseClass(nType)
{
	m_dwOptFlags = 0;
}


B2BaseClass::B2BaseClass() : BaseClass(OT_NORMAL)
{
	m_dwOptFlags = 0;
}


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

DDWORD B2BaseClass::EngineMessageFn(DDWORD messageID, void *pData, DFLOAT fData)
{
	if (!g_pServerDE) return 0;
	// Set object type...

	switch (messageID)
	{
		case MID_PRECREATE:
		{
			if (fData == PRECREATE_WORLDFILE || fData == PRECREATE_STRINGPROP)
				ReadProp((ObjectCreateStruct*)pData);
		}
		break;

		case MID_INITIALUPDATE:
		{
			if (fData == INITIALUPDATE_WORLDFILE)
			{
				DBOOL bResult = InitialUpdate();
				if (!bResult)
					g_pServerDE->RemoveObject(m_hObject);
			}
		}
		break;
	}

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


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

DBOOL B2BaseClass::ReadProp(ObjectCreateStruct *pStruct)
{
	if (!g_pServerDE || !pStruct) return DFALSE;

	GenericProp genProp;

	if (g_pServerDE->GetPropGeneric("DifficultyEasy", &genProp) == DE_OK)
	{
		m_dwOptFlags |= genProp.m_Bool ? OPT_FLAG_EASY : 0;
	}
	else
		m_dwOptFlags |= OPT_FLAG_EASY;

	if (g_pServerDE->GetPropGeneric("DifficultyMed", &genProp) == DE_OK)
	{
		m_dwOptFlags |= genProp.m_Bool ? OPT_FLAG_MED : 0;
	}
	else
		m_dwOptFlags |= OPT_FLAG_MED;

	if (g_pServerDE->GetPropGeneric("DifficultyHard", &genProp) == DE_OK)
	{
		m_dwOptFlags |= genProp.m_Bool ? OPT_FLAG_HARD : 0;
	}
	else
		m_dwOptFlags |= OPT_FLAG_HARD;

	if (g_pServerDE->GetPropGeneric("DifficultyInsane", &genProp) == DE_OK)
	{
		m_dwOptFlags |= genProp.m_Bool ? OPT_FLAG_INSANE : 0;
	}
	else
		m_dwOptFlags |= OPT_FLAG_INSANE;

	if (g_pServerDE->GetPropGeneric("TypeCustom", &genProp) == DE_OK)
	{
		m_dwOptFlags |= genProp.m_Bool ? OPT_FLAG_CUSTOM : 0;
	}
	else
		m_dwOptFlags |= OPT_FLAG_CUSTOM;

	if (g_pServerDE->GetPropGeneric("TypeSingle", &genProp) == DE_OK)
	{
		m_dwOptFlags |= genProp.m_Bool ? OPT_FLAG_SINGLE : 0;
	}
	else
		m_dwOptFlags |= OPT_FLAG_SINGLE;

	if (g_pServerDE->GetPropGeneric("TypeActionMode", &genProp) == DE_OK)
	{
		m_dwOptFlags |= genProp.m_Bool ? OPT_FLAG_ACTION: 0;
	}
	else
		m_dwOptFlags |= OPT_FLAG_ACTION;

	if (g_pServerDE->GetPropGeneric("TypeBloodbath", &genProp) == DE_OK)
	{
		m_dwOptFlags |= genProp.m_Bool ? OPT_FLAG_BLOODBATH : 0;
	}
	else
		m_dwOptFlags |= OPT_FLAG_BLOODBATH;

	if (g_pServerDE->GetPropGeneric("TypeCTF", &genProp) == DE_OK)
	{
		m_dwOptFlags |= genProp.m_Bool ? OPT_FLAG_CTF : 0;
	}
	else
		m_dwOptFlags |= OPT_FLAG_CTF;

	if (g_pServerDE->GetPropGeneric("TypeCoop", &genProp) == DE_OK)
	{
		m_dwOptFlags |= genProp.m_Bool ? OPT_FLAG_COOP : 0;
	}
	else
		m_dwOptFlags |= OPT_FLAG_COOP;

	return DTRUE;
}


// ----------------------------------------------------------------------- //
//
//	ROUTINE:	B2BaseClass::InitialUpdate
//
//	PURPOSE:	Initial update
//
// ----------------------------------------------------------------------- //

DBOOL B2BaseClass::InitialUpdate()
{
	if (!g_pServerDE) return DFALSE;

	DBOOL bAllow = DTRUE;
	
	DBYTE nDifficulty = GetGameDifficulty();
	DBYTE nGameType = GetGameType();

	// See if this object is allowed at this skill level
	switch (nDifficulty)
	{
		case DIFFICULTY_EASY: 
			if ((m_dwOptFlags & OPT_FLAG_EASY) == 0)
				bAllow = DFALSE;
			break;
		case DIFFICULTY_MEDIUM: 
			if ((m_dwOptFlags & OPT_FLAG_MED) == 0)
				bAllow = DFALSE;
			break;
		case DIFFICULTY_HARD: 
			if ((m_dwOptFlags & OPT_FLAG_HARD) == 0)
				bAllow = DFALSE;
			break;
		case DIFFICULTY_INSANE: 
			if ((m_dwOptFlags & OPT_FLAG_INSANE) == 0)
				bAllow = DFALSE;
			break;
	}

	// See if this object is allowed for this game type
	switch (nGameType)
	{
		case GAMETYPE_CUSTOM: 
			if ((m_dwOptFlags & OPT_FLAG_CUSTOM) == 0)
				bAllow = DFALSE;
			break;
		case GAMETYPE_SINGLE: 
			if ((m_dwOptFlags & OPT_FLAG_SINGLE) == 0)
				bAllow = DFALSE;
			break;
		case GAMETYPE_ACTION: 
			if ((m_dwOptFlags & OPT_FLAG_ACTION) == 0)
				bAllow = DFALSE;
			break;
		case GAMETYPE_BLOODBATH: 
			if ((m_dwOptFlags & OPT_FLAG_BLOODBATH) == 0)
				bAllow = DFALSE;
			break;
		case GAMETYPE_CTF: 
			if ((m_dwOptFlags & OPT_FLAG_CTF) == 0)
				bAllow = DFALSE;
			break;
		case GAMETYPE_COOP: 
			if ((m_dwOptFlags & OPT_FLAG_CTF) == 0)
				bAllow = DFALSE;
			break;
	}

	DDWORD dwFlags = g_pServerDE->GetObjectFlags(m_hObject);
	g_pServerDE->SetObjectFlags(m_hObject, dwFlags | FLAG_DONTFOLLOWSTANDING);

	return bAllow;
}



⌨️ 快捷键说明

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