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

📄 weaponpickups.cpp

📁 Blood 2全套源码
💻 CPP
字号:
// ----------------------------------------------------------------------- //
//
// MODULE  : WeaponPickups.cpp
//
// PURPOSE : Blood2 Ammunition pickups - implementation
//
// CREATED : 10/24/97
//
// ----------------------------------------------------------------------- //

#include "WeaponPickups.h"
#include "cpp_server_de.h"
#include "SharedDefs.h"
#include "generic_msg_de.h"
#include "bloodservershell.h"
#include "ClientServerShared.h"

// *********************************************************************** //
//
//	CLASS:		WeaponPickup
//
//	PURPOSE:	Base Weapon pickup item
//
// *********************************************************************** //


BEGIN_CLASS(WeaponPickup)
END_CLASS_DEFAULT(WeaponPickup, PickupObject, NULL, NULL)


// ----------------------------------------------------------------------- //
//
//	ROUTINE:	WeaponPickup::EngineMessageFn
//
//	PURPOSE:	engine msg handler
//
// ----------------------------------------------------------------------- //

DDWORD WeaponPickup::EngineMessageFn(DDWORD messageID, void *pData, float fData)
{
	switch(messageID)
	{
		case MID_INITIALUPDATE:
		{
			if( g_pBloodServerShell->IsMultiplayerGame( ))
			{
				g_pServerDE->RemoveObject( m_hObject );
			}
			else
			{
				DDWORD dwFlags = g_pServerDE->GetObjectUserFlags( m_hObject );
				dwFlags |= USRFLG_GLOW;
				g_pServerDE->SetObjectUserFlags( m_hObject, dwFlags );
			}


			break;
		}
	}

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

// ----------------------------------------------------------------------- //
//
//	ROUTINE:	WeaponPickup::ObjectTouch
//
//	PURPOSE:	handles an object touch
//
// ----------------------------------------------------------------------- //

void WeaponPickup::ObjectTouch(HOBJECT hObject)
{
	HMESSAGEWRITE hMessage;
	CServerDE* pServerDE = GetServerDE();
	if (!pServerDE) return;

	hMessage = pServerDE->StartMessageToObject(this, hObject, MID_ADDWEAPON);
	pServerDE->WriteToMessageByte(hMessage, m_nType);
	pServerDE->WriteToMessageFloat(hMessage, m_fValue * m_fValueMult );
	pServerDE->EndMessage(hMessage);

}



// *********************************************************************** //
//
//	CLASS:		BerettaPU
//
//	PURPOSE:	Beretta
//
// *********************************************************************** //

BEGIN_CLASS(BerettaPU)
END_CLASS_DEFAULT(BerettaPU, WeaponPickup, NULL, NULL)

// Constructor
BerettaPU::BerettaPU() : WeaponPickup()
{
	m_nType				= WEAP_BERETTA;
	m_szFile			= "Beretta_pu";
	m_szObjectName		= "Beretta";
	m_nNameID			= IDS_WEAPON_BERETTA;
	m_fValue = 12.0f;
}



// *********************************************************************** //
//
//	CLASS:		ShotgunPU
//
//	PURPOSE:	Shotgun
//
// *********************************************************************** //

BEGIN_CLASS(ShotgunPU)
END_CLASS_DEFAULT(ShotgunPU, WeaponPickup, NULL, NULL)

// Constructor
ShotgunPU::ShotgunPU() : WeaponPickup()
{
	m_nType		= WEAP_SHOTGUN;
	m_szFile			= "Shotgun_pu";
	m_szObjectName		= "Sawed-off Shotgun";
	m_nNameID			= IDS_WEAPON_SHOTGUN;
	m_fValue = 8.0f;
}

#ifdef _ADD_ON

// *********************************************************************** //
//
//	CLASS:		CombatShotgunPU
//
//	PURPOSE:	Combat Shotgun
//
// *********************************************************************** //

BEGIN_CLASS(CombatShotgunPU)
END_CLASS_DEFAULT(CombatShotgunPU, WeaponPickup, NULL, NULL)

// Constructor
CombatShotgunPU::CombatShotgunPU() : WeaponPickup()
{
	m_nType				= WEAP_COMBATSHOTGUN;
	m_szFile			= "CombatShotgun_pu";
	m_szObjectName		= "Combat Shotgun";
	m_nNameID			= IDS_WEAPON_COMBATSHOTGUN;
	m_fValue = 8.0f;
}

#endif

// *********************************************************************** //
//
//	CLASS:		SniperRiflePU
//
//	PURPOSE:	SniperRifle
//
// *********************************************************************** //

BEGIN_CLASS(SniperRiflePU)
END_CLASS_DEFAULT(SniperRiflePU, WeaponPickup, NULL, NULL)

// Constructor
SniperRiflePU::SniperRiflePU() : WeaponPickup()
{
	m_nType		= WEAP_SNIPERRIFLE;
	m_szFile			= "Sniperrifle_pu";
	m_szObjectName		= "Sniper Rifle";
	m_nNameID			= IDS_WEAPON_SNIPER;
	m_fValue = 10.0f;
}


// *********************************************************************** //
//
//	CLASS:		AssaultRiflePU
//
//	PURPOSE:	AssaultRifle
//
// *********************************************************************** //

BEGIN_CLASS(AssaultRiflePU)
END_CLASS_DEFAULT(AssaultRiflePU, WeaponPickup, NULL, NULL)

// Constructor
AssaultRiflePU::AssaultRiflePU() : WeaponPickup()
{
	m_nType		= WEAP_ASSAULTRIFLE;
	m_szFile			= "m16_pu";
	m_szObjectName		= "Assault Rifle";
	m_nNameID			= IDS_WEAPON_M16;
	m_fValue = 50.0f;
}


// *********************************************************************** //
//
//	CLASS:		SubMachineGunPU
//
//	PURPOSE:	SubMachineGun
//
// *********************************************************************** //

BEGIN_CLASS(SubMachineGunPU)
END_CLASS_DEFAULT(SubMachineGunPU, WeaponPickup, NULL, NULL)

// Constructor
SubMachineGunPU::SubMachineGunPU() : WeaponPickup()
{
	m_nType		= WEAP_SUBMACHINEGUN;
	m_szFile			= "Mac10_pu";
	m_szObjectName		= "Sub-machine Gun";
	m_nNameID			= IDS_WEAPON_MAC10;
	m_fValue = 20.0f;
}


// *********************************************************************** //
//
//	CLASS:		FlareGunPU
//
//	PURPOSE:	FlareGun
//
// *********************************************************************** //

BEGIN_CLASS(FlareGunPU)
END_CLASS_DEFAULT(FlareGunPU, WeaponPickup, NULL, NULL)

// Constructor
FlareGunPU::FlareGunPU() : WeaponPickup()
{
	m_nType		= WEAP_FLAREGUN;
	m_szFile			= "FlarePistol_pu";
	m_szObjectName		= "Flare Pistol";
	m_nNameID			= IDS_WEAPON_FLAREGUN;
	m_fValue = 8.0f;
}


// *********************************************************************** //
//
//	CLASS:		HowitzerPU
//
//	PURPOSE:	AssaultCannon
//
// *********************************************************************** //

BEGIN_CLASS(HowitzerPU)
END_CLASS_DEFAULT(HowitzerPU, WeaponPickup, NULL, NULL)

// Constructor
HowitzerPU::HowitzerPU() : WeaponPickup()
{
	m_nType		= WEAP_HOWITZER;
	m_szFile			= "Howitzer_pu";
	m_szObjectName		= "Howitzer";
	m_nNameID			= IDS_WEAPON_HOWITZER;
	m_fValue = 5.0f;
}


// *********************************************************************** //
//
//	CLASS:		BugSprayPU
//
//	PURPOSE:	FlameRifle
//
// *********************************************************************** //

BEGIN_CLASS(BugSprayPU)
END_CLASS_DEFAULT(BugSprayPU, WeaponPickup, NULL, NULL)

// Constructor
BugSprayPU::BugSprayPU() : WeaponPickup()
{
	m_nType				= WEAP_BUGSPRAY;
	m_szFile			= "BugSpray_pu";
	m_szObjectName		= "Bug Spray Canister";
	m_nNameID			= IDS_WEAPON_BUGSPRAY;
	m_fValue = 20.0f;
}


// *********************************************************************** //
//
//	CLASS:		NapalmCannonPU
//
//	PURPOSE:	Napalm Cannon
//
// *********************************************************************** //

BEGIN_CLASS(NapalmCannonPU)
END_CLASS_DEFAULT(NapalmCannonPU, WeaponPickup, NULL, NULL)

// Constructor
NapalmCannonPU::NapalmCannonPU() : WeaponPickup()
{
	m_nType		= WEAP_NAPALMCANNON;
	m_szFile			= "NapalmCannon_pu";
	m_szObjectName		= "Napalm Cannon";
	m_nNameID			= IDS_WEAPON_NAPALM;
	m_fValue = 5.0f;
}


// *********************************************************************** //
//
//	CLASS:		MiniGunPU
//
//	PURPOSE:	MiniGun
//
// *********************************************************************** //

BEGIN_CLASS(MiniGunPU)
END_CLASS_DEFAULT(MiniGunPU, WeaponPickup, NULL, NULL)

// Constructor
MiniGunPU::MiniGunPU() : WeaponPickup()
{
	m_nType		= WEAP_MINIGUN;
	m_szFile			= "Minigun_pu";
	m_szObjectName		= "Vulcan Cannon";
	m_nNameID			= IDS_WEAPON_MINIGUN;
	m_fValue = 100.0f;
}


// *********************************************************************** //
//
//	CLASS:		VoodooDollPU
//
//	PURPOSE:	VoodooDoll
//
// *********************************************************************** //

BEGIN_CLASS(VoodooDollPU)
END_CLASS_DEFAULT(VoodooDollPU, WeaponPickup, NULL, NULL)

// Constructor
VoodooDollPU::VoodooDollPU() : WeaponPickup()
{
	m_nType		= WEAP_VOODOO;
	m_szFile			= "Voodoo_pu";
	m_szObjectName		= "Voodoo Doll";
	m_nNameID			= IDS_WEAPON_VOODOO;
	m_fValue = 0;
}


// *********************************************************************** //
//
//	CLASS:		OrbPU
//
//	PURPOSE:	Orb
//
// *********************************************************************** //

BEGIN_CLASS(OrbPU)
END_CLASS_DEFAULT(OrbPU, WeaponPickup, NULL, NULL)

// Constructor
OrbPU::OrbPU() : WeaponPickup()
{
	m_nType				= WEAP_ORB;
	m_szFile			= "Orb_pu";
	m_szObjectName		= "The Orb";
	m_nNameID			= IDS_WEAPON_ORB;
	m_fValue = 0;
}


// *********************************************************************** //
//
//	CLASS:		DeathRayPU
//
//	PURPOSE:	LaserRifle
//
// *********************************************************************** //

BEGIN_CLASS(DeathRayPU)
END_CLASS_DEFAULT(DeathRayPU, WeaponPickup, NULL, NULL)

// Constructor
DeathRayPU::DeathRayPU() : WeaponPickup()
{
	m_nType				= WEAP_DEATHRAY;
	m_szFile			= "DeathRay_pu";
	m_szObjectName		= "Cabalco Death Ray";
	m_nNameID			= IDS_WEAPON_DEATHRAY;
	m_fValue = 50.0f;
}


// *********************************************************************** //
//
//	CLASS:		LifeLeechPU
//
//	PURPOSE:	LifeLeech
//
// *********************************************************************** //

BEGIN_CLASS(LifeLeechPU)
END_CLASS_DEFAULT(LifeLeechPU, WeaponPickup, NULL, NULL)

// Constructor
LifeLeechPU::LifeLeechPU() : WeaponPickup()
{
	m_nType				= WEAP_LIFELEECH;
	m_szFile			= "Lifeleech_pu";
	m_szObjectName		= "Life Leech";
	m_nNameID			= IDS_WEAPON_LIFELEECH;
	m_fValue = 0;
}

#ifdef _ADD_ON

// *********************************************************************** //
//
//	CLASS:		FlayerPU
//
//	PURPOSE:	Flayer
//
// *********************************************************************** //

BEGIN_CLASS(FlayerPU)
END_CLASS_DEFAULT(FlayerPU, WeaponPickup, NULL, NULL)

// Constructor
FlayerPU::FlayerPU() : WeaponPickup()
{
	m_nType				= WEAP_FLAYER;
	m_szFile			= "Flayer_pu";
	m_szObjectName		= "Flayer";
	m_nNameID			= IDS_WEAPON_FLAYER;
	m_fValue = 0;
}

#endif

// *********************************************************************** //
//
//	CLASS:		TeslaCannonPU
//
//	PURPOSE:	TeslaCannon
//
// *********************************************************************** //

BEGIN_CLASS(TeslaCannonPU)
END_CLASS_DEFAULT(TeslaCannonPU, WeaponPickup, NULL, NULL)

// Constructor
TeslaCannonPU::TeslaCannonPU() : WeaponPickup()
{
	m_nType				= WEAP_TESLACANNON;
	m_szFile			= "TeslaCannon_pu";
	m_szObjectName		= "Tesla Cannon";
	m_nNameID			= IDS_WEAPON_TESLA;
	m_fValue = 40.0f;
}



// *********************************************************************** //
//
//	CLASS:		SingularityPU
//
//	PURPOSE:	Singularity
//
// *********************************************************************** //

BEGIN_CLASS(SingularityPU)
END_CLASS_DEFAULT(SingularityPU, WeaponPickup, NULL, NULL)

// Constructor
SingularityPU::SingularityPU() : WeaponPickup()
{
	m_nType				= WEAP_SINGULARITY;
	m_szFile			= "Singularity_pu";
	m_szObjectName		= "Singularity Generator";
	m_nNameID			= IDS_WEAPON_SINGULARITY;
	m_fValue = 100.0f;
}


// ----------------------------------------------------------------------- //
//
//	ROUTINE:	SpawnWeaponPickup
//
//	PURPOSE:	Generates a weapon pickup object, used when a player or AI
//				drops a weapon.
//
// ----------------------------------------------------------------------- //

HOBJECT SpawnWeaponPickup(DDWORD dwWeapType, HOBJECT hOwner, DVector *pvPos, DRotation *prRot, DBOOL bIncludeAmmo)
{
	HCLASS hClass = NULL;
	HOBJECT hObject = NULL;

	switch (dwWeapType)
	{
		case WEAP_BERETTA: hClass = g_pServerDE->GetClass("BerettaPU"); break;
		case WEAP_SHOTGUN: hClass = g_pServerDE->GetClass("ShotgunPU"); break;
		case WEAP_SNIPERRIFLE: hClass = g_pServerDE->GetClass("SniperRiflePU"); break;
		case WEAP_ASSAULTRIFLE: hClass = g_pServerDE->GetClass("AssaultRiflePU"); break;
		case WEAP_SUBMACHINEGUN: hClass = g_pServerDE->GetClass("SubMachineGunPU"); break;
		case WEAP_FLAREGUN: hClass = g_pServerDE->GetClass("FlareGunPU"); break;
		case WEAP_HOWITZER: hClass = g_pServerDE->GetClass("HowitzerPU"); break;
		case WEAP_BUGSPRAY: hClass = g_pServerDE->GetClass("BugSprayPU"); break;
		case WEAP_NAPALMCANNON: hClass = g_pServerDE->GetClass("NapalmCannonPU"); break;
		case WEAP_MINIGUN: hClass = g_pServerDE->GetClass("MiniGunPU"); break;
		case WEAP_VOODOO: hClass = g_pServerDE->GetClass("VoodooDollPU"); break;
		case WEAP_ORB: hClass = g_pServerDE->GetClass("OrbPU"); break;
		case WEAP_DEATHRAY: hClass = g_pServerDE->GetClass("DeathRayPU"); break;
		case WEAP_LIFELEECH: hClass = g_pServerDE->GetClass("LifeLeechPU"); break;
		case WEAP_TESLACANNON: hClass = g_pServerDE->GetClass("TeslaCannonPU"); break;
		case WEAP_SINGULARITY: hClass = g_pServerDE->GetClass("SingularityPU"); break;
#ifdef _ADD_ON
		case WEAP_COMBATSHOTGUN: hClass = g_pServerDE->GetClass("CombatShotgunPU"); break;
		case WEAP_FLAYER: hClass = g_pServerDE->GetClass("FlayerPU"); break;
#endif

	}
	if (hClass)
	{
		ObjectCreateStruct ocStruct;
		DVector vPos;
		DRotation rRot;

		if (pvPos && prRot)
		{
			VEC_COPY(vPos, *pvPos);
			ROT_COPY(rRot, *prRot);
		}
		else
		{
			g_pServerDE->GetObjectPos(hOwner, &vPos);
			g_pServerDE->GetObjectRotation(hOwner, &rRot);
		}

		INIT_OBJECTCREATESTRUCT(ocStruct);

		VEC_COPY(ocStruct.m_Pos, vPos)
		ROT_COPY(ocStruct.m_Rotation, rRot)
		ocStruct.m_Flags = (FLAG_VISIBLE | FLAG_TOUCH_NOTIFY /* | FLAG_SHADOW */ );
		
		WeaponPickup* pObject = (WeaponPickup*)g_pServerDE->CreateObject(hClass, &ocStruct);
		hObject = g_pServerDE->ObjectToHandle(pObject);
		pObject->SetBounce( DFALSE );
		pObject->SpawnItem(&vPos);
		if( !bIncludeAmmo )
			pObject->SetValue( 0.0f );
	}
	return hObject;
}

⌨️ 快捷键说明

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