Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add discord-rpc #2577

Closed
wants to merge 40 commits into from
Closed
Show file tree
Hide file tree
Changes from 25 commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
68612de
Remove discord stuff
Lpsd Jan 5, 2022
b2db11f
Revert accidental commit
Lpsd Jan 5, 2022
5ecdc6f
Revert enum removals
Lpsd Jan 9, 2022
7f45ff3
Revert accidental commit in CClientGame.cpp
Lpsd Jan 9, 2022
06d9060
Bump bitstream
Lpsd Jan 16, 2022
12e3cb0
Write empty string to bitstream if server using old Discord implement…
Lpsd Jan 16, 2022
8d74813
Merge branch 'master' into remove-discord
patrikjuvonen Mar 21, 2022
9007d62
Add discord-rpc
Deihim007 Mar 23, 2022
a5e4634
Merge branch 'multitheftauto:master' into pr/2499
Deihim007 Mar 23, 2022
45d160e
Add discord rich presence
Deihim007 Mar 23, 2022
51e40e9
Add discord rich presence
Deihim007 Mar 23, 2022
7052d9a
Merge branch 'pr/2499' of https://github.com/Deihim007/mtasa-blue int…
Deihim007 Mar 23, 2022
e637ccc
Add rich presence variables
Deihim007 Mar 24, 2022
1a7b35a
Modify datatypes, Add update and set state
Deihim007 Mar 24, 2022
82c2318
Add discord interface and set template
Deihim007 Mar 24, 2022
f4a63a5
Merge branch 'master' into pr/2499
Deihim007 Apr 2, 2022
dada767
Merge branch 'master' into pr/2499
Deihim007 Apr 3, 2022
a0fffb1
Merge branch 'master' of https://github.com/multitheftauto/mtasa-blue…
Deihim007 Apr 7, 2022
7f7fa22
Merge branch 'multitheftauto-master' into pr/2499
Deihim007 Apr 7, 2022
66fd8b5
Merge branch 'master' into pr/2499
Deihim007 May 2, 2022
76b0d52
Update client en_US pot
github-actions[bot] May 2, 2022
81082c2
Add In-game/Main Menu
Deihim007 May 2, 2022
84da56e
Update client en_US pot
github-actions[bot] May 2, 2022
05c897c
Merge branch 'master' into pr/2499
Deihim007 May 2, 2022
b52de17
Update client en_US pot
github-actions[bot] May 2, 2022
cdd0ac1
Merge branch 'master' into pr/2499
Deihim007 Jun 1, 2022
95e3f10
Merge branch 'master' into pr/2499
Deihim007 Jun 1, 2022
0a27fb8
Merge branch 'master' into pr/2499
Deihim007 Jul 27, 2022
36445c7
Update vendor/discord-rpc/premake5.lua
Deihim007 Jul 27, 2022
0d724db
Update Client/core/CCore.cpp
Deihim007 Jul 27, 2022
88d9ed9
Update CDiscordRichPresence.cpp
Deihim007 Jul 27, 2022
b4f7552
Update CDiscordRichPresence.cpp
Deihim007 Jul 27, 2022
9b641b1
Update CMainMenu.cpp
Deihim007 Jul 27, 2022
b943e43
Change const char* to std::string
Deihim007 Jul 28, 2022
5fddb8c
Rename upgrade to should_upgrade
Deihim007 Jul 28, 2022
bf85372
Merge branch 'master' into pr/2499
Deihim007 Aug 10, 2022
5c343be
Merge branch 'master' into pr/2499
Deihim007 Feb 15, 2023
7c5b321
Use shared_ptr & address code review
Lpsd Feb 16, 2023
91458d4
Add Lua definition(s) & utilise CDiscordInterface
Lpsd Feb 17, 2023
a43384e
Merge branch 'master' into pr/2499
Deihim007 Mar 25, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
24 changes: 24 additions & 0 deletions Client/core/CCore.cpp
Expand Up @@ -136,12 +136,18 @@ CCore::CCore()

// Create tray icon
m_pTrayIcon = new CTrayIcon();

// Create discord rich presence
m_pDiscordRichPresence = new CDiscordRichPresence();
Lpsd marked this conversation as resolved.
Show resolved Hide resolved
}

