331 lines
10 KiB
C++
331 lines
10 KiB
C++
/***
|
|
*
|
|
* Copyright (c) 1996-2001, Valve LLC. All rights reserved.
|
|
*
|
|
* This product contains software technology licensed from Id
|
|
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
|
* All Rights Reserved.
|
|
*
|
|
* Use, distribution, and modification of this source code and/or resulting
|
|
* object code is restricted to non-commercial enhancements to products from
|
|
* Valve LLC. All other use, distribution, or modification is prohibited
|
|
* without written permission from Valve LLC.
|
|
*
|
|
****/
|
|
//
|
|
// teamplay_gamerules.cpp
|
|
//
|
|
#include "extdll.h"
|
|
#include "util.h"
|
|
#include "cbase.h"
|
|
#include "player.h"
|
|
#include "weapons.h"
|
|
#include "gamerules.h"
|
|
#include "skill.h"
|
|
#include "items.h"
|
|
#include "UserMessages.h"
|
|
|
|
//=========================================================
|
|
//=========================================================
|
|
CHalfLifeRules::CHalfLifeRules()
|
|
{
|
|
SERVER_COMMAND( "exec spserver.cfg\n" );
|
|
|
|
RefreshSkillData();
|
|
}
|
|
|
|
//=========================================================
|
|
//=========================================================
|
|
void CHalfLifeRules::Think()
|
|
{
|
|
}
|
|
|
|
//=========================================================
|
|
//=========================================================
|
|
bool CHalfLifeRules::IsMultiplayer()
|
|
{
|
|
return false;
|
|
}
|
|
|
|
//=========================================================
|
|
//=========================================================
|
|
bool CHalfLifeRules::IsDeathmatch()
|
|
{
|
|
return false;
|
|
}
|
|
|
|
//=========================================================
|
|
//=========================================================
|
|
bool CHalfLifeRules::IsCoOp()
|
|
{
|
|
return false;
|
|
}
|
|
|
|
|
|
//=========================================================
|
|
//=========================================================
|
|
bool CHalfLifeRules::FShouldSwitchWeapon(CBasePlayer* pPlayer, CBasePlayerItem* pWeapon)
|
|
{
|
|
if (!pPlayer->m_pActiveItem)
|
|
{
|
|
// player doesn't have an active item!
|
|
return true;
|
|
}
|
|
|
|
if (!pPlayer->m_pActiveItem->CanHolster())
|
|
{
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
//=========================================================
|
|
//=========================================================
|
|
bool CHalfLifeRules::GetNextBestWeapon(CBasePlayer* pPlayer, CBasePlayerItem* pCurrentWeapon, bool alwaysSearch)
|
|
{
|
|
//If this is an exhaustible weapon and it's out of ammo, always try to switch even in singleplayer.
|
|
if (alwaysSearch || ((pCurrentWeapon->iFlags() & ITEM_FLAG_EXHAUSTIBLE) != 0 && pCurrentWeapon->PrimaryAmmoIndex() != -1 && pPlayer->m_rgAmmo[pCurrentWeapon->PrimaryAmmoIndex()] == 0))
|
|
{
|
|
return CGameRules::GetNextBestWeapon(pPlayer, pCurrentWeapon);
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
//=========================================================
|
|
//=========================================================
|
|
bool CHalfLifeRules::ClientConnected(edict_t* pEntity, const char* pszName, const char* pszAddress, char szRejectReason[128])
|
|
{
|
|
return true;
|
|
}
|
|
|
|
void CHalfLifeRules::InitHUD(CBasePlayer* pl)
|
|
{
|
|
}
|
|
|
|
//=========================================================
|
|
//=========================================================
|
|
void CHalfLifeRules::ClientDisconnected(edict_t* pClient)
|
|
{
|
|
}
|
|
|
|
//=========================================================
|
|
//=========================================================
|
|
float CHalfLifeRules::FlPlayerFallDamage(CBasePlayer* pPlayer)
|
|
{
|
|
// subtract off the speed at which a player is allowed to fall without being hurt,
|
|
// so damage will be based on speed beyond that, not the entire fall
|
|
pPlayer->m_flFallVelocity -= PLAYER_MAX_SAFE_FALL_SPEED;
|
|
return pPlayer->m_flFallVelocity * DAMAGE_FOR_FALL_SPEED;
|
|
}
|
|
|
|
//=========================================================
|
|
//=========================================================
|
|
void CHalfLifeRules::PlayerSpawn(CBasePlayer* pPlayer)
|
|
{
|
|
}
|
|
|
|
//=========================================================
|
|
//=========================================================
|
|
bool CHalfLifeRules::AllowAutoTargetCrosshair()
|
|
{
|
|
return (g_iSkillLevel == SKILL_EASY);
|
|
}
|
|
|
|
//=========================================================
|
|
//=========================================================
|
|
void CHalfLifeRules::PlayerThink(CBasePlayer* pPlayer)
|
|
{
|
|
}
|
|
|
|
|
|
//=========================================================
|
|
//=========================================================
|
|
bool CHalfLifeRules::FPlayerCanRespawn(CBasePlayer* pPlayer)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
//=========================================================
|
|
//=========================================================
|
|
float CHalfLifeRules::FlPlayerSpawnTime(CBasePlayer* pPlayer)
|
|
{
|
|
return gpGlobals->time; //now!
|
|
}
|
|
|
|
//=========================================================
|
|
// IPointsForKill - how many points awarded to anyone
|
|
// that kills this player?
|
|
//=========================================================
|
|
int CHalfLifeRules::IPointsForKill(CBasePlayer* pAttacker, CBasePlayer* pKilled)
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
//=========================================================
|
|
// PlayerKilled - someone/something killed this player
|
|
//=========================================================
|
|
void CHalfLifeRules::PlayerKilled(CBasePlayer* pVictim, entvars_t* pKiller, entvars_t* pInflictor)
|
|
{
|
|
}
|
|
|
|
//=========================================================
|
|
// Deathnotice
|
|
//=========================================================
|
|
void CHalfLifeRules::DeathNotice(CBasePlayer* pVictim, entvars_t* pKiller, entvars_t* pInflictor)
|
|
{
|
|
}
|
|
|
|
//=========================================================
|
|
// PlayerGotWeapon - player has grabbed a weapon that was
|
|
// sitting in the world
|
|
//=========================================================
|
|
void CHalfLifeRules::PlayerGotWeapon(CBasePlayer* pPlayer, CBasePlayerItem* pWeapon)
|
|
{
|
|
}
|
|
|
|
//=========================================================
|
|
// FlWeaponRespawnTime - what is the time in the future
|
|
// at which this weapon may spawn?
|
|
//=========================================================
|
|
float CHalfLifeRules::FlWeaponRespawnTime(CBasePlayerItem* pWeapon)
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
//=========================================================
|
|
// FlWeaponRespawnTime - Returns 0 if the weapon can respawn
|
|
// now, otherwise it returns the time at which it can try
|
|
// to spawn again.
|
|
//=========================================================
|
|
float CHalfLifeRules::FlWeaponTryRespawn(CBasePlayerItem* pWeapon)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
//=========================================================
|
|
// VecWeaponRespawnSpot - where should this weapon spawn?
|
|
// Some game variations may choose to randomize spawn locations
|
|
//=========================================================
|
|
Vector CHalfLifeRules::VecWeaponRespawnSpot(CBasePlayerItem* pWeapon)
|
|
{
|
|
return pWeapon->pev->origin;
|
|
}
|
|
|
|
//=========================================================
|
|
// WeaponShouldRespawn - any conditions inhibiting the
|
|
// respawning of this weapon?
|
|
//=========================================================
|
|
int CHalfLifeRules::WeaponShouldRespawn(CBasePlayerItem* pWeapon)
|
|
{
|
|
return GR_WEAPON_RESPAWN_NO;
|
|
}
|
|
|
|
//=========================================================
|
|
//=========================================================
|
|
bool CHalfLifeRules::CanHaveItem(CBasePlayer* pPlayer, CItem* pItem)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
//=========================================================
|
|
//=========================================================
|
|
void CHalfLifeRules::PlayerGotItem(CBasePlayer* pPlayer, CItem* pItem)
|
|
{
|
|
}
|
|
|
|
//=========================================================
|
|
//=========================================================
|
|
int CHalfLifeRules::ItemShouldRespawn(CItem* pItem)
|
|
{
|
|
return GR_ITEM_RESPAWN_NO;
|
|
}
|
|
|
|
|
|
//=========================================================
|
|
// At what time in the future may this Item respawn?
|
|
//=========================================================
|
|
float CHalfLifeRules::FlItemRespawnTime(CItem* pItem)
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
//=========================================================
|
|
// Where should this item respawn?
|
|
// Some game variations may choose to randomize spawn locations
|
|
//=========================================================
|
|
Vector CHalfLifeRules::VecItemRespawnSpot(CItem* pItem)
|
|
{
|
|
return pItem->pev->origin;
|
|
}
|
|
|
|
//=========================================================
|
|
//=========================================================
|
|
bool CHalfLifeRules::IsAllowedToSpawn(CBaseEntity* pEntity)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
//=========================================================
|
|
//=========================================================
|
|
void CHalfLifeRules::PlayerGotAmmo(CBasePlayer* pPlayer, char* szName, int iCount)
|
|
{
|
|
}
|
|
|
|
//=========================================================
|
|
//=========================================================
|
|
int CHalfLifeRules::AmmoShouldRespawn(CBasePlayerAmmo* pAmmo)
|
|
{
|
|
return GR_AMMO_RESPAWN_NO;
|
|
}
|
|
|
|
//=========================================================
|
|
//=========================================================
|
|
float CHalfLifeRules::FlAmmoRespawnTime(CBasePlayerAmmo* pAmmo)
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
//=========================================================
|
|
//=========================================================
|
|
Vector CHalfLifeRules::VecAmmoRespawnSpot(CBasePlayerAmmo* pAmmo)
|
|
{
|
|
return pAmmo->pev->origin;
|
|
}
|
|
|
|
//=========================================================
|
|
//=========================================================
|
|
float CHalfLifeRules::FlHealthChargerRechargeTime()
|
|
{
|
|
return 0; // don't recharge
|
|
}
|
|
|
|
//=========================================================
|
|
//=========================================================
|
|
int CHalfLifeRules::DeadPlayerWeapons(CBasePlayer* pPlayer)
|
|
{
|
|
return GR_PLR_DROP_GUN_NO;
|
|
}
|
|
|
|
//=========================================================
|
|
//=========================================================
|
|
int CHalfLifeRules::DeadPlayerAmmo(CBasePlayer* pPlayer)
|
|
{
|
|
return GR_PLR_DROP_AMMO_NO;
|
|
}
|
|
|
|
//=========================================================
|
|
//=========================================================
|
|
int CHalfLifeRules::PlayerRelationship(CBaseEntity* pPlayer, CBaseEntity* pTarget)
|
|
{
|
|
// why would a single player in half life need this?
|
|
return GR_NOTTEAMMATE;
|
|
}
|
|
|
|
//=========================================================
|
|
//=========================================================
|
|
bool CHalfLifeRules::FAllowMonsters()
|
|
{
|
|
return true;
|
|
}
|