summaryrefslogtreecommitdiff
path: root/game/server/dod/dod_hltvdirector.cpp
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/server/dod/dod_hltvdirector.cpp
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'game/server/dod/dod_hltvdirector.cpp')
-rw-r--r--game/server/dod/dod_hltvdirector.cpp140
1 files changed, 140 insertions, 0 deletions
diff --git a/game/server/dod/dod_hltvdirector.cpp b/game/server/dod/dod_hltvdirector.cpp
new file mode 100644
index 0000000..20a366d
--- /dev/null
+++ b/game/server/dod/dod_hltvdirector.cpp
@@ -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;
+} \ No newline at end of file