Skip to content

Commit 6410c92

Browse files
committed
Merge branch 'discord_game_sdk' of https://github.com/bachingo/TF2Vintage into bachingo-discord_game_sdk
2 parents 8dfec7a + 75eb8a8 commit 6410c92

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

60 files changed

+11093
-179
lines changed

game/tf2vintage/bin/discord-rpc.dll

-301 KB
Binary file not shown.

src/game/client/cdll_client_int.cpp

+9-4
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@
141141
#include "haptics/haptic_msgs.h"
142142

143143
// Discord RPC
144-
#include "discord_register.h"
144+
#include "discord.h"
145145
ConVar cl_discord_appid( "cl_discord_appid", "451227888230858752", FCVAR_DEVELOPMENTONLY | FCVAR_PROTECTED, "This is for your Client ID for Discord Applications and is unique per sourcemod." );
146146

147147
#ifdef TF_VINTAGE_CLIENT
@@ -1321,9 +1321,14 @@ int CHLClient::Init( CreateInterfaceFn appSystemFactory, CreateInterfaceFn physi
13211321
// Discord RPC
13221322
if (!g_bTextMode)
13231323
{
1324-
char command[256];
1325-
Q_snprintf( command, sizeof( command ), "%s -game \"%s\" -novid -high -steam\n", CommandLine()->GetParm( 0 ), CommandLine()->ParmValue( "-game" ) );
1326-
Discord_Register( cl_discord_appid.GetString(), command );
1324+
discord::Core *core{};
1325+
auto result = discord::Core::Create( V_atoi64( cl_discord_appid.GetString() ), DiscordCreateFlags_NoRequireDiscord, &core );
1326+
if ( result != discord::Result::Ok )
1327+
return true;
1328+
1329+
char command[512];
1330+
V_snprintf( command, sizeof( command ), "%s -game \"%s\" -novid -steam", CommandLine()->GetParm( 0 ), CommandLine()->ParmValue( "-game" ) );
1331+
core->ActivityManager().RegisterCommand( command );
13271332
}
13281333

13291334
return true;

src/game/client/client_base.vpc

+36-2
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ $Configuration
5151

5252
$Compiler
5353
{
54-
$AdditionalIncludeDirectories ".\;$BASE;$SRCDIR\vgui2\include;$SRCDIR\vgui2\controls;$SRCDIR\game\shared;.\game_controls;$SRCDIR\thirdparty\sixensesdk\include"
54+
$AdditionalIncludeDirectories ".\;$BASE;$SRCDIR\vgui2\include;$SRCDIR\vgui2\controls;$SRCDIR\game\shared;.\game_controls;$SRCDIR\thirdparty\sixensesdk\include;$SRCDIR\thirdparty\discord_game_sdk\cpp"
5555
$PreprocessorDefinitions "$BASE;NO_STRING_T;CLIENT_DLL;VECTOR;VERSION_SAFE_STEAM_API_INTERFACES;PROTECTED_THINGS_ENABLE;strncpy=use_Q_strncpy_instead;_snprintf=use_Q_snprintf_instead"
5656
$PreprocessorDefinitions "$BASE;fopen=dont_use_fopen" [$WIN32]
5757
$PreprocessorDefinitions "$BASE;USE_WEBM_FOR_REPLAY;" [$LINUXALL]
@@ -661,6 +661,40 @@ $Project
661661
$File "game_controls\IconPanel.cpp"
662662
}
663663

664+
$Folder "Discord RPC"
665+
{
666+
$File "$SRCDIR\thirdparty\discord_game_sdk\cpp\achievement_manager.cpp"
667+
$File "$SRCDIR\thirdparty\discord_game_sdk\cpp\achievement_manager.h"
668+
$File "$SRCDIR\thirdparty\discord_game_sdk\cpp\activity_manager.cpp"
669+
$File "$SRCDIR\thirdparty\discord_game_sdk\cpp\activity_manager.h"
670+
$File "$SRCDIR\thirdparty\discord_game_sdk\cpp\application_manager.cpp"
671+
$File "$SRCDIR\thirdparty\discord_game_sdk\cpp\application_manager.h"
672+
$File "$SRCDIR\thirdparty\discord_game_sdk\cpp\core.cpp"
673+
$File "$SRCDIR\thirdparty\discord_game_sdk\cpp\core.h"
674+
$File "$SRCDIR\thirdparty\discord_game_sdk\cpp\discord.h"
675+
$File "$SRCDIR\thirdparty\discord_game_sdk\cpp\event.h"
676+
$File "$SRCDIR\thirdparty\discord_game_sdk\cpp\ffi.h"
677+
$File "$SRCDIR\thirdparty\discord_game_sdk\cpp\image_manager.cpp"
678+
$File "$SRCDIR\thirdparty\discord_game_sdk\cpp\image_manager.h"
679+
$File "$SRCDIR\thirdparty\discord_game_sdk\cpp\lobby_manager.cpp"
680+
$File "$SRCDIR\thirdparty\discord_game_sdk\cpp\lobby_manager.h"
681+
$File "$SRCDIR\thirdparty\discord_game_sdk\cpp\network_manager.cpp"
682+
$File "$SRCDIR\thirdparty\discord_game_sdk\cpp\network_manager.h"
683+
$File "$SRCDIR\thirdparty\discord_game_sdk\cpp\overlay_manager.cpp"
684+
$File "$SRCDIR\thirdparty\discord_game_sdk\cpp\overlay_manager.h"
685+
$File "$SRCDIR\thirdparty\discord_game_sdk\cpp\relationship_manager.cpp"
686+
$File "$SRCDIR\thirdparty\discord_game_sdk\cpp\relationship_manager.h"
687+
$File "$SRCDIR\thirdparty\discord_game_sdk\cpp\storage_manager.cpp"
688+
$File "$SRCDIR\thirdparty\discord_game_sdk\cpp\storage_manager.h"
689+
$File "$SRCDIR\thirdparty\discord_game_sdk\cpp\store_manager.cpp"
690+
$File "$SRCDIR\thirdparty\discord_game_sdk\cpp\store_manager.h"
691+
$File "$SRCDIR\thirdparty\discord_game_sdk\cpp\types.cpp"
692+
$File "$SRCDIR\thirdparty\discord_game_sdk\cpp\types.h"
693+
$File "$SRCDIR\thirdparty\discord_game_sdk\cpp\user_manager.cpp"
694+
$File "$SRCDIR\thirdparty\discord_game_sdk\cpp\user_manager.h"
695+
$File "$SRCDIR\thirdparty\discord_game_sdk\cpp\voice_manager.cpp"
696+
$File "$SRCDIR\thirdparty\discord_game_sdk\cpp\voice_manager.h"
697+
}
664698
}
665699

