Some fixes

This commit is contained in:
Federico Cecchetto 2022-04-11 12:12:26 +02:00
parent 844dbd766a
commit d87114ca8c

View File

@ -8,6 +8,7 @@
#include "network.hpp"
#include "party.hpp"
#include "materials.hpp"
#include "discord.hpp"
#include "ui_scripting.hpp"
#include "game/ui_scripting/execution.hpp"
@ -24,8 +25,6 @@
#define DEFAULT_AVATAR_URL "https://cdn.discordapp.com/embed/avatars/0.png"
#define AVATAR_URL "https://cdn.discordapp.com/avatars/%s/%s.png?size=128"
#include "discord.hpp"
namespace discord
{
namespace
@ -36,11 +35,11 @@ namespace discord
{
if (!game::CL_IsCgameInitialized() || game::VirtualLobby_Loaded())
{
discord_presence.details = game::environment::is_sp() ? "Singleplayer" : "Multiplayer";
discord_presence.details = SELECT_VALUE("Singleplayer", "Multiplayer");
discord_presence.state = "Main Menu";
auto firingRangeDvar = game::Dvar_FindVar("virtualLobbyInFiringRange");
if (firingRangeDvar && firingRangeDvar->current.enabled == 1)
const auto in_firing_range = game::Dvar_FindVar("virtualLobbyInFiringRange");
if (in_firing_range && in_firing_range->current.enabled == 1)
{
discord_presence.state = "Firing Range";
}
@ -48,7 +47,7 @@ namespace discord
discord_presence.partySize = 0;
discord_presence.partyMax = 0;
discord_presence.startTimestamp = 0;
discord_presence.largeImageKey = game::environment::is_sp() ? "menu_singleplayer" : "menu_multiplayer";
discord_presence.largeImageKey = SELECT_VALUE("menu_singleplayer", "menu_multiplayer");
// set to blank when in lobby
discord_presence.matchSecret = "";
@ -58,16 +57,18 @@ namespace discord
}
else
{
static char details[0x80] = {0};
const auto map = game::Dvar_FindVar("mapname")->current.string;
const auto mapname = game::UI_SafeTranslateString(utils::string::va("PRESENCE_%s%s", (game::environment::is_sp() ? "SP_" : ""), map));
const auto mapname = game::UI_SafeTranslateString(
utils::string::va("PRESENCE_%s%s", SELECT_VALUE("SP_", ""), map));
if (game::environment::is_mp())
{
const auto gametype = game::UI_GetGameTypeDisplayName(game::Dvar_FindVar("g_gametype")->current.string);
const auto gametype = game::UI_GetGameTypeDisplayName(
game::Dvar_FindVar("g_gametype")->current.string);
strcpy_s(details, 0x80, utils::string::va("%s on %s", gametype, mapname));
discord_presence.details = utils::string::va("%s on %s", gametype, mapname);
char clean_hostname[0x80] = {0};
static char clean_hostname[0x80] = {0};
utils::string::strip(game::Dvar_FindVar("sv_hostname")->current.string,
clean_hostname, sizeof(clean_hostname));
auto max_clients = party::server_client_count();
@ -83,19 +84,22 @@ namespace discord
{
const auto server_net_info = party::get_state_host();
const auto server_ip_port = utils::string::va("%i.%i.%i.%i:%i",
server_net_info.ip[0],
server_net_info.ip[1],
server_net_info.ip[2],
server_net_info.ip[3],
ntohs(server_net_info.port)
static_cast<int>(server_net_info.ip[0]),
static_cast<int>(server_net_info.ip[1]),
static_cast<int>(server_net_info.ip[2]),
static_cast<int>(server_net_info.ip[3]),
static_cast<int>(ntohs(server_net_info.port))
);
char party_id[0x80] = {0};
const auto server_ip_port_hash = utils::cryptography::sha1::compute(server_ip_port, true);
static char join_secret[0x80] = {0};
strcpy_s(join_secret, 0x80, server_ip_port);
static char party_id[0x80] = {0};
const auto server_ip_port_hash = utils::cryptography::sha1::compute(server_ip_port, true).substr(0, 8);
strcpy_s(party_id, 0x80, server_ip_port_hash.data());
discord_presence.partyId = party_id;
discord_presence.joinSecret = server_ip_port;
discord_presence.joinSecret = join_secret;
discord_presence.partyPrivacy = DISCORD_PARTY_PUBLIC;
}
@ -108,9 +112,11 @@ namespace discord
{
discord_presence.state = "";
discord_presence.largeImageKey = map;
discord_presence.details = mapname;
strcpy_s(details, 0x80, mapname);
}
discord_presence.details = details;
if (!discord_presence.startTimestamp)
{
discord_presence.startTimestamp = std::chrono::duration_cast<std::chrono::seconds>(