/*** * * 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 "gslua.h" extern DLL_GLOBAL CGameRules *g_pGameRules; extern DLL_GLOBAL BOOL g_fGameOver; extern int gmsgDeathMsg; // client dll messages extern int gmsgScoreInfo; extern int gmsgMOTD; //========================================================= //========================================================= CHalfLifeRules::CHalfLifeRules( void ) { RefreshSkillData(); } //========================================================= //========================================================= void CHalfLifeRules::Think ( void ) { } //========================================================= //========================================================= BOOL CHalfLifeRules::IsMultiplayer( void ) { return FALSE; } //========================================================= //========================================================= BOOL CHalfLifeRules::IsDeathmatch ( void ) { return FALSE; } //========================================================= //========================================================= BOOL CHalfLifeRules::IsCoOp( void ) { 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 ) { 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 ) { if(g_gsLuaRun.LRUN_CHLR_PLAYER_SPAWN) { BOOL bRun; bRun = LuaGet("GAME", LUA_TTABLE, FALSE, FALSE); if(bRun) bRun = LuaGet("PlayerSpawn", LUA_TFUNCTION, TRUE, FALSE); if(bRun) LuaCall("GAME.PlayerSpawn"); else g_gsLuaRun.LRUN_CHLR_PLAYER_SPAWN = FALSE; } } //========================================================= //========================================================= BOOL CHalfLifeRules :: AllowAutoTargetCrosshair( void ) { return ( g_iSkillLevel == SKILL_EASY ); } //========================================================= //========================================================= void CHalfLifeRules :: PlayerThink( CBasePlayer *pPlayer ) { if(g_gsLuaRun.LRUN_CHLR_PLAYER_THINK) { BOOL bRun; bRun = LuaGet("GAME", LUA_TTABLE, FALSE, FALSE); if(bRun) bRun = LuaGet("PlayerThink", LUA_TFUNCTION, TRUE, FALSE); if(bRun) { lua_createtable(g_L, 0, 3); LuaSetTable("health", pPlayer->pev->health); LuaSetTable("maxhealth", pPlayer->pev->max_health); LuaSetTable("armor", pPlayer->pev->armorvalue); LuaSetTable("view", pPlayer->pev->v_angle); LuaCall("GAME.PlayerThink", 1); } else { g_gsLuaRun.LRUN_CHLR_PLAYER_THINK = FALSE; } } } //========================================================= //========================================================= 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( void ) { 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( void ) { return TRUE; }