666700
$Folder "MP3" [$WIN32||$POSIX]
@@ -1256,7 +1290,7 @@ $Project
12561290
$Lib vgui_controls
12571291
$Lib vtf
12581292
$ImpLib steam_api
1259-
$Lib discord-rpc
1293+
$Lib "discord_game_sdk.dll"
12601294

12611295
$Libexternal $LIBCOMMON/libcrypto [$OSXALL]
12621296
$Libexternal "$SRCDIR\lib\common\$(CRYPTOPPDIR)\libcrypto" [$LINUXALL]

src/game/client/tf/tf_presence.cpp

+50-46
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@
2121
#include "steam/isteamfriends.h"
2222
#include "steam/steam_api.h"
2323
#include "tier0/icommandline.h"
24-
#include "discord_rpc.h"
25-
#include "discord_register.h"
24+
#include "discord.h"
2625
#include <time.h>
2726
#include <functional>
2827

@@ -575,11 +574,10 @@ void CTFPresence::UploadStats()
575574
#endif
576575
}
577576

578-
#define DECL_DISCORD_HANDLER(obj, name, handler) obj.##name = &rpc->##handler
579577

580-
DiscordRichPresence CTFDiscordPresence::m_sPresence;
581-
RealTimeCountdownTimer CTFDiscordPresence::m_updateThrottle;
582-
int64 CTFDiscordPresence::m_iCreationTimestamp;
578+
discord::Core *CTFDiscordPresence::m_pCore{};
579+
discord::Activity CTFDiscordPresence::m_Activity{};
580+
discord::User CTFDiscordPresence::m_CurrentUser{};
583581

584582
CTFDiscordPresence::CTFDiscordPresence()
585583
: BaseClass( "TFDiscordPresence" )
@@ -614,8 +612,8 @@ void CTFDiscordPresence::FireGameEvent( IGameEvent *event )
614612
if ( C_BasePlayer::GetLocalPlayer()->GetSteamID( &steamID ) )
615613
Q_snprintf( m_szSteamID, 65, "%d", steamID.ConvertToUint64() );
616614

