Add spectate state; add "playing as character" state
This commit is contained in:
parent
dee8de29da
commit
8a91dea6ce
@ -151,8 +151,12 @@ void Courtroom::char_clicked(int n_char)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (n_real_char == m_cid)
|
if (n_real_char == m_cid)
|
||||||
|
{
|
||||||
enter_courtroom(m_cid);
|
enter_courtroom(m_cid);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
ao_app->send_server_packet(new AOPacket("CC#" + QString::number(ao_app->s_pv) + "#" + QString::number(n_real_char) + "#" + get_hdid() + "#%"));
|
ao_app->send_server_packet(new AOPacket("CC#" + QString::number(ao_app->s_pv) + "#" + QString::number(n_real_char) + "#" + get_hdid() + "#%"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -660,9 +660,15 @@ void Courtroom::enter_courtroom(int p_cid)
|
|||||||
QString f_char;
|
QString f_char;
|
||||||
|
|
||||||
if (m_cid == -1)
|
if (m_cid == -1)
|
||||||
|
{
|
||||||
|
ao_app->discord->state_spectate();
|
||||||
f_char = "";
|
f_char = "";
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
f_char = ao_app->get_char_name(char_list.at(m_cid).name);
|
f_char = ao_app->get_char_name(char_list.at(m_cid).name);
|
||||||
|
ao_app->discord->state_character(f_char.toStdString());
|
||||||
|
}
|
||||||
|
|
||||||
current_char = f_char;
|
current_char = f_char;
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#include "discord_rich_presence.h"
|
#include "discord_rich_presence.h"
|
||||||
|
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
#include <ctime>
|
||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
@ -14,15 +15,13 @@ Discord::Discord()
|
|||||||
handlers.ready = [] {
|
handlers.ready = [] {
|
||||||
qInfo() << "Discord RPC ready";
|
qInfo() << "Discord RPC ready";
|
||||||
};
|
};
|
||||||
/*
|
|
||||||
handlers.disconnected = [](int errorCode, const char* message) {
|
handlers.disconnected = [](int errorCode, const char* message) {
|
||||||
qInfo() << "Discord RPC disconnected! " << message;
|
qInfo() << "Discord RPC disconnected! " << message;
|
||||||
};
|
};
|
||||||
handlers.errored = [](int errorCode, const char* message) {
|
handlers.errored = [](int errorCode, const char* message) {
|
||||||
qWarning() << "Discord RPC errored out! " << message;
|
qWarning() << "Discord RPC errored out! " << message;
|
||||||
};
|
};
|
||||||
*/
|
qInfo() << "Initializing Discord RPC";
|
||||||
qInfo() << "Are things working out all right?";
|
|
||||||
Discord_Initialize(APPLICATION_ID, &handlers, 1, nullptr);
|
Discord_Initialize(APPLICATION_ID, &handlers, 1, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -35,24 +34,74 @@ void Discord::state_lobby()
|
|||||||
{
|
{
|
||||||
DiscordRichPresence presence;
|
DiscordRichPresence presence;
|
||||||
std::memset(&presence, 0, sizeof(presence));
|
std::memset(&presence, 0, sizeof(presence));
|
||||||
|
presence.largeImageKey = "ao2-logo";
|
||||||
|
presence.largeImageText = "Objection!";
|
||||||
|
presence.instance = 1;
|
||||||
|
|
||||||
presence.state = "In Lobby";
|
presence.state = "In Lobby";
|
||||||
presence.details = "Idle";
|
presence.details = "Idle";
|
||||||
presence.largeImageKey = "ao2-logo";
|
|
||||||
presence.largeImageText = "Objection!";
|
|
||||||
presence.instance = 1;
|
|
||||||
Discord_UpdatePresence(&presence);
|
Discord_UpdatePresence(&presence);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Discord::state_server(const char* name, const char* server_id)
|
void Discord::state_server(std::string name, std::string server_id)
|
||||||
{
|
{
|
||||||
|
qDebug() << "Discord RPC: Setting server state";
|
||||||
|
|
||||||
DiscordRichPresence presence;
|
DiscordRichPresence presence;
|
||||||
std::memset(&presence, 0, sizeof(presence));
|
std::memset(&presence, 0, sizeof(presence));
|
||||||
presence.state = "In a Server";
|
|
||||||
presence.details = name;
|
|
||||||
presence.largeImageKey = "ao2-logo";
|
presence.largeImageKey = "ao2-logo";
|
||||||
presence.largeImageText = "Objection!";
|
presence.largeImageText = "Objection!";
|
||||||
presence.instance = 1;
|
presence.instance = 1;
|
||||||
presence.matchSecret = server_id;
|
|
||||||
|
auto timestamp = static_cast<int64_t>(std::time(nullptr));
|
||||||
|
|
||||||
|
presence.state = "In a Server";
|
||||||
|
presence.details = name.c_str();
|
||||||
|
presence.matchSecret = server_id.c_str();
|
||||||
|
presence.startTimestamp = this->timestamp;
|
||||||
|
|
||||||
|
this->server_id = server_id;
|
||||||
|
this->server_name = name;
|
||||||
|
this->timestamp = timestamp;
|
||||||
|
Discord_UpdatePresence(&presence);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Discord::state_character(std::string name)
|
||||||
|
{
|
||||||
|
auto name_internal = QString(name.c_str()).toLower().replace(' ', '_').toStdString();
|
||||||
|
auto name_friendly = QString(name.c_str()).replace('_', ' ').toStdString();
|
||||||
|
const std::string playing_as = "Playing as " + name_friendly;
|
||||||
|
qDebug() << "Discord RPC: Setting character state (" << playing_as.c_str() << ")";
|
||||||
|
|
||||||
|
DiscordRichPresence presence;
|
||||||
|
std::memset(&presence, 0, sizeof(presence));
|
||||||
|
presence.largeImageKey = "ao2-logo";
|
||||||
|
presence.largeImageText = "Objection!";
|
||||||
|
presence.instance = 1;
|
||||||
|
presence.details = this->server_name.c_str();
|
||||||
|
presence.matchSecret = this->server_id.c_str();
|
||||||
|
presence.startTimestamp = this->timestamp;
|
||||||
|
|
||||||
|
presence.state = playing_as.c_str();
|
||||||
|
presence.smallImageKey = name_internal.c_str();
|
||||||
|
// presence.smallImageText = name_internal.c_str();
|
||||||
|
Discord_UpdatePresence(&presence);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Discord::state_spectate()
|
||||||
|
{
|
||||||
|
qDebug() << "Discord RPC: Setting specator state";
|
||||||
|
|
||||||
|
DiscordRichPresence presence;
|
||||||
|
std::memset(&presence, 0, sizeof(presence));
|
||||||
|
presence.largeImageKey = "ao2-logo";
|
||||||
|
presence.largeImageText = "Objection!";
|
||||||
|
presence.instance = 1;
|
||||||
|
presence.details = this->server_name.c_str();
|
||||||
|
presence.matchSecret = this->server_id.c_str();
|
||||||
|
presence.startTimestamp = this->timestamp;
|
||||||
|
|
||||||
|
presence.state = "Spectating";
|
||||||
Discord_UpdatePresence(&presence);
|
Discord_UpdatePresence(&presence);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#ifndef DISCORD_RICH_PRESENCE_H
|
#ifndef DISCORD_RICH_PRESENCE_H
|
||||||
#define DISCORD_RICH_PRESENCE_H
|
#define DISCORD_RICH_PRESENCE_H
|
||||||
|
|
||||||
|
#include <string>
|
||||||
#include <discord-rpc.h>
|
#include <discord-rpc.h>
|
||||||
|
|
||||||
namespace AttorneyOnline {
|
namespace AttorneyOnline {
|
||||||
@ -9,12 +10,16 @@ class Discord
|
|||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
const char* APPLICATION_ID = "399779271737868288";
|
const char* APPLICATION_ID = "399779271737868288";
|
||||||
|
std::string server_name, server_id;
|
||||||
|
int64_t timestamp;
|
||||||
public:
|
public:
|
||||||
Discord();
|
Discord();
|
||||||
~Discord();
|
~Discord();
|
||||||
|
|
||||||
void state_lobby();
|
void state_lobby();
|
||||||
void state_server(const char* name, const char* server_id);
|
void state_server(std::string name, std::string server_id);
|
||||||
|
void state_character(std::string name);
|
||||||
|
void state_spectate();
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -264,7 +264,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
|
|||||||
|
|
||||||
QCryptographicHash hash(QCryptographicHash::Algorithm::Sha256);
|
QCryptographicHash hash(QCryptographicHash::Algorithm::Sha256);
|
||||||
hash.addData(server_address.toUtf8());
|
hash.addData(server_address.toUtf8());
|
||||||
discord->state_server((const char*) server_name.toLocal8Bit().data(), (const char*) hash.result().toBase64());
|
discord->state_server(server_name.toStdString(), hash.result().toBase64().toStdString());
|
||||||
}
|
}
|
||||||
else if (header == "CI")
|
else if (header == "CI")
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user