CCore::~CCore()
{
WriteDebugEvent("CCore::~CCore");

// Destroy discord rich presence
delete m_pDiscordRichPresence;
Lpsd marked this conversation as resolved.
Show resolved Hide resolved

// Destroy tray icon
delete m_pTrayIcon;

Expand Down Expand Up @@ -585,6 +591,24 @@ void CCore::SetConnected(bool bConnected)
{
m_pLocalGUI->GetMainMenu()->SetIsIngame(bConnected);
UpdateIsWindowMinimized(); // Force update of stuff

if (bConnected)
{
time_t timer;
time(&timer);

g_pCore->GetDiscord()->SetPresenceState("In-game");
g_pCore->GetDiscord()->SetPresenceDetails("");
g_pCore->GetDiscord()->SetPresenceStartTimestamp((long)timer);
g_pCore->GetDiscord()->UpdatePresence();
} else
{
g_pCore->GetDiscord()->SetPresenceState("Main Menu");
g_pCore->GetDiscord()->SetPresenceDetails("");
g_pCore->GetDiscord()->SetPresenceStartTimestamp(0);
g_pCore->GetDiscord()->UpdatePresence();
}
Lpsd marked this conversation as resolved.
Show resolved Hide resolved

}

bool CCore::IsConnected()
Expand Down
11 changes: 7 additions & 4 deletions Client/core/CCore.h
Expand Up @@ -39,6 +39,7 @@ class CCore;
#include <ijsify.h>
#include <core/CWebCoreInterface.h>
#include "CTrayIcon.h"
#include "CDiscordRichPresence.h"
Lpsd marked this conversation as resolved.
Show resolved Hide resolved

#define DIRECTINPUT_VERSION 0x0800
#include <dinput.h>
Expand Down Expand Up @@ -101,6 +102,7 @@ class CCore : public CCoreInterface, public CSingleton<CCore>
CLocalizationInterface* GetLocalization() { return g_pLocalization; };
CWebCoreInterface* GetWebCore();
CTrayIconInterface* GetTrayIcon() { return m_pTrayIcon; };
CDiscordInterface* GetDiscord() { return m_pDiscordRichPresence; };
Deihim007 marked this conversation as resolved.
Show resolved Hide resolved
Lpsd marked this conversation as resolved.
Show resolved Hide resolved

void SaveConfig(bool bWaitUntilFinished = false);

Expand Down Expand Up @@ -290,10 +292,11 @@ class CCore : public CCoreInterface, public CSingleton<CCore>
CModelCacheManager* m_pModelCacheManager;

// Instances (put new classes here!)
CXMLFile* m_pConfigFile;
CClientVariables m_ClientVariables;
CWebCoreInterface* m_pWebCore = nullptr;
CTrayIcon* m_pTrayIcon;
CXMLFile* m_pConfigFile;
CClientVariables m_ClientVariables;
CWebCoreInterface* m_pWebCore = nullptr;
CTrayIcon* m_pTrayIcon;
CDiscordRichPresence* m_pDiscordRichPresence;

// Hook interfaces.
CMessageLoopHook* m_pMessageLoopHook;
Expand Down
73 changes: 73 additions & 0 deletions Client/core/CDiscordRichPresence.cpp
@@ -0,0 +1,73 @@
/*****************************************************************************
*
* PROJECT: Multi Theft Auto v1.0
* LICENSE: See LICENSE in the top level directory
* FILE: core/CDiscordRichPresence.cpp
* PURPOSE: Discord rich presence implementation
*
* Multi Theft Auto is available from http://www.multitheftauto.com/
*
*****************************************************************************/

#include "StdInc.h"
#include "discord_rpc.h"

#define DEFAULT_APP_ID "727214310610436126"
#define DEFAULT_APP_ASSET "mta_logo_round"
#define DEFAULT_APP_ASSET_SMALL ""
#define DEFAULT_APP_ASSET_TEXT ""
#define DEFAULT_APP_ASSET_SMALL_TEXT ""

CDiscordRichPresence::CDiscordRichPresence()
{
DiscordEventHandlers handlers;
memset(&handlers, 0, sizeof(handlers));
m_strDiscordAppId = DEFAULT_APP_ID;
m_strDiscordAppAsset = DEFAULT_APP_ASSET;
m_strDiscordAppAssetSmall = DEFAULT_APP_ASSET_SMALL;
m_strDiscordAppAssetText = DEFAULT_APP_ASSET_TEXT;
m_strDiscordAppAssetSmallText = DEFAULT_APP_ASSET_SMALL_TEXT;

m_strDiscordAppCurrentId = DEFAULT_APP_ID;
m_strDiscordAppState = "";
m_strDiscordAppDetails = "";
m_uiDiscordAppStart = 0;
m_uiDiscordAppEnd = 0;

Discord_Initialize(m_strDiscordAppId, &handlers, 1, nullptr);
}

CDiscordRichPresence::~CDiscordRichPresence()
{
m_strDiscordAppId = DEFAULT_APP_ID;
Lpsd marked this conversation as resolved.
Show resolved Hide resolved
Discord_Shutdown();
DiscordEventHandlers handlers;
Lpsd marked this conversation as resolved.
Show resolved Hide resolved
memset(&handlers, 0, sizeof(handlers));
Lpsd marked this conversation as resolved.
Show resolved Hide resolved
}

void CDiscordRichPresence::UpdatePresence()
{
DiscordRichPresence discordPresence;
memset(&discordPresence, 0, sizeof(discordPresence));
discordPresence.largeImageKey = m_strDiscordAppAsset;
discordPresence.state = m_strDiscordAppState;
discordPresence.details = m_strDiscordAppDetails;
discordPresence.startTimestamp = m_uiDiscordAppStart;

Discord_UpdatePresence(&discordPresence);
}

void CDiscordRichPresence::SetPresenceState(const char* szState)
{
m_strDiscordAppState = szState;
}

void CDiscordRichPresence::SetPresenceDetails(const char* szDetails)
{
m_strDiscordAppDetails = szDetails;
}

void CDiscordRichPresence::SetPresenceStartTimestamp(const unsigned long ulStart)
{
m_uiDiscordAppStart = ulStart;
}
43 changes: 43 additions & 0 deletions Client/core/CDiscordRichPresence.h
@@ -0,0 +1,43 @@
/*****************************************************************************
*
* PROJECT: Multi Theft Auto v1.0
* LICENSE: See LICENSE in the top level directory
* FILE: core/CDiscordRichPresence.h
* PURPOSE: Header file for discord rich presence
*
* Multi Theft Auto is available from http://www.multitheftauto.com/
*
*****************************************************************************/
#pragma once

#include <core/CDiscordInterface.h>
#include <string>

class CDiscordRichPresence : public CDiscordInterface
{
public:
CDiscordRichPresence();
~CDiscordRichPresence();

// void SetApplicationId();
void UpdatePresence();
void SetPresenceState(const char* szState);
void SetPresenceDetails(const char* szDetails);
void SetPresenceStartTimestamp(const unsigned long ulStart);
// void SetPresenceTimestamp();
// void SetPresenceImage();
// void SetPresenceText();

private:
const char* m_strDiscordAppId;
const char* m_strDiscordAppAsset;
const char* m_strDiscordAppAssetSmall;
const char* m_strDiscordAppAssetText;
const char* m_strDiscordAppAssetSmallText;

const char* m_strDiscordAppCurrentId;
const char* m_strDiscordAppState;
const char* m_strDiscordAppDetails;
Lpsd marked this conversation as resolved.
Show resolved Hide resolved
unsigned long m_uiDiscordAppStart;
unsigned long m_uiDiscordAppEnd;
};
4 changes: 4 additions & 0 deletions Client/core/CMainMenu.cpp
Expand Up @@ -286,6 +286,10 @@ CMainMenu::CMainMenu(CGUI* pManager)
// We're not ingame
SetIsIngame(false);

// Discord
g_pCore->GetDiscord()->SetPresenceState("Main Menu");
g_pCore->GetDiscord()->UpdatePresence();
Lpsd marked this conversation as resolved.
Show resolved Hide resolved

// Store the pointer to the graphics subsystem
m_pGraphics = CGraphics::GetSingletonPtr();

Expand Down
3 changes: 2 additions & 1 deletion Client/core/premake5.lua
Expand Up @@ -20,6 +20,7 @@ project "Client Core"
"../../vendor/pthreads/include",
"../../vendor/sparsehash/src/",
"../../vendor/detours/4.0.1/src",
"../../vendor/discord-rpc/discord/include",
}