617-
m_sPresence.joinSecret = m_szServerInfo;
618-
m_sPresence.partyId = m_szSteamID;
615+
m_Activity.GetSecrets().SetJoin( m_szServerInfo );
616+
m_Activity.GetSecrets().SetMatch( m_szSteamID );
619617
}
620618

621619
if ( !engine->IsConnected() )
@@ -626,7 +624,7 @@ void CTFDiscordPresence::FireGameEvent( IGameEvent *event )
626624
if ( !TFPlayerResource() )
627625
return;
628626

629-
int maxPlayers = gpGlobals->maxClients;
627+
const int maxPlayers = gpGlobals->maxClients;
630628
int curPlayers = 0;
631629

632630
for ( int i = 0; i < maxPlayers; ++i )
@@ -635,8 +633,8 @@ void CTFDiscordPresence::FireGameEvent( IGameEvent *event )
635633
curPlayers++;
636634
}
637635

638-
m_sPresence.partySize = curPlayers;
639-
m_sPresence.partyMax = maxPlayers;
636+
m_Activity.GetParty().GetSize().SetCurrentSize( curPlayers );
637+
m_Activity.GetParty().GetSize().SetMaxSize( maxPlayers );
640638
}
641639
else if ( name == "player_death" )
642640
{
@@ -667,20 +665,18 @@ void CTFDiscordPresence::FireGameEvent( IGameEvent *event )
667665
//-----------------------------------------------------------------------------
668666
bool CTFDiscordPresence::Init( void )
669667
{
670-
Q_memset( &m_sPresence, 0, sizeof( m_sPresence ) );
671-
672-
DiscordEventHandlers handlers{};
673-
DECL_DISCORD_HANDLER( handlers, ready, OnReady );
674-
DECL_DISCORD_HANDLER( handlers, disconnected, OnDisconnected );
675-
DECL_DISCORD_HANDLER( handlers, errored, OnError );
676-
DECL_DISCORD_HANDLER( handlers, joinGame, OnJoinedGame );
677-
DECL_DISCORD_HANDLER( handlers, spectateGame, OnSpectateGame );
678-
DECL_DISCORD_HANDLER( handlers, joinRequest, OnJoinRequested );
668+
Q_memset( &m_Activity, 0, sizeof( discord::Activity ) );
669+
auto result = discord::Core::Create( V_atoi64( cl_discord_appid.GetString() ), DiscordCreateFlags_NoRequireDiscord, &m_pCore );
670+
if ( result != discord::Result::Ok )
671+
return false;
679672

680673
char command[512];
681-
V_snprintf( command, sizeof( command ), "%s -game \"%s\" -novid -steam\n", CommandLine()->GetParm( 0 ), CommandLine()->ParmValue( "-game" ) );
682-
Discord_Register( cl_discord_appid.GetString(), command );
683-
Discord_Initialize( cl_discord_appid.GetString(), &handlers, false, CFmtStr( "%d", engine->GetAppID() ) );
674+
V_snprintf( command, sizeof( command ), "%s -game \"%s\" -novid -steam", CommandLine()->GetParm( 0 ), CommandLine()->ParmValue( "-game" ) );
675+
m_pCore->ActivityManager().RegisterCommand( command );
676+
m_pCore->ActivityManager().RegisterSteam( engine->GetAppID() );
677+
678+
Q_memset( &m_CurrentUser, 0, sizeof( discord::User ) );
679+
m_pCore->UserManager().GetCurrentUser( &m_CurrentUser );
684680

685681
ListenForGameEvent( "localplayer_changeteam" );
686682
ListenForGameEvent( "localplayer_changeclass" );
@@ -704,7 +700,9 @@ void CTFDiscordPresence::Shutdown( void )
704700
Assert( rpc == this );
705701
rpc = NULL;
706702

707-
Discord_Shutdown();
703+
Q_memset( &m_Activity, 0, sizeof( discord::Activity ) );
704+
Q_memset( &m_CurrentUser, 0, sizeof( discord::User ) );
705+
if ( m_pCore ) delete m_pCore;
708706

709707
if ( steamapicontext->SteamFriends() )
710708
steamapicontext->SteamFriends()->ClearRichPresence();
@@ -721,9 +719,9 @@ void CTFDiscordPresence::Update( float frametime )
721719
UpdatePresence();
722720

723721
if ( gpGlobals->tickcount % 2 )
724-
Discord_RunCallbacks();
722+
m_pCore->RunCallbacks();
725723
}
726-
724+
/*
727725
//-----------------------------------------------------------------------------
728726
// Purpose:
729727
//-----------------------------------------------------------------------------
@@ -790,13 +788,13 @@ void CTFDiscordPresence::OnJoinRequested( const DiscordUser *joinRequest )
790788
ConColorMsg( Color( 114, 137, 218, 255 ), "[Rich Presence] Join Request Accepted\n" );
791789
Discord_Respond( joinRequest->userId, DISCORD_REPLY_YES );
792790
}
793-
791+
*/
794792
//-----------------------------------------------------------------------------
795793
// Purpose: Map initialization
796794
//-----------------------------------------------------------------------------
797795
void CTFDiscordPresence::LevelInitPostEntity( void )
798796
{
799-
Q_memset( &m_sPresence, 0, sizeof( m_sPresence ) );
797+
Q_memset( &m_Activity, 0, sizeof( discord::Activity ) );
800798

801799
char buffer[64];
802800
Q_snprintf( buffer, sizeof( buffer ), "#TF_Map_%s", m_szMapName );
@@ -805,12 +803,12 @@ void CTFDiscordPresence::LevelInitPostEntity( void )
805803
{
806804
g_pVGuiLocalize->ConvertUnicodeToANSI( mapName, buffer, sizeof( buffer ) );
807805
Q_snprintf( m_szGameState, sizeof( m_szGameState ), "Map: %s", buffer );
808-
m_sPresence.largeImageKey = m_szMapName;
806+
m_Activity.GetAssets().SetLargeImage( m_szMapName );
809807
}
810808
else
811809
{
812810
Q_snprintf( m_szGameState, sizeof( m_szGameState ), "Map: %s", m_szMapName );
813-
m_sPresence.largeImageKey = "default";
811+
m_Activity.GetAssets().SetLargeImage( "default" );
814812
}
815813

816814

@@ -820,14 +818,14 @@ void CTFDiscordPresence::LevelInitPostEntity( void )
820818
if ( gameType )
821819
{
822820
g_pVGuiLocalize->ConvertUnicodeToANSI( gameType, m_szGameType, DISCORD_FIELD_MAXLEN );
823-
m_sPresence.largeImageText = m_szGameType;
821+
m_Activity.GetAssets().SetLargeText( m_szGameType );
824822
}
825823
}
826824

827-
m_sPresence.details = m_szHostName;
828-
m_sPresence.state = m_szGameState;
829-
m_sPresence.smallImageKey = "tf2v_drp_logo";
830-
m_sPresence.startTimestamp = m_iCreationTimestamp;
825+
m_Activity.SetDetails( m_szHostName );
826+
m_Activity.SetState( m_szGameState );
827+
m_Activity.GetAssets().SetSmallImage( "tf2v_drp_logo" );
828+
m_Activity.GetTimestamps().SetStart( m_iCreationTimestamp );
831829

832830
if ( steamapicontext->SteamFriends() )
833831
{
@@ -838,7 +836,9 @@ void CTFDiscordPresence::LevelInitPostEntity( void )
838836
steamapicontext->SteamFriends()->SetRichPresence( "steam_display", m_szMapName );
839837
}
840838

841-
Discord_UpdatePresence( &m_sPresence );
839+
m_pCore->ActivityManager().UpdateActivity( m_Activity, [ ] ( discord::Result result ) {
840+
ConColorMsg( Color( 114, 137, 218, 255 ), "[DRP] Activity update: %s\n", ( (result == discord::Result::Ok) ? "Ok" : "Failed" ) );
841+
} );
842842
}
843843

