mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-08 01:39:36 +00:00
add hl1,portal,dod source code
This commit is contained in:
@@ -0,0 +1,140 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//
|
||||
//=============================================================================//
|
||||
|
||||
#include "cbase.h"
|
||||
#include "hltvdirector.h"
|
||||
|
||||
class CDODHLTVDirector : public CHLTVDirector
|
||||
{
|
||||
public:
|
||||
DECLARE_CLASS( CDODHLTVDirector, CHLTVDirector );
|
||||
|
||||
const char** GetModEvents();
|
||||
void SetHLTVServer( IHLTVServer *hltv );
|
||||
void CreateShotFromEvent( CHLTVGameEvent *event );
|
||||
};
|
||||
|
||||
void CDODHLTVDirector::SetHLTVServer( IHLTVServer *hltv )
|
||||
{
|
||||
BaseClass::SetHLTVServer( hltv );
|
||||
|
||||
if ( m_pHLTVServer )
|
||||
{
|
||||
// mod specific events the director uses to find interesting shots
|
||||
ListenForGameEvent( "dod_point_captured" );
|
||||
ListenForGameEvent( "dod_capture_blocked" );
|
||||
}
|
||||
}
|
||||
|
||||
void CDODHLTVDirector::CreateShotFromEvent( CHLTVGameEvent *event )
|
||||
{
|
||||
// show event at least for 2 more seconds after it occured
|
||||
const char *name = event->m_Event->GetName();
|
||||
IGameEvent *shot = NULL;
|
||||
|
||||
if ( !Q_strcmp( "dod_point_captured", name ) ||
|
||||
!Q_strcmp( "dod_capture_blocked", name ) )
|
||||
{
|
||||
// try to find a capper or blocker
|
||||
const char *text = event->m_Event->GetString("blocker");
|
||||
int playerIndex = text[0];
|
||||
|
||||
if ( playerIndex < 1 )
|
||||
{
|
||||
// maybe its a capper ?
|
||||
text = event->m_Event->GetString("cappers");
|
||||
playerIndex = text[0];
|
||||
}
|
||||
|
||||
// if we found one, show him
|
||||
if ( playerIndex > 0 )
|
||||
{
|
||||
// shot player as primary, hostage as secondary target
|
||||
shot = gameeventmanager->CreateEvent( "hltv_chase", true );
|
||||
shot->SetInt( "target1", playerIndex );
|
||||
shot->SetInt( "target2", 0 );
|
||||
shot->SetFloat( "distance", 96.0f );
|
||||
shot->SetInt( "theta", 0 );
|
||||
shot->SetInt( "phi", 20 );
|
||||
|
||||
// shot 2 seconds after event
|
||||
m_nNextShotTick = MIN( m_nNextShotTick, (event->m_Tick+TIME_TO_TICKS(2.0)) );
|
||||
m_iPVSEntity = playerIndex;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// let baseclass create a shot
|
||||
BaseClass::CreateShotFromEvent( event );
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if ( shot )
|
||||
{
|
||||
m_pHLTVServer->BroadcastEvent( shot );
|
||||
gameeventmanager->FreeEvent( shot );
|
||||
DevMsg("DrcCmd: %s\n", name );
|
||||
}
|
||||
}
|
||||
|
||||
const char** CDODHLTVDirector::GetModEvents()
|
||||
{
|
||||
// game events relayed to spectator clients
|
||||
static const char *s_modevents[] =
|
||||
{
|
||||
"hltv_status",
|
||||
"hltv_chat",
|
||||
"player_connect",
|
||||
"player_disconnect",
|
||||
"player_team",
|
||||
"player_info",
|
||||
"server_cvar",
|
||||
"player_death",
|
||||
"player_chat",
|
||||
"round_start",
|
||||
"round_end",
|
||||
// additional DoD:S events:
|
||||
"player_changeclass",
|
||||
"dod_warmup_begins",
|
||||
"dod_warmup_ends",
|
||||
"dod_round_start",
|
||||
"dod_restart_round",
|
||||
"dod_ready_restart",
|
||||
"dod_allies_ready",
|
||||
"dod_axis_ready",
|
||||
"dod_round_restart_seconds",
|
||||
"dod_team_scores",
|
||||
"dod_round_win",
|
||||
"dod_tick_points",
|
||||
"dod_game_over",
|
||||
"dod_broadcast_audio",
|
||||
"dod_point_captured",
|
||||
"dod_capture_blocked",
|
||||
"dod_top_cappers",
|
||||
"dod_timer_flash",
|
||||
"dod_bomb_planted",
|
||||
NULL
|
||||
};
|
||||
|
||||
return s_modevents;
|
||||
}
|
||||
|
||||
static CDODHLTVDirector s_HLTVDirector; // singleton
|
||||
|
||||
EXPOSE_SINGLE_INTERFACE_GLOBALVAR(CHLTVDirector, IHLTVDirector, INTERFACEVERSION_HLTVDIRECTOR, s_HLTVDirector );
|
||||
|
||||
CHLTVDirector* HLTVDirector()
|
||||
{
|
||||
return &s_HLTVDirector;
|
||||
}
|
||||
|
||||
IGameSystem* HLTVDirectorSystem()
|
||||
{
|
||||
return &s_HLTVDirector;
|
||||
}
|
||||
Reference in New Issue
Block a user