pchheader "StdInc.h"
Expand All @@ -46,7 +47,7 @@ project "Client Core"
links {
"ws2_32", "d3dx9", "Userenv", "DbgHelp", "xinput", "Imagehlp", "dxguid", "dinput8",
"strmiids", "odbc32", "odbccp32", "shlwapi", "winmm", "gdi32", "Imm32", "Psapi",
"pthread", "libpng", "jpeg", "zlib", "tinygettext",
"pthread", "libpng", "jpeg", "zlib", "tinygettext", "discord-rpc"
}

defines {
Expand Down
20 changes: 20 additions & 0 deletions Client/sdk/core/CDiscordInterface.h
@@ -0,0 +1,20 @@
/*****************************************************************************
*
* PROJECT: Multi Theft Auto v1.0
Deihim007 marked this conversation as resolved.
Show resolved Hide resolved
* (Shared logic for modifications)
* LICENSE: See LICENSE in the top level directory
* FILE: sdk/core/CDiscordInterface.h
* PURPOSE: Discord interface class
*
*****************************************************************************/

#pragma once

class CDiscordInterface
Lpsd marked this conversation as resolved.
Show resolved Hide resolved
{
public:
virtual void UpdatePresence() = 0;
virtual void SetPresenceState(const char* szState) = 0;
virtual void SetPresenceDetails(const char* szDetails) = 0;
virtual void SetPresenceStartTimestamp(const unsigned long ulStart) = 0;
};