844844
//-----------------------------------------------------------------------------
@@ -854,7 +854,7 @@ void CTFDiscordPresence::LevelShutdownPreEntity( void )
854854
//-----------------------------------------------------------------------------
855855
void CTFDiscordPresence::Reset( void )
856856
{
857-
Q_memset( &m_sPresence, 0, sizeof( m_sPresence ) );
857+
Q_memset( &m_Activity, 0, sizeof( discord::Activity ) );
858858

859859
if ( steamapicontext->SteamFriends() )
860860
{
@@ -865,10 +865,12 @@ void CTFDiscordPresence::Reset( void )
865865
steamapicontext->SteamFriends()->SetRichPresence( "steam_player_group_size", NULL );
866866
}
867867

868-
m_sPresence.details = "Main Menu";
869-
m_sPresence.largeImageKey = "tf2v_drp_logo";
870-
m_sPresence.startTimestamp = m_iCreationTimestamp;
871-
Discord_UpdatePresence( &m_sPresence );
868+
m_Activity.SetDetails( "Main Menu" );
869+
m_Activity.GetAssets().SetLargeImage( "tf2v_drp_logo" );
870+
m_Activity.GetTimestamps().SetStart( m_iCreationTimestamp );
871+
m_pCore->ActivityManager().UpdateActivity( m_Activity, [ ] ( discord::Result result ) {
872+
ConColorMsg( Color( 114, 137, 218, 255 ), "[DRP] Activity update: %s\n", ( (result == discord::Result::Ok) ? "Ok" : "Failed" ) );
873+
} );
872874
}
873875

