Dedicated servers can change discordinvites without needing RPC support

This commit is contained in:
Sally Coolatta 2020-08-30 23:20:06 -04:00
parent 6d2c7f4ae7
commit 7dea9d28b9
5 changed files with 21 additions and 48 deletions

View file

@ -1671,12 +1671,7 @@ static boolean SV_SendServerConfig(INT32 node)
netbuffer->u.servercfg.maxplayer = (UINT8)(min((dedicated ? MAXPLAYERS-1 : MAXPLAYERS), cv_maxplayers.value)); netbuffer->u.servercfg.maxplayer = (UINT8)(min((dedicated ? MAXPLAYERS-1 : MAXPLAYERS), cv_maxplayers.value));
netbuffer->u.servercfg.allownewplayer = cv_allownewplayer.value; netbuffer->u.servercfg.allownewplayer = cv_allownewplayer.value;
#ifdef HAVE_DISCORDRPC
netbuffer->u.servercfg.discordinvites = (boolean)cv_discordinvites.value; netbuffer->u.servercfg.discordinvites = (boolean)cv_discordinvites.value;
#else
netbuffer->u.servercfg.discordinvites = false;
#endif
memcpy(netbuffer->u.servercfg.server_context, server_context, 8); memcpy(netbuffer->u.servercfg.server_context, server_context, 8);
op = p = netbuffer->u.servercfg.varlengthinputs; op = p = netbuffer->u.servercfg.varlengthinputs;
@ -3587,11 +3582,20 @@ static void Got_RemovePlayer(UINT8 **p, INT32 playernum);
static void Joinable_OnChange(void) static void Joinable_OnChange(void)
{ {
#ifdef HAVE_DISCORDRPC UINT8 buf[3];
DRPC_SendDiscordInfo(); UINT8 *p = buf;
#else UINT8 maxplayer;
return;
#endif if (!server)
return;
maxplayer = (UINT8)(min((dedicated ? MAXPLAYERS-1 : MAXPLAYERS), cv_maxplayers.value));
WRITEUINT8(p, maxplayer);
WRITEUINT8(p, cv_allownewplayer.value);
WRITEUINT8(p, cv_discordinvites.value);
SendNetXCmd(XD_DISCORD, &buf, 3);
} }
// called one time at init // called one time at init

View file

@ -467,6 +467,10 @@ consvar_t cv_mute = {"mute", "Off", CV_NETVAR|CV_CALL, CV_OnOff, Mute_OnChange,
consvar_t cv_sleep = {"cpusleep", "1", CV_SAVE, sleeping_cons_t, NULL, -1, NULL, NULL, 0, 0, NULL}; consvar_t cv_sleep = {"cpusleep", "1", CV_SAVE, sleeping_cons_t, NULL, -1, NULL, NULL, 0, 0, NULL};
// Here for dedicated servers
static CV_PossibleValue_t discordinvites_cons_t[] = {{0, "Admins Only"}, {1, "Everyone"}, {0, NULL}};
consvar_t cv_discordinvites = {"discordinvites", "Everyone", CV_SAVE|CV_CALL, discordinvites_cons_t, DRPC_SendDiscordInfo, 0, NULL, NULL, 0, 0, NULL};
INT16 gametype = GT_RACE; // SRB2kart INT16 gametype = GT_RACE; // SRB2kart
boolean forceresetplayers = false; boolean forceresetplayers = false;
boolean deferencoremode = false; boolean deferencoremode = false;
@ -1012,8 +1016,8 @@ void D_RegisterClientCommands(void)
CV_RegisterVar(&cv_discordrp); CV_RegisterVar(&cv_discordrp);
CV_RegisterVar(&cv_discordstreamer); CV_RegisterVar(&cv_discordstreamer);
CV_RegisterVar(&cv_discordasks); CV_RegisterVar(&cv_discordasks);
CV_RegisterVar(&cv_discordinvites);
#endif #endif
CV_RegisterVar(&cv_discordinvites);
} }
/** Checks if a name (as received from another player) is okay. /** Checks if a name (as received from another player) is okay.

View file

@ -151,6 +151,8 @@ extern consvar_t cv_skipmapcheck;
extern consvar_t cv_sleep; extern consvar_t cv_sleep;
extern consvar_t cv_discordinvites;
typedef enum typedef enum
{ {
XD_NAMEANDCOLOR = 1, XD_NAMEANDCOLOR = 1,

View file

@ -41,9 +41,6 @@ consvar_t cv_discordrp = {"discordrp", "On", CV_SAVE|CV_CALL, CV_OnOff, DRPC_Upd
consvar_t cv_discordstreamer = {"discordstreamer", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_discordstreamer = {"discordstreamer", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
consvar_t cv_discordasks = {"discordasks", "Yes", CV_SAVE|CV_CALL, CV_YesNo, DRPC_UpdatePresence, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_discordasks = {"discordasks", "Yes", CV_SAVE|CV_CALL, CV_YesNo, DRPC_UpdatePresence, 0, NULL, NULL, 0, 0, NULL};
static CV_PossibleValue_t discordinvites_cons_t[] = {{0, "Admins Only"}, {1, "Everyone"}, {0, NULL}};
consvar_t cv_discordinvites = {"discordinvites", "Everyone", CV_SAVE|CV_CALL, discordinvites_cons_t, DRPC_SendDiscordInfo, 0, NULL, NULL, 0, 0, NULL};
struct discordInfo_s discordInfo; struct discordInfo_s discordInfo;
discordRequest_t *discordRequestList = NULL; discordRequest_t *discordRequestList = NULL;
@ -338,29 +335,6 @@ void DRPC_Init(void)
DRPC_UpdatePresence(); DRPC_UpdatePresence();
} }
/*--------------------------------------------------
void DRPC_SendDiscordInfo(void)
See header file for description.
--------------------------------------------------*/
void DRPC_SendDiscordInfo(void)
{
UINT8 buf[3];
UINT8 *p = buf;
UINT8 maxplayer;
if (!server)
return;
maxplayer = (UINT8)(min((dedicated ? MAXPLAYERS-1 : MAXPLAYERS), cv_maxplayers.value));
WRITEUINT8(p, maxplayer);
WRITEUINT8(p, cv_allownewplayer.value);
WRITEUINT8(p, cv_discordinvites.value);
SendNetXCmd(XD_DISCORD, &buf, 3);
}
#ifdef HAVE_CURL #ifdef HAVE_CURL
/*-------------------------------------------------- /*--------------------------------------------------
static size_t DRPC_WriteServerIP(char *s, size_t size, size_t n, void *userdata) static size_t DRPC_WriteServerIP(char *s, size_t size, size_t n, void *userdata)

View file

@ -20,7 +20,6 @@
extern consvar_t cv_discordrp; extern consvar_t cv_discordrp;
extern consvar_t cv_discordstreamer; extern consvar_t cv_discordstreamer;
extern consvar_t cv_discordasks; extern consvar_t cv_discordasks;
extern consvar_t cv_discordinvites;
extern struct discordInfo_s { extern struct discordInfo_s {
UINT8 maxPlayers; UINT8 maxPlayers;
@ -65,16 +64,6 @@ void DRPC_RemoveRequest(discordRequest_t *removeRequest);
void DRPC_Init(void); void DRPC_Init(void);
/*--------------------------------------------------
void DRPC_SendDiscordInfo(void);
Sends the server's information needed for
the rich presence state.
--------------------------------------------------*/
void DRPC_SendDiscordInfo(void);
/*-------------------------------------------------- /*--------------------------------------------------
void DRPC_UpdatePresence(void); void DRPC_UpdatePresence(void);