mirror of
https://github.com/alliedmodders/hl2sdk.git
synced 2025-09-19 12:06:07 +08:00
SDK sync.
This commit is contained in:
@ -2270,6 +2270,11 @@ void ActivityList_RegisterSharedActivities( void )
|
||||
REGISTER_SHARED_ACTIVITY( ACT_THROWABLE_VM_IDLE );
|
||||
REGISTER_SHARED_ACTIVITY( ACT_THROWABLE_VM_FIRE );
|
||||
|
||||
REGISTER_SHARED_ACTIVITY( ACT_SPELL_VM_DRAW );
|
||||
REGISTER_SHARED_ACTIVITY( ACT_SPELL_VM_IDLE );
|
||||
REGISTER_SHARED_ACTIVITY( ACT_SPELL_VM_ARM );
|
||||
REGISTER_SHARED_ACTIVITY( ACT_SPELL_VM_FIRE );
|
||||
|
||||
AssertMsg( g_HighestActivity == LAST_SHARED_ACTIVITY - 1, "Not all activities from ai_activity.h registered in activitylist.cpp" );
|
||||
}
|
||||
|
||||
|
@ -2097,11 +2097,16 @@ typedef enum
|
||||
|
||||
// Throwable Animations
|
||||
ACT_MP_THROW,
|
||||
|
||||
ACT_THROWABLE_VM_DRAW,
|
||||
ACT_THROWABLE_VM_IDLE,
|
||||
ACT_THROWABLE_VM_FIRE,
|
||||
|
||||
// Spell Animations
|
||||
ACT_SPELL_VM_DRAW,
|
||||
ACT_SPELL_VM_IDLE,
|
||||
ACT_SPELL_VM_ARM,
|
||||
ACT_SPELL_VM_FIRE,
|
||||
|
||||
// this is the end of the global activities, private per-monster activities start here.
|
||||
LAST_SHARED_ACTIVITY,
|
||||
} Activity;
|
||||
|
@ -248,7 +248,7 @@ public:
|
||||
// but they are out of ammo. The default implementation
|
||||
// either reloads, switches weapons, or plays an empty sound.
|
||||
|
||||
virtual bool ShouldBlockPrimaryFire() { return !AutoFiresFullClip(); }
|
||||
virtual bool ShouldBlockPrimaryFire() { return false; }
|
||||
|
||||
#ifdef CLIENT_DLL
|
||||
virtual void CreateMove( float flInputSampleTime, CUserCmd *pCmd, const QAngle &vecOldViewAngles ) {}
|
||||
|
@ -11,6 +11,8 @@
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "baseprojectile.h"
|
||||
|
||||
#if defined( CLIENT_DLL )
|
||||
|
||||
#define CBaseGrenade C_BaseGrenade
|
||||
@ -29,12 +31,12 @@
|
||||
class CTakeDamageInfo;
|
||||
|
||||
#if !defined( CLIENT_DLL )
|
||||
class CBaseGrenade : public CBaseAnimating, public CDefaultPlayerPickupVPhysics
|
||||
class CBaseGrenade : public CBaseProjectile, public CDefaultPlayerPickupVPhysics
|
||||
#else
|
||||
class CBaseGrenade : public CBaseAnimating
|
||||
class CBaseGrenade : public CBaseProjectile
|
||||
#endif
|
||||
{
|
||||
DECLARE_CLASS( CBaseGrenade, CBaseAnimating );
|
||||
DECLARE_CLASS( CBaseGrenade, CBaseProjectile );
|
||||
public:
|
||||
|
||||
CBaseGrenade(void);
|
||||
|
@ -22,7 +22,7 @@
|
||||
#include "view.h"
|
||||
#include "client_virtualreality.h"
|
||||
#define CRecipientFilter C_RecipientFilter
|
||||
#include "headtrack/isourcevirtualreality.h"
|
||||
#include "sourcevr/isourcevirtualreality.h"
|
||||
|
||||
#else
|
||||
|
||||
|
26
game/shared/baseprojectile.cpp
Normal file
26
game/shared/baseprojectile.cpp
Normal file
@ -0,0 +1,26 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================//
|
||||
|
||||
#include "cbase.h"
|
||||
#include "baseprojectile.h"
|
||||
|
||||
|
||||
IMPLEMENT_NETWORKCLASS_ALIASED( BaseProjectile, DT_BaseProjectile )
|
||||
|
||||
BEGIN_NETWORK_TABLE( CBaseProjectile, DT_BaseProjectile )
|
||||
END_NETWORK_TABLE()
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Constructor.
|
||||
//-----------------------------------------------------------------------------
|
||||
CBaseProjectile::CBaseProjectile()
|
||||
{
|
||||
#ifdef GAME_DLL
|
||||
m_iDestroyableHitCount = 0;
|
||||
#endif
|
||||
}
|
53
game/shared/baseprojectile.h
Normal file
53
game/shared/baseprojectile.h
Normal file
@ -0,0 +1,53 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================//
|
||||
|
||||
#ifndef BASEPROJECTILE_H
|
||||
#define BASEPROJECTILE_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "cbase.h"
|
||||
|
||||
#ifdef GAME_DLL
|
||||
#include "baseanimating.h"
|
||||
#else
|
||||
#include "c_baseanimating.h"
|
||||
#endif
|
||||
|
||||
#ifdef CLIENT_DLL
|
||||
#define CBaseProjectile C_BaseProjectile
|
||||
#endif // CLIENT_DLL
|
||||
|
||||
//=============================================================================
|
||||
//
|
||||
// Base Projectile.
|
||||
//
|
||||
//=============================================================================
|
||||
class CBaseProjectile : public CBaseAnimating
|
||||
{
|
||||
public:
|
||||
DECLARE_CLASS( CBaseProjectile, CBaseAnimating );
|
||||
DECLARE_NETWORKCLASS();
|
||||
|
||||
CBaseProjectile();
|
||||
|
||||
#ifdef GAME_DLL
|
||||
virtual int GetDestroyableHitCount( void ) const { return m_iDestroyableHitCount; }
|
||||
void IncrementDestroyableHitCount( void ) { ++m_iDestroyableHitCount; }
|
||||
#endif // GAME_DLL
|
||||
|
||||
virtual bool IsDestroyable( void ) { return false; }
|
||||
virtual void Destroy( bool bBlinkOut = true, bool bBreakRocket = false ) {}
|
||||
|
||||
protected:
|
||||
#ifdef GAME_DLL
|
||||
int m_iDestroyableHitCount;
|
||||
#endif // GAME_DLL
|
||||
};
|
||||
|
||||
#endif // BASEPROJECTILE_H
|
@ -12,7 +12,7 @@
|
||||
#include "iprediction.h"
|
||||
#include "prediction.h"
|
||||
#include "client_virtualreality.h"
|
||||
#include "headtrack/isourcevirtualreality.h"
|
||||
#include "sourcevr/isourcevirtualreality.h"
|
||||
#else
|
||||
#include "vguiscreen.h"
|
||||
#endif
|
||||
|
@ -44,6 +44,7 @@ static colorentry_t bloodcolors[] =
|
||||
{ BLOOD_COLOR_RED, 72, 0, 0 },
|
||||
{ BLOOD_COLOR_YELLOW, 195, 195, 0 },
|
||||
{ BLOOD_COLOR_MECH, 20, 20, 20 },
|
||||
{ BLOOD_COLOR_GREEN, 195, 195, 0 },
|
||||
};
|
||||
|
||||
#endif // EFFECT_COLOR_TABLES_H
|
||||
|
@ -55,6 +55,12 @@ ConVar player_limit_jump_speed( "player_limit_jump_speed", "1", FCVAR_REPLICATED
|
||||
// duck controls. Its value is meaningless anytime we don't have the options window open.
|
||||
ConVar option_duck_method("option_duck_method", "1", FCVAR_REPLICATED|FCVAR_ARCHIVE );// 0 = HOLD to duck, 1 = Duck is a toggle
|
||||
|
||||
#ifdef STAGING_ONLY
|
||||
#ifdef CLIENT_DLL
|
||||
ConVar debug_latch_reset_onduck( "debug_latch_reset_onduck", "1", FCVAR_CHEAT );
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// [MD] I'll remove this eventually. For now, I want the ability to A/B the optimizations.
|
||||
bool g_bMovementOptimizations = true;
|
||||
|
||||
@ -4108,8 +4114,15 @@ void CGameMovement::FinishUnDuck( void )
|
||||
mv->SetAbsOrigin( newOrigin );
|
||||
|
||||
#ifdef CLIENT_DLL
|
||||
#ifdef STAGING_ONLY
|
||||
if ( debug_latch_reset_onduck.GetBool() )
|
||||
{
|
||||
player->ResetLatched();
|
||||
}
|
||||
#else
|
||||
player->ResetLatched();
|
||||
#endif
|
||||
#endif // CLIENT_DLL
|
||||
|
||||
// Recategorize position since ducking can change origin
|
||||
CategorizePosition();
|
||||
@ -4207,8 +4220,15 @@ void CGameMovement::FinishDuck( void )
|
||||
mv->SetAbsOrigin( out );
|
||||
|
||||
#ifdef CLIENT_DLL
|
||||
#ifdef STAGING_ONLY
|
||||
if ( debug_latch_reset_onduck.GetBool() )
|
||||
{
|
||||
player->ResetLatched();
|
||||
}
|
||||
#else
|
||||
player->ResetLatched();
|
||||
#endif
|
||||
#endif // CLIENT_DLL
|
||||
}
|
||||
|
||||
// See if we are stuck?
|
||||
|
@ -271,7 +271,7 @@ public:
|
||||
|
||||
// Client damage rules
|
||||
virtual float FlPlayerFallDamage( CBasePlayer *pPlayer ) = 0;// this client just hit the ground after a fall. How much damage?
|
||||
virtual bool FPlayerCanTakeDamage( CBasePlayer *pPlayer, CBaseEntity *pAttacker ) {return TRUE;};// can this player take damage from this attacker?
|
||||
virtual bool FPlayerCanTakeDamage( CBasePlayer *pPlayer, CBaseEntity *pAttacker, const CTakeDamageInfo &info ) {return TRUE;};// can this player take damage from this attacker?
|
||||
virtual bool ShouldAutoAim( CBasePlayer *pPlayer, edict_t *target ) { return TRUE; }
|
||||
virtual float GetAutoAimScale( CBasePlayer *pPlayer ) { return 1.0f; }
|
||||
virtual int GetAutoAimMode() { return AUTOAIM_ON; }
|
||||
|
@ -36,7 +36,7 @@ float GetCurrentGravity( void )
|
||||
|
||||
ConVar sv_gravity ( "sv_gravity", DEFAULT_GRAVITY_STRING, FCVAR_NOTIFY | FCVAR_REPLICATED, "World gravity." );
|
||||
|
||||
#if defined( DOD_DLL ) || defined( CSTRIKE_DLL )
|
||||
#if defined( DOD_DLL ) || defined( CSTRIKE_DLL ) || defined( HL1MP_DLL )
|
||||
ConVar sv_stopspeed ( "sv_stopspeed","100", FCVAR_NOTIFY | FCVAR_REPLICATED, "Minimum stopping speed when on ground." );
|
||||
#else
|
||||
ConVar sv_stopspeed ( "sv_stopspeed","100", FCVAR_NOTIFY | FCVAR_REPLICATED | FCVAR_DEVELOPMENTONLY, "Minimum stopping speed when on ground." );
|
||||
@ -48,7 +48,7 @@ ConVar sv_specaccelerate( "sv_specaccelerate", "5", FCVAR_NOTIFY | FCVAR_ARCHIVE
|
||||
ConVar sv_specspeed ( "sv_specspeed", "3", FCVAR_ARCHIVE | FCVAR_NOTIFY | FCVAR_REPLICATED);
|
||||
ConVar sv_specnoclip ( "sv_specnoclip", "1", FCVAR_ARCHIVE | FCVAR_NOTIFY | FCVAR_REPLICATED);
|
||||
|
||||
#if defined( CSTRIKE_DLL )
|
||||
#if defined( CSTRIKE_DLL ) || defined( HL1MP_DLL )
|
||||
ConVar sv_maxspeed ( "sv_maxspeed", "320", FCVAR_NOTIFY | FCVAR_REPLICATED);
|
||||
#else
|
||||
ConVar sv_maxspeed ( "sv_maxspeed", "320", FCVAR_NOTIFY | FCVAR_REPLICATED | FCVAR_DEVELOPMENTONLY);
|
||||
@ -58,7 +58,7 @@ ConVar sv_maxspeed ( "sv_maxspeed", "320", FCVAR_NOTIFY | FCVAR_REPLICATED | FC
|
||||
ConVar sv_accelerate ( "sv_accelerate", "7", FCVAR_NOTIFY | FCVAR_REPLICATED);
|
||||
#else
|
||||
|
||||
#if defined( CSTRIKE_DLL )
|
||||
#if defined( CSTRIKE_DLL ) || defined( HL1MP_DLL )
|
||||
ConVar sv_accelerate ( "sv_accelerate", "10", FCVAR_NOTIFY | FCVAR_REPLICATED);
|
||||
#else
|
||||
ConVar sv_accelerate ( "sv_accelerate", "10", FCVAR_NOTIFY | FCVAR_REPLICATED | FCVAR_DEVELOPMENTONLY);
|
||||
@ -66,7 +66,7 @@ ConVar sv_maxspeed ( "sv_maxspeed", "320", FCVAR_NOTIFY | FCVAR_REPLICATED | FC
|
||||
|
||||
#endif//_XBOX
|
||||
|
||||
#if defined( CSTRIKE_DLL )
|
||||
#if defined( CSTRIKE_DLL ) || defined( HL1MP_DLL )
|
||||
ConVar sv_airaccelerate( "sv_airaccelerate", "10", FCVAR_NOTIFY | FCVAR_REPLICATED);
|
||||
ConVar sv_wateraccelerate( "sv_wateraccelerate", "10", FCVAR_NOTIFY | FCVAR_REPLICATED);
|
||||
ConVar sv_waterfriction( "sv_waterfriction", "1", FCVAR_NOTIFY | FCVAR_REPLICATED);
|
||||
@ -82,13 +82,13 @@ ConVar sv_rollspeed ( "sv_rollspeed", "200", FCVAR_NOTIFY | FCVAR_REPLICATED | F
|
||||
ConVar sv_rollangle ( "sv_rollangle", "0", FCVAR_NOTIFY | FCVAR_REPLICATED | FCVAR_DEVELOPMENTONLY, "Max view roll angle");
|
||||
#endif // CSTRIKE_DLL
|
||||
|
||||
#if defined( DOD_DLL ) || defined( CSTRIKE_DLL )
|
||||
#if defined( DOD_DLL ) || defined( CSTRIKE_DLL ) || defined( HL1MP_DLL )
|
||||
ConVar sv_friction ( "sv_friction","4", FCVAR_NOTIFY | FCVAR_REPLICATED, "World friction." );
|
||||
#else
|
||||
ConVar sv_friction ( "sv_friction","4", FCVAR_NOTIFY | FCVAR_REPLICATED | FCVAR_DEVELOPMENTONLY, "World friction." );
|
||||
#endif // DOD_DLL || CSTRIKE_DLL
|
||||
|
||||
#if defined( CSTRIKE_DLL )
|
||||
#if defined( CSTRIKE_DLL ) || defined( HL1MP_DLL )
|
||||
ConVar sv_bounce ( "sv_bounce","0", FCVAR_NOTIFY | FCVAR_REPLICATED, "Bounce multiplier for when physically simulated objects collide with other objects." );
|
||||
ConVar sv_maxvelocity ( "sv_maxvelocity","3500", FCVAR_REPLICATED, "Maximum speed any ballistically moving object is allowed to attain per axis." );
|
||||
ConVar sv_stepsize ( "sv_stepsize","18", FCVAR_NOTIFY | FCVAR_REPLICATED );
|
||||
|
@ -103,7 +103,7 @@ const char *g_pszMPConcepts[] =
|
||||
"TLK_TAUNT_REPLAY", // MP_CONCEPT_TAUNT_REPLAY
|
||||
"TLK_TAUNT_LAUGH", // MP_CONCEPT_TAUNT_LAUGH
|
||||
"TLK_TAUNT_HEROIC_POSE", // MP_CONCEPT_TAUNT_HEROIC_POSE
|
||||
"TLK_HIGHFIVE_READY", // MP_CONCEPT_HIGHFIVE_READY
|
||||
"TLK_PARTNER_TAUNT_READY", // MP_CONCEPT_PARTNER_TAUNT_READY
|
||||
"TLK_PLAYER_HOLDTAUNT", // MP_CONCEPT_HOLDTAUNT
|
||||
"TLK_TAUNT_PYRO_ARMAGEDDON", // MP_CONCEPT_TAUNT_PYRO_ARMAGEDDON
|
||||
"TLK_ROCKET_DESTOYED", // MP_CONCEPT_ROCKET_DESTOYED
|
||||
@ -144,16 +144,55 @@ const char *g_pszMPConcepts[] =
|
||||
"TLK_MAGIC_DANCE", // MP_CONCEPT_MAGIC_DANCE
|
||||
"HalloweenLongFall", // MP_CONCEPT_HALLOWEEN_LONGFALL
|
||||
"TLK_TAUNT_GUITAR_RIFF", // MP_CONCEPT_TAUNT_GUITAR_RIFF
|
||||
|
||||
// TF Halloween 2013 shenanigans.
|
||||
"TLK_PLAYER_CAST_FIREBALL", // MP_CONCEPT_PLAYER_CAST_FIREBALL
|
||||
"TLK_PLAYER_CAST_MERASMUS_ZAP", // MP_CONCEPT_PLAYER_CAST_MERASMUS_ZAP
|
||||
"TLK_PLAYER_CAST_SELF_HEAL", // MP_CONCEPT_PLAYER_CAST_SELF_HEAL
|
||||
"TLK_PLAYER_CAST_MIRV", // MP_CONCEPT_PLAYER_CAST_MIRV
|
||||
"TLK_PLAYER_CAST_BLAST_JUMP", // MP_CONCEPT_PLAYER_CAST_BLAST_JUMP
|
||||
"TLK_PLAYER_CAST_STEALTH", // MP_CONCEPT_PLAYER_CAST_STEALTH
|
||||
"TLK_PLAYER_CAST_TELEPORT", // MP_CONCEPT_PLAYER_CAST_TELEPORT
|
||||
"TLK_PLAYER_CAST_LIGHTNING_BALL", // MP_CONCEPT_PLAYER_CAST_LIGHTNING_BALL
|
||||
"TLK_PLAYER_CAST_MOVEMENT_BUFF", // MP_CONCEPT_PLAYER_CAST_MOVEMENT_BUFF
|
||||
"TLK_PLAYER_CAST_MONOCULOUS", // MP_CONCEPT_PLAYER_CAST_MONOCULOUS
|
||||
"TLK_PLAYER_CAST_METEOR_SWARM", // MP_CONCEPT_PLAYER_CAST_METEOR_SWARM
|
||||
"TLK_PLAYER_CAST_SKELETON_HORDE", // MP_CONCEPT_PLAYER_CAST_SKELETON_HORDE
|
||||
|
||||
"TLK_PLAYER_SPELL_FIREBALL", // MP_CONCEPT_PLAYER_SPELL_FIREBALL
|
||||
"TLK_PLAYER_SPELL_MERASMUS_ZAP", // MP_CONCEPT_PLAYER_SPELL_MERASMUS_ZAP
|
||||
"TLK_PLAYER_SPELL_SELF_HEAL", // MP_CONCEPT_PLAYER_SPELL_SELF_HEAL
|
||||
"TLK_PLAYER_SPELL_MIRV", // MP_CONCEPT_PLAYER_SPELL_MIRV
|
||||
"TLK_PLAYER_SPELL_BLAST_JUMP", // MP_CONCEPT_PLAYER_SPELL_BLAST_JUMP
|
||||
"TLK_PLAYER_SPELL_STEALTH", // MP_CONCEPT_PLAYER_SPELL_STEALTH
|
||||
"TLK_PLAYER_SPELL_TELEPORT", // MP_CONCEPT_PLAYER_SPELL_TELEPORT
|
||||
"TLK_PLAYER_SPELL_LIGHTNING_BALL", // MP_CONCEPT_PLAYER_SPELL_LIGHTNING_BALL
|
||||
"TLK_PLAYER_SPELL_MOVEMENT_BUFF", // MP_CONCEPT_PLAYER_SPELL_MOVEMENT_BUFF
|
||||
"TLK_PLAYER_SPELL_MONOCULOUS", // MP_CONCEPT_PLAYER_SPELL_MONOCULOUS
|
||||
"TLK_PLAYER_SPELL_METEOR_SWARM", // MP_CONCEPT_PLAYER_SPELL_METEOR_SWARM
|
||||
"TLK_PLAYER_SPELL_SKELETON_HORDE", // MP_CONCEPT_PLAYER_SPELL_SKELETON_HORDE
|
||||
|
||||
// Events.
|
||||
"TLK_PLAYER_SPELL_PICKUP_COMMON", // MP_CONCEPT_PLAYER_SPELL_PICKUP_COMMON
|
||||
"TLK_PLAYER_SPELL_PICKUP_RARE", // MP_CONCEPT_PLAYER_SPELL_PICKUP_RARE
|
||||
"TLK_PLAYER_HELLTOWER_MIDNIGHT", // MP_CONCEPT_PLAYER_HELLTOWER_MIDNIGHT
|
||||
"TLK_PLAYER_SKELETON_KING_APPEAR", // MP_CONCEPT_PLAYER_SKELETON_KING_APPEAR
|
||||
|
||||
"TLK_MANNHATTAN_GATE_ATK", // MP_CONCEPT_MANNHATTAN_GATE_ATK
|
||||
"TLK_MANNHATTAN_GATE_TAKE", // MP_CONCEPT_MANNHATTAN_GATE_TAKE
|
||||
"TLK_RESURRECTED", // MP_CONCEPT_RESURRECTED
|
||||
"TLK_MVM_LOOT_COMMON", // MP_CONCEPT_MVM_LOOT_COMMON
|
||||
"TLK_MVM_LOOT_RARE", // MP_CONCEPT_MVM_LOOT_RARE
|
||||
"TLK_MVM_LOOT_ULTRARARE", // MP_CONCEPT_MVM_LOOT_ULTRARARE
|
||||
"TLK_MEDIC_HEAL_SHIELD", // MP_CONCEPT_MEDIC_HEAL_SHIELD
|
||||
};
|
||||
COMPILE_TIME_ASSERT( ARRAYSIZE( g_pszMPConcepts ) == MP_TF_CONCEPT_COUNT );
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
int GetMPConceptIndexFromString( const char *pszConcept )
|
||||
{
|
||||
// Make sure our concept string and enum arrays are the same length
|
||||
Assert( ARRAYSIZE( g_pszMPConcepts ) == MP_TF_CONCEPT_COUNT );
|
||||
|
||||
for ( int iConcept = 0; iConcept < ARRAYSIZE( g_pszMPConcepts ); ++iConcept )
|
||||
{
|
||||
if ( !Q_stricmp( pszConcept, g_pszMPConcepts[iConcept] ) )
|
||||
|
@ -112,7 +112,7 @@ enum
|
||||
MP_CONCEPT_TAUNT_REPLAY, // "TLK_TAUNT_REPLAY"
|
||||
MP_CONCEPT_TAUNT_LAUGH, // "TLK_TAUNT_LAUGH"
|
||||
MP_CONCEPT_TAUNT_HEROIC_POSE, // "TLK_TAUNT_HEROIC_POSE"
|
||||
MP_CONCEPT_HIGHFIVE_READY, // "TLK_HIGHFIVE_READY"
|
||||
MP_CONCEPT_PARTNER_TAUNT_READY, // "TLK_PARTNER_TAUNT_READY"
|
||||
MP_CONCEPT_HOLDTAUNT, // "TLK_PLAYER_HOLDTAUNT"
|
||||
MP_CONCEPT_TAUNT_PYRO_ARMAGEDDON, // "TLK_TAUNT_PYRO_ARMAGEDDON"
|
||||
MP_CONCEPT_ROCKET_DESTOYED, // "TLK_ROCKET_DESTOYED"
|
||||
@ -153,6 +153,48 @@ enum
|
||||
MP_CONCEPT_MAGIC_DANCE, // "TLK_MAGIC_DANCE"
|
||||
MP_CONCEPT_HALLOWEEN_LONGFALL,
|
||||
MP_CONCEPT_TAUNT_GUITAR_RIFF, // "TLK_TAUNT_GUITAR_RIFF"
|
||||
|
||||
// TF Halloween 2013 shenanigans.
|
||||
MP_CONCEPT_PLAYER_CAST_FIREBALL, // "TLK_PLAYER_CAST_FIREBALL"
|
||||
MP_CONCEPT_PLAYER_CAST_MERASMUS_ZAP, // "TLK_PLAYER_CAST_MERASMUS_ZAP"
|
||||
MP_CONCEPT_PLAYER_CAST_SELF_HEAL, // "TLK_PLAYER_CAST_SELF_HEAL"
|
||||
MP_CONCEPT_PLAYER_CAST_MIRV, // "TLK_PLAYER_CAST_MIRV"
|
||||
MP_CONCEPT_PLAYER_CAST_BLAST_JUMP, // "TLK_PLAYER_CAST_BLAST_JUMP"
|
||||
MP_CONCEPT_PLAYER_CAST_STEALTH, // "TLK_PLAYER_CAST_STEALTH"
|
||||
MP_CONCEPT_PLAYER_CAST_TELEPORT, // "TLK_PLAYER_CAST_TELEPORT"
|
||||
MP_CONCEPT_PLAYER_CAST_LIGHTNING_BALL, // "TLK_PLAYER_CAST_LIGHTNING_BALL"
|
||||
MP_CONCEPT_PLAYER_CAST_MOVEMENT_BUFF, // "TLK_PLAYER_CAST_MOVEMENT_BUFF"
|
||||
MP_CONCEPT_PLAYER_CAST_MONOCULOUS, // "TLK_PLAYER_CAST_MONOCULOUS"
|
||||
MP_CONCEPT_PLAYER_CAST_METEOR_SWARM, // "TLK_PLAYER_CAST_METEOR_SWARM"
|
||||
MP_CONCEPT_PLAYER_CAST_SKELETON_HORDE, // "TLK_PLAYER_CAST_SKELETON_HORDE"
|
||||
|
||||
MP_CONCEPT_PLAYER_SPELL_FIREBALL, // "TLK_PLAYER_SPELL_FIREBALL"
|
||||
MP_CONCEPT_PLAYER_SPELL_MERASMUS_ZAP, // "TLK_PLAYER_SPELL_MERASMUS_ZAP"
|
||||
MP_CONCEPT_PLAYER_SPELL_SELF_HEAL, // "TLK_PLAYER_SPELL_SELF_HEAL"
|
||||
MP_CONCEPT_PLAYER_SPELL_MIRV, // "TLK_PLAYER_SPELL_MIRV"
|
||||
MP_CONCEPT_PLAYER_SPELL_BLAST_JUMP, // "TLK_PLAYER_SPELL_BLAST_JUMP"
|
||||
MP_CONCEPT_PLAYER_SPELL_STEALTH, // "TLK_PLAYER_SPELL_STEALTH"
|
||||
MP_CONCEPT_PLAYER_SPELL_TELEPORT, // "TLK_PLAYER_SPELL_TELEPORT"
|
||||
MP_CONCEPT_PLAYER_SPELL_LIGHTNING_BALL, // "TLK_PLAYER_SPELL_LIGHTNING_BALL"
|
||||
MP_CONCEPT_PLAYER_SPELL_MOVEMENT_BUFF, // "TLK_PLAYER_SPELL_MOVEMENT_BUFF"
|
||||
MP_CONCEPT_PLAYER_SPELL_MONOCULOUS, // "TLK_PLAYER_SPELL_MONOCULOUS"
|
||||
MP_CONCEPT_PLAYER_SPELL_METEOR_SWARM, // "TLK_PLAYER_SPELL_METEOR_SWARM"
|
||||
MP_CONCEPT_PLAYER_SPELL_SKELETON_HORDE, // "TLK_PLAYER_SPELL_SKELETON_HORDE"
|
||||
|
||||
// Events.
|
||||
MP_CONCEPT_PLAYER_SPELL_PICKUP_COMMON, // "TLK_PLAYER_SPELL_PICKUP_COMMON"
|
||||
MP_CONCEPT_PLAYER_SPELL_PICKUP_RARE, // "TLK_PLAYER_SPELL_PICKUP_RARE"
|
||||
MP_CONCEPT_PLAYER_HELLTOWER_MIDNIGHT, // "TLK_PLAYER_HELLTOWER_MIDNIGHT"
|
||||
MP_CONCEPT_PLAYER_SKELETON_KING_APPEAR, // "TLK_PLAYER_SKELETON_KING_APPEAR"
|
||||
|
||||
MP_CONCEPT_MANNHATTAN_GATE_ATK, // "TLK_MANNHATTAN_GATE_ATK"
|
||||
MP_CONCEPT_MANNHATTAN_GATE_TAKE, // "TLK_MANNHATTAN_GATE_TAKE"
|
||||
MP_CONCEPT_RESURRECTED, // "TLK_RESURRECTED"
|
||||
MP_CONCEPT_MVM_LOOT_COMMON, // "TLK_MVM_LOOT_COMMON"
|
||||
MP_CONCEPT_MVM_LOOT_RARE, // "TLK_MVM_LOOT_RARE"
|
||||
MP_CONCEPT_MVM_LOOT_ULTRARARE, // "TLK_MVM_LOOT_ULTRARARE"
|
||||
MP_CONCEPT_MEDIC_HEAL_SHIELD, // "TLK_MEDIC_HEAL_SHIELD"
|
||||
|
||||
MP_TF_CONCEPT_COUNT
|
||||
|
||||
// Other MP_CONCEPT_* start he using MP_TF_CONCEPT_COUNT + 1 as start.
|
||||
|
@ -641,7 +641,7 @@ ConVarRef suitcharger( "sk_suitcharger" );
|
||||
|
||||
//=========================================================
|
||||
//=========================================================
|
||||
bool CMultiplayRules::FPlayerCanTakeDamage( CBasePlayer *pPlayer, CBaseEntity *pAttacker )
|
||||
bool CMultiplayRules::FPlayerCanTakeDamage( CBasePlayer *pPlayer, CBaseEntity *pAttacker, const CTakeDamageInfo &info )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
@ -834,7 +834,11 @@ ConVarRef suitcharger( "sk_suitcharger" );
|
||||
// If the inflictor is the killer, then it must be their current weapon doing the damage
|
||||
if ( pScorer->GetActiveWeapon() )
|
||||
{
|
||||
#ifdef HL1MP_DLL
|
||||
killer_weapon_name = pScorer->GetActiveWeapon()->GetClassname();
|
||||
#else
|
||||
killer_weapon_name = pScorer->GetActiveWeapon()->GetDeathNoticeName();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -870,7 +874,9 @@ ConVarRef suitcharger( "sk_suitcharger" );
|
||||
event->SetInt("attacker", killer_ID );
|
||||
event->SetInt("customkill", info.GetDamageCustom() );
|
||||
event->SetInt("priority", 7 ); // HLTV event priority, not transmitted
|
||||
|
||||
#ifdef HL1MP_DLL
|
||||
event->SetString("weapon", killer_weapon_name );
|
||||
#endif
|
||||
gameeventmanager->FireEvent( event );
|
||||
}
|
||||
|
||||
@ -1748,6 +1754,37 @@ ConVarRef suitcharger( "sk_suitcharger" );
|
||||
}
|
||||
}
|
||||
|
||||
void CMultiplayRules::RandomPlayersSpeakConceptIfAllowed( int iConcept, int iNumRandomPlayer /*= 1*/, int iTeam /*= TEAM_UNASSIGNED*/, const char *modifiers /*= NULL*/ )
|
||||
{
|
||||
CUtlVector< CBaseMultiplayerPlayer* > speakCandidates;
|
||||
|
||||
CBaseMultiplayerPlayer *pPlayer;
|
||||
for ( int i = 1; i <= gpGlobals->maxClients; i++ )
|
||||
{
|
||||
pPlayer = ToBaseMultiplayerPlayer( UTIL_PlayerByIndex( i ) );
|
||||
|
||||
if ( !pPlayer )
|
||||
continue;
|
||||
|
||||
if ( iTeam != TEAM_UNASSIGNED )
|
||||
{
|
||||
if ( pPlayer->GetTeamNumber() != iTeam )
|
||||
continue;
|
||||
}
|
||||
|
||||
speakCandidates.AddToTail( pPlayer );
|
||||
}
|
||||
|
||||
int iSpeaker = iNumRandomPlayer;
|
||||
while ( iSpeaker > 0 && speakCandidates.Count() > 0 )
|
||||
{
|
||||
int iRandomSpeaker = RandomInt( 0, speakCandidates.Count() - 1 );
|
||||
speakCandidates[ iRandomSpeaker ]->SpeakConceptIfAllowed( iConcept, modifiers );
|
||||
speakCandidates.FastRemove( iRandomSpeaker );
|
||||
iSpeaker--;
|
||||
}
|
||||
}
|
||||
|
||||
void CMultiplayRules::ClientSettingsChanged( CBasePlayer *pPlayer )
|
||||
{
|
||||
// NVNT see if this user is still or has began using a haptic device
|
||||
|
@ -136,7 +136,7 @@ public:
|
||||
|
||||
// Client damage rules
|
||||
virtual float FlPlayerFallDamage( CBasePlayer *pPlayer );
|
||||
virtual bool FPlayerCanTakeDamage( CBasePlayer *pPlayer, CBaseEntity *pAttacker );
|
||||
virtual bool FPlayerCanTakeDamage( CBasePlayer *pPlayer, CBaseEntity *pAttacker, const CTakeDamageInfo &info );
|
||||
virtual bool AllowDamage( CBaseEntity *pVictim, const CTakeDamageInfo &info );
|
||||
|
||||
// Client spawn/respawn control
|
||||
@ -215,6 +215,7 @@ public:
|
||||
void IncrementMapCycleIndex();
|
||||
|
||||
void HaveAllPlayersSpeakConceptIfAllowed( int iConcept, int iTeam = TEAM_UNASSIGNED, const char *modifiers = NULL );
|
||||
void RandomPlayersSpeakConceptIfAllowed( int iConcept, int iNumRandomPlayer = 1, int iTeam = TEAM_UNASSIGNED, const char *modifiers = NULL );
|
||||
|
||||
virtual void GetTaggedConVarList( KeyValues *pCvarTagList );
|
||||
|
||||
|
@ -557,6 +557,14 @@ void CParticleProperty::UpdateControlPoint( ParticleEffectList_t *pEffect, int i
|
||||
if ( bUseHeadOrigin > 0 )
|
||||
{
|
||||
int iBone = Studio_BoneIndexByName( pAnimating->GetModelPtr(), "bip_head" );
|
||||
if ( iBone < 0 )
|
||||
{
|
||||
iBone = Studio_BoneIndexByName( pAnimating->GetModelPtr(), "prp_helmet" );
|
||||
if ( iBone < 0 )
|
||||
{
|
||||
iBone = Studio_BoneIndexByName( pAnimating->GetModelPtr(), "prp_hat" );
|
||||
}
|
||||
}
|
||||
if ( iBone >= 0 )
|
||||
{
|
||||
bUsingHeadOrigin = true;
|
||||
@ -587,18 +595,23 @@ void CParticleProperty::UpdateControlPoint( ParticleEffectList_t *pEffect, int i
|
||||
|
||||
if ( !pAnimating->GetAttachment( pPoint->iAttachmentPoint, attachmentToWorld ) )
|
||||
{
|
||||
Warning( "Cannot update control point %d for effect '%s'.\n", pPoint->iAttachmentPoint, pEffect->pParticleEffect->GetEffectName() );
|
||||
attachmentToWorld = pAnimating->RenderableToWorldTransform();
|
||||
// try C_BaseAnimating if attach point is not on the weapon
|
||||
if ( !pAnimating->C_BaseAnimating::GetAttachment( pPoint->iAttachmentPoint, attachmentToWorld ) )
|
||||
{
|
||||
Warning( "Cannot update control point %d for effect '%s'.\n", pPoint->iAttachmentPoint, pEffect->pParticleEffect->GetEffectName() );
|
||||
attachmentToWorld = pAnimating->RenderableToWorldTransform();
|
||||
}
|
||||
}
|
||||
|
||||
MatrixVectors( attachmentToWorld, &vecForward, &vecRight, &vecUp );
|
||||
MatrixPosition( attachmentToWorld, vecOrigin );
|
||||
VMatrix vMat(attachmentToWorld);
|
||||
MatrixTranslate( vMat, pPoint->vecOriginOffset );
|
||||
MatrixVectors( vMat.As3x4(), &vecForward, &vecRight, &vecUp );
|
||||
MatrixPosition( vMat.As3x4(), vecOrigin );
|
||||
|
||||
if ( pEffect->pParticleEffect->m_pDef->IsViewModelEffect() )
|
||||
{
|
||||
FormatViewModelAttachment( vecOrigin, true );
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -1323,7 +1323,7 @@ CBaseEntity *CreateGibsFromList( CUtlVector<breakmodel_t> &list, int modelindex,
|
||||
if ( !pCollide )
|
||||
return NULL;
|
||||
|
||||
int nSkin = 0;
|
||||
int nSkin = params.nDefaultSkin;
|
||||
CBaseEntity *pOwnerEntity = pEntity;
|
||||
CBaseAnimating *pOwnerAnim = NULL;
|
||||
if ( pPhysics )
|
||||
|
@ -227,6 +227,7 @@ struct breakablepropparams_t
|
||||
impactEnergyScale = 0;
|
||||
defBurstScale = 0;
|
||||
defCollisionGroup = COLLISION_GROUP_NONE;
|
||||
nDefaultSkin = 0;
|
||||
}
|
||||
|
||||
const Vector &origin;
|
||||
@ -236,6 +237,7 @@ struct breakablepropparams_t
|
||||
float impactEnergyScale;
|
||||
float defBurstScale;
|
||||
int defCollisionGroup;
|
||||
int nDefaultSkin;
|
||||
};
|
||||
|
||||
const char *GetMassEquivalent(float flMass);
|
||||
|
@ -151,8 +151,20 @@ typedef enum
|
||||
VOTE_FAILED_MAP_NOT_VALID,
|
||||
VOTE_FAILED_CANNOT_KICK_FOR_TIME,
|
||||
VOTE_FAILED_CANNOT_KICK_DURING_ROUND,
|
||||
|
||||
// TF-specific?
|
||||
VOTE_FAILED_MODIFICATION_ALREADY_ACTIVE,
|
||||
} vote_create_failed_t;
|
||||
|
||||
enum
|
||||
{
|
||||
#ifdef STAGING_ONLY
|
||||
SERVER_MODIFICATION_ITEM_DURATION_IN_MINUTES = 2
|
||||
#else
|
||||
SERVER_MODIFICATION_ITEM_DURATION_IN_MINUTES = 120
|
||||
#endif
|
||||
};
|
||||
|
||||
#define MAX_VOTE_DETAILS_LENGTH 64
|
||||
#define INVALID_ISSUE -1
|
||||
#define MAX_VOTE_OPTIONS 5
|
||||
|
@ -58,9 +58,9 @@ void CTakeDamageInfo::Init( CBaseEntity *pInflictor, CBaseEntity *pAttacker, CBa
|
||||
m_vecReportedPosition = reportedPosition;
|
||||
m_iAmmoType = -1;
|
||||
m_iDamagedOtherPlayers = 0;
|
||||
|
||||
m_iPlayerPenetrationCount = 0;
|
||||
m_flDamageBonus = 0.f;
|
||||
m_bForceFriendlyFire = false;
|
||||
}
|
||||
|
||||
CTakeDamageInfo::CTakeDamageInfo()
|
||||
|
@ -77,6 +77,8 @@ public:
|
||||
void SetDamageCustom( int iDamageCustom );
|
||||
int GetDamageStats( void ) const;
|
||||
void SetDamageStats( int iDamageStats );
|
||||
void SetForceFriendlyFire( bool bValue ) { m_bForceFriendlyFire = bValue; }
|
||||
bool IsForceFriendlyFire( void ) const { return m_bForceFriendlyFire; }
|
||||
|
||||
int GetAmmoType() const;
|
||||
void SetAmmoType( int iAmmoType );
|
||||
@ -123,6 +125,7 @@ protected:
|
||||
int m_iDamagedOtherPlayers;
|
||||
int m_iPlayerPenetrationCount;
|
||||
float m_flDamageBonus; // Anything that increases damage (crit) - store the delta
|
||||
bool m_bForceFriendlyFire; // Ideally this would be a dmg type, but we can't add more
|
||||
|
||||
DECLARE_SIMPLE_DATADESC();
|
||||
};
|
||||
|
@ -352,9 +352,9 @@ bool CTeamplayRules::IsTeamplay( void )
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CTeamplayRules::FPlayerCanTakeDamage( CBasePlayer *pPlayer, CBaseEntity *pAttacker )
|
||||
bool CTeamplayRules::FPlayerCanTakeDamage( CBasePlayer *pPlayer, CBaseEntity *pAttacker, const CTakeDamageInfo &info )
|
||||
{
|
||||
if ( pAttacker && PlayerRelationship( pPlayer, pAttacker ) == GR_TEAMMATE )
|
||||
if ( pAttacker && PlayerRelationship( pPlayer, pAttacker ) == GR_TEAMMATE && !info.IsForceFriendlyFire() )
|
||||
{
|
||||
// my teammate hit me.
|
||||
if ( (friendlyfire.GetInt() == 0) && (pAttacker != pPlayer) )
|
||||
@ -364,7 +364,7 @@ bool CTeamplayRules::FPlayerCanTakeDamage( CBasePlayer *pPlayer, CBaseEntity *pA
|
||||
}
|
||||
}
|
||||
|
||||
return BaseClass::FPlayerCanTakeDamage( pPlayer, pAttacker );
|
||||
return BaseClass::FPlayerCanTakeDamage( pPlayer, pAttacker, info );
|
||||
}
|
||||
|
||||
//=========================================================
|
||||
|
@ -67,7 +67,7 @@ public:
|
||||
virtual bool ClientCommand( CBaseEntity *pEdict, const CCommand &args );
|
||||
virtual void ClientSettingsChanged( CBasePlayer *pPlayer );
|
||||
virtual bool IsTeamplay( void );
|
||||
virtual bool FPlayerCanTakeDamage( CBasePlayer *pPlayer, CBaseEntity *pAttacker );
|
||||
virtual bool FPlayerCanTakeDamage( CBasePlayer *pPlayer, CBaseEntity *pAttacker, const CTakeDamageInfo &info );
|
||||
virtual int PlayerRelationship( CBaseEntity *pPlayer, CBaseEntity *pTarget );
|
||||
virtual bool PlayerCanHearChat( CBasePlayer *pListener, CBasePlayer *pSpeaker );
|
||||
virtual const char *GetTeamID( CBaseEntity *pEntity );
|
||||
|
@ -636,6 +636,12 @@ const char *CTeamRoundTimer::GetTimeWarningSound( int nWarning )
|
||||
//-----------------------------------------------------------------------------
|
||||
void CTeamRoundTimer::SendTimeWarning( int nWarning )
|
||||
{
|
||||
#if defined( TF_CLIENT_DLL )
|
||||
// don't play any time warnings for Helltower
|
||||
if ( TFGameRules() && TFGameRules()->IsHalloweenScenario( CTFGameRules::HALLOWEEN_SCENARIO_HIGHTOWER ) )
|
||||
return;
|
||||
#endif
|
||||
|
||||
// don't play sounds if the level designer has turned them off or if it's during the WaitingForPlayers time
|
||||
if ( !m_bTimerPaused && m_bAutoCountdown && !TeamplayRoundBasedRules()->IsInWaitingForPlayers() )
|
||||
{
|
||||
|
@ -1267,7 +1267,7 @@ CGameRulesRoundStateInfo* CTeamplayRoundBasedRules::State_LookupInfo( gamerules_
|
||||
{ GR_STATE_INIT, "GR_STATE_INIT", &CTeamplayRoundBasedRules::State_Enter_INIT, NULL, &CTeamplayRoundBasedRules::State_Think_INIT },
|
||||
{ GR_STATE_PREGAME, "GR_STATE_PREGAME", &CTeamplayRoundBasedRules::State_Enter_PREGAME, NULL, &CTeamplayRoundBasedRules::State_Think_PREGAME },
|
||||
{ GR_STATE_STARTGAME, "GR_STATE_STARTGAME", &CTeamplayRoundBasedRules::State_Enter_STARTGAME, NULL, &CTeamplayRoundBasedRules::State_Think_STARTGAME },
|
||||
{ GR_STATE_PREROUND, "GR_STATE_PREROUND", &CTeamplayRoundBasedRules::State_Enter_PREROUND, NULL, &CTeamplayRoundBasedRules::State_Think_PREROUND },
|
||||
{ GR_STATE_PREROUND, "GR_STATE_PREROUND", &CTeamplayRoundBasedRules::State_Enter_PREROUND, &CTeamplayRoundBasedRules::State_Leave_PREROUND, &CTeamplayRoundBasedRules::State_Think_PREROUND },
|
||||
{ GR_STATE_RND_RUNNING, "GR_STATE_RND_RUNNING", &CTeamplayRoundBasedRules::State_Enter_RND_RUNNING, NULL, &CTeamplayRoundBasedRules::State_Think_RND_RUNNING },
|
||||
{ GR_STATE_TEAM_WIN, "GR_STATE_TEAM_WIN", &CTeamplayRoundBasedRules::State_Enter_TEAM_WIN, NULL, &CTeamplayRoundBasedRules::State_Think_TEAM_WIN },
|
||||
{ GR_STATE_RESTART, "GR_STATE_RESTART", &CTeamplayRoundBasedRules::State_Enter_RESTART, NULL, &CTeamplayRoundBasedRules::State_Think_RESTART },
|
||||
@ -1424,6 +1424,14 @@ void CTeamplayRoundBasedRules::State_Enter_PREROUND( void )
|
||||
StopWatchModeThink();
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
void CTeamplayRoundBasedRules::State_Leave_PREROUND( void )
|
||||
{
|
||||
PreRound_End();
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
@ -2159,6 +2167,7 @@ void CTeamplayRoundBasedRules::SetWinningTeam( int team, int iWinReason, bool bF
|
||||
if ( event )
|
||||
{
|
||||
event->SetInt( "team", team );
|
||||
event->SetInt( "winreason", iWinReason );
|
||||
event->SetBool( "full_round", bForceMapReset );
|
||||
event->SetFloat( "round_time", gpGlobals->curtime - m_flRoundStartTime );
|
||||
event->SetBool( "was_sudden_death", bWasSuddenDeath );
|
||||
@ -3062,11 +3071,11 @@ void CTeamplayRoundBasedRules::PlayWinSong( int team )
|
||||
{
|
||||
if ( i == team )
|
||||
{
|
||||
BroadcastSound( i, "Game.YourTeamWon" );
|
||||
BroadcastSound( i, WinSongName( i ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
const char *pchLoseSong = LoseSongName();
|
||||
const char *pchLoseSong = LoseSongName( i );
|
||||
if ( pchLoseSong )
|
||||
{
|
||||
BroadcastSound( i, pchLoseSong );
|
||||
@ -3094,11 +3103,11 @@ void CTeamplayRoundBasedRules::PlaySuddenDeathSong( void )
|
||||
//-----------------------------------------------------------------------------
|
||||
void CTeamplayRoundBasedRules::PlayStalemateSong( void )
|
||||
{
|
||||
BroadcastSound( TEAM_UNASSIGNED, "Game.Stalemate" );
|
||||
BroadcastSound( TEAM_UNASSIGNED, GetStalemateSong( TEAM_UNASSIGNED ) );
|
||||
|
||||
for ( int i = FIRST_GAME_TEAM; i < GetNumberOfTeams(); i++ )
|
||||
{
|
||||
BroadcastSound( i, "Game.Stalemate" );
|
||||
BroadcastSound( i, GetStalemateSong( i ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -297,6 +297,8 @@ public:
|
||||
virtual void BetweenRounds_End( void ) { return; }
|
||||
virtual void BetweenRounds_Think( void ) { return; }
|
||||
|
||||
virtual void PreRound_End( void ) { return; }
|
||||
|
||||
bool PrevRoundWasWaitingForPlayers() { return m_bPrevRoundWasWaitingForPlayers; }
|
||||
|
||||
virtual bool ShouldScorePerRound( void ){ return true; }
|
||||
@ -415,6 +417,7 @@ protected:
|
||||
void State_Think_STARTGAME( void );
|
||||
|
||||
void State_Enter_PREROUND( void );
|
||||
void State_Leave_PREROUND( void );
|
||||
void State_Think_PREROUND( void );
|
||||
|
||||
void State_Enter_RND_RUNNING( void );
|
||||
@ -456,7 +459,9 @@ protected:
|
||||
void PlayStalemateSong( void );
|
||||
void PlaySuddenDeathSong( void );
|
||||
|
||||
virtual const char* LoseSongName( void ) { return "Game.YourTeamLost"; }
|
||||
virtual const char* GetStalemateSong( int nTeam ) { return "Game.Stalemate"; }
|
||||
virtual const char* WinSongName( int nTeam ) { return "Game.YourTeamWon"; }
|
||||
virtual const char* LoseSongName( int nTeam ) { return "Game.YourTeamLost"; }
|
||||
|
||||
virtual void RespawnTeam( int iTeam ) { RespawnPlayers( false, true, iTeam ); }
|
||||
|
||||
|
@ -54,11 +54,9 @@ bool CVoiceBanMgr::Init(const char *pGameDir)
|
||||
{
|
||||
int version;
|
||||
filesystem->Read(&version, sizeof(version), fh);
|
||||
if(version == BANMGR_FILEVERSION)
|
||||
if(version == BANMGR_FILEVERSION && filesystem->Size(fh) > 4 )
|
||||
{
|
||||
filesystem->Seek(fh, 0, FILESYSTEM_SEEK_TAIL);
|
||||
int nIDs = (filesystem->Tell(fh) - sizeof(version)) / SIGNED_GUID_LEN;
|
||||
filesystem->Seek(fh, sizeof(version), FILESYSTEM_SEEK_CURRENT);
|
||||
int nIDs = ( filesystem->Size( fh ) - sizeof(version)) / SIGNED_GUID_LEN;
|
||||
|
||||
for(int i=0; i < nIDs; i++)
|
||||
{
|
||||
|
Reference in New Issue
Block a user