874876
//-----------------------------------------------------------------------------
@@ -893,19 +895,21 @@ void CTFDiscordPresence::UpdatePresence( bool bForce, bool bIsDead )
893895
{
894896
case TF_TEAM_RED:
895897
{
896-
m_sPresence.smallImageKey = s_pClassImages[iClassNum].redTeamImage;
897-
m_sPresence.smallImageText = m_szClassName;
898+
m_Activity.GetAssets().SetSmallImage( s_pClassImages[iClassNum].redTeamImage );
899+
m_Activity.GetAssets().SetSmallText( m_szClassName );
898900
break;
899901
}
900902
case TF_TEAM_BLUE:
901903
{
902-
m_sPresence.smallImageKey = s_pClassImages[iClassNum].bluTeamImage;
903-
m_sPresence.smallImageText = m_szClassName;
904+
m_Activity.GetAssets().SetSmallImage( s_pClassImages[iClassNum].bluTeamImage );
905+
m_Activity.GetAssets().SetSmallText( m_szClassName );
904906
break;
905907
}
906908
default:
907909
break;
908910
}
909911

910-
Discord_UpdatePresence( &m_sPresence );
912+
m_pCore->ActivityManager().UpdateActivity( m_Activity, [ ] ( discord::Result result ) {
913+
ConColorMsg( Color( 114, 137, 218, 255 ), "[DRP] Activity update: %s\n", ( (result == discord::Result::Ok) ? "Ok" : "Failed" ) );
914+
} );
911915
}

src/game/client/tf/tf_presence.h

+7-14
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,7 @@ class CTFPresence : public CBasePresence, public CGameEventListener
4444

4545
};
4646

47-
struct DiscordUser;
48-
struct DiscordRichPresence;
49-
47+
namespace discord { class Core; class Activity; class User; }
5048
#define DISCORD_FIELD_MAXLEN 128
5149

5250
class CTFDiscordPresence : public CAutoGameSystemPerFrame, public CGameEventListener
@@ -69,14 +67,6 @@ class CTFDiscordPresence : public CAutoGameSystemPerFrame, public CGameEventList
6967
void UpdatePresence( bool bForce = false, bool bIsDead = false );
7068
void SetLevelName( char const *pMapName ) { Q_strncpy( m_szMapName, pMapName, MAX_MAP_NAME ); }
7169

72-
// Discord handlers
73-
static void OnReady( const DiscordUser *request );
74-
static void OnDisconnected( int errorCode, const char *message );
75-
static void OnError( int errorCode, const char *message );
76-
static void OnJoinedGame( const char *joinSecret );
77-
static void OnSpectateGame( const char *spectateSecret );
78-
static void OnJoinRequested( const DiscordUser *request );
79-
8070
private:
8171
// Updates run asyncrhonous, so stack allocation in a no go
8272
char m_szMapName[ MAX_MAP_NAME ];
@@ -87,9 +77,12 @@ class CTFDiscordPresence : public CAutoGameSystemPerFrame, public CGameEventList
8777
char m_szGameState[ DISCORD_FIELD_MAXLEN ];
8878
char m_szClassName[ DISCORD_FIELD_MAXLEN ];
8979

90-
static RealTimeCountdownTimer m_updateThrottle;
91-
static int64 m_iCreationTimestamp;
92-
static DiscordRichPresence m_sPresence;
80+
RealTimeCountdownTimer m_updateThrottle;
81+
int64 m_iCreationTimestamp;
82+
83+
static discord::Core *m_pCore;
84+
static discord::Activity m_Activity;
85+
static discord::User m_CurrentUser;
9386
};
9487

9588
extern CTFDiscordPresence *rpc;

src/lib/public/discord-rpc.lib

-3.57 KB
Binary file not shown.
2.3 KB
Binary file not shown.

src/public/discord_register.h

-26
This file was deleted.

0 commit comments

Comments
 (0)