diff --git a/.vs/config/applicationhost.config b/.vs/config/applicationhost.config
new file mode 100644
index 0000000..c2abfb4
--- /dev/null
+++ b/.vs/config/applicationhost.config
@@ -0,0 +1,1030 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Jupiter Bot.VC.db b/Jupiter Bot.VC.db
new file mode 100644
index 0000000..c2485e5
Binary files /dev/null and b/Jupiter Bot.VC.db differ
diff --git a/Release/Plugins/RenX.Core.lib b/Release/Plugins/RenX.Core.lib
index e517467..45bf07a 100644
Binary files a/Release/Plugins/RenX.Core.lib and b/Release/Plugins/RenX.Core.lib differ
diff --git a/RenX.Core/RenX_Functions.cpp b/RenX.Core/RenX_Functions.cpp
index 0c87e69..0cd81a3 100644
--- a/RenX.Core/RenX_Functions.cpp
+++ b/RenX.Core/RenX_Functions.cpp
@@ -959,8 +959,6 @@ Jupiter::String RenX::escapifyRCON(const Jupiter::ReadableString &str)
result += 'u';
result += Jupiter_asHex_upper(value >> 8);
result += Jupiter_asHex_upper(value & 0x00FF);
-
- printf(ENDL ENDL ENDL "\\u%x%x" ENDL ENDL ENDL ENDL, value >> 8, value & 0x00FF);
}
// else // This is an invalid 1 byte sequence
}
diff --git a/RenX.Core/RenX_Server.cpp b/RenX.Core/RenX_Server.cpp
index 64d9d34..e84db1f 100644
--- a/RenX.Core/RenX_Server.cpp
+++ b/RenX.Core/RenX_Server.cpp
@@ -2562,9 +2562,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line)
{
player->global_rank = itr->rank;
if (this->rconVersion >= 4)
- this->sendData(Jupiter::StringS::Format("xset_rank %d %d\n", player->id, player->global_rank));
- else
- this->sendData(Jupiter::StringS::Format("xset_rank%c%d%c%d\n", RenX::DelimC3, player->id, RenX::DelimC3, player->global_rank));
+ this->sendData(Jupiter::StringS::Format("dset_rank %d %d\n", player->id, player->global_rank));
}
break;
}
@@ -2632,9 +2630,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line)
if (this->devBot && player->global_rank != 0U)
{
if (this->rconVersion >= 4)
- this->sendData(Jupiter::StringS::Format("xset_rank %d %d\n", player->id, player->global_rank));
- else
- this->sendData(Jupiter::StringS::Format("xset_rank%c%d%c%d\n", RenX::DelimC, player->id, RenX::DelimC, player->global_rank));
+ this->sendData(Jupiter::StringS::Format("dset_rank %d %d\n", player->id, player->global_rank));
}
for (size_t i = 0; i < xPlugins.size(); i++)
xPlugins.get(i)->RenX_OnIDChange(this, player, oldID);
@@ -3148,7 +3144,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line)
}
break;
- case 'x':
+ case 'd':
{
// We don't actually need to use this output for anything atm; tend to this later.
}
diff --git a/RenX.ModSystem/RenX_ModSystem.cpp b/RenX.ModSystem/RenX_ModSystem.cpp
index b36dde8..81e32af 100644
--- a/RenX.ModSystem/RenX_ModSystem.cpp
+++ b/RenX.ModSystem/RenX_ModSystem.cpp
@@ -178,9 +178,9 @@ int RenX_ModSystemPlugin::auth(RenX::Server *server, const RenX::PlayerInfo *pla
if (server->isDevBot())
{
if (server->getVersion() >= 4)
- server->sendData(Jupiter::StringS::Format("xset_dev %d\n", player->id));
+ server->sendData(Jupiter::StringS::Format("dset_dev %d\n", player->id));
else
- server->sendData(Jupiter::StringS::Format("xset_dev%c%d\n", RenX::DelimC, player->id));
+ server->sendData(Jupiter::StringS::Format("d%d\n", player->id));
}
}
Jupiter::String playerName = RenX::getFormattedPlayerName(player);
diff --git a/RenX.ServerList/RenX_ServerList.cpp b/RenX.ServerList/RenX_ServerList.cpp
index 37b914f..cada9b4 100644
--- a/RenX.ServerList/RenX_ServerList.cpp
+++ b/RenX.ServerList/RenX_ServerList.cpp
@@ -88,8 +88,9 @@ RenX_ServerListPlugin::RenX_ServerListPlugin()
{
RenX_ServerListPlugin::web_hostname = Jupiter::IRC::Client::Config->get(this->name, "Hostname"_jrs, ""_jrs);
RenX_ServerListPlugin::web_path = Jupiter::IRC::Client::Config->get(this->name, "Path"_jrs, "/"_jrs);
- RenX_ServerListPlugin::server_list_page_name = Jupiter::IRC::Client::Config->get(this->name, "ServersPageName"_jrs, "servers.json"_jrs);
- RenX_ServerListPlugin::server_page_name = Jupiter::IRC::Client::Config->get(this->name, "ServerPageName"_jrs, "server.json"_jrs);
+ RenX_ServerListPlugin::server_list_page_name = Jupiter::IRC::Client::Config->get(this->name, "ServersPageName"_jrs, "servers.jsp"_jrs);
+ RenX_ServerListPlugin::server_list_long_page_name = Jupiter::IRC::Client::Config->get(this->name, "HumanServersPageName"_jrs, "servers_long.jsp"_jrs);
+ RenX_ServerListPlugin::server_page_name = Jupiter::IRC::Client::Config->get(this->name, "ServerPageName"_jrs, "server.jsp"_jrs);
/** Initialize content */
Jupiter::HTTP::Server &server = getHTTPServer();
@@ -102,6 +103,14 @@ RenX_ServerListPlugin::RenX_ServerListPlugin()
content->free_result = false;
server.hook(RenX_ServerListPlugin::web_hostname, RenX_ServerListPlugin::web_path, content);
+ // Server list (long) page
+ content = new Jupiter::HTTP::Server::Content(RenX_ServerListPlugin::server_list_long_page_name, handle_server_list_long_page);
+ content->language = &Jupiter::HTTP::Content::Language::ENGLISH;
+ content->type = &CONTENT_TYPE_APPLICATION_JSON;
+ content->charset = &Jupiter::HTTP::Content::Type::Text::Charset::UTF8;
+ content->free_result = true;
+ server.hook(RenX_ServerListPlugin::web_hostname, RenX_ServerListPlugin::web_path, content);
+
// Server page (GUIDs)
content = new Jupiter::HTTP::Server::Content(RenX_ServerListPlugin::server_page_name, handle_server_page);
content->language = &Jupiter::HTTP::Content::Language::ENGLISH;
@@ -160,12 +169,12 @@ Jupiter::StringS server_as_json(const RenX::Server *server)
server->getPort(),
server->getSocketHostname().size(), server->getSocketHostname().ptr());
- server_json_block += "}"_jrs;
+ server_json_block += '}';
return server_json_block;
}
-Jupiter::StringS server_as_hr_json(const RenX::Server *server)
+Jupiter::StringS server_as_long_json(const RenX::Server *server)
{
Jupiter::String server_json_block(128);
@@ -220,43 +229,43 @@ Jupiter::StringS server_as_hr_json(const RenX::Server *server)
// Level Rotation
if (server->maps.size() != 0)
{
- server_json_block += ",\n\t\t\"Levels\": ["_jrs;
+ server_json_block += ",\n\t\t\"Levels\": ["_jrs;
- server_json_block += "\n\t\t\t{\n\t\t\t\t\"Name\": \""_jrs;
- server_json_block += server->maps.get(0)->name;
- server_json_block += "\",\n\t\t\t\t\"GUID\": \""_jrs;
- server_json_block += RenX::formatGUID(*server->maps.get(0));
- server_json_block += "\"\n\t\t\t}"_jrs;
+ server_json_block += "\n\t\t\t{\n\t\t\t\t\"Name\": \""_jrs;
+ server_json_block += server->maps.get(0)->name;
+ server_json_block += "\",\n\t\t\t\t\"GUID\": \""_jrs;
+ server_json_block += RenX::formatGUID(*server->maps.get(0));
+ server_json_block += "\"\n\t\t\t}"_jrs;
- for (size_t index = 1; index != server->maps.size(); ++index)
- {
- server_json_block += ",\n\t\t\t{\n\t\t\t\t\"Name\": \""_jrs;
- server_json_block += server->maps.get(index)->name;
- server_json_block += "\",\n\t\t\t\t\"GUID\": \""_jrs;
- server_json_block += RenX::formatGUID(*server->maps.get(index));
- server_json_block += "\"\n\t\t\t}"_jrs;
- }
+ for (size_t index = 1; index != server->maps.size(); ++index)
+ {
+ server_json_block += ",\n\t\t\t{\n\t\t\t\t\"Name\": \""_jrs;
+ server_json_block += server->maps.get(index)->name;
+ server_json_block += "\",\n\t\t\t\t\"GUID\": \""_jrs;
+ server_json_block += RenX::formatGUID(*server->maps.get(index));
+ server_json_block += "\"\n\t\t\t}"_jrs;
+ }
- server_json_block += "\n\t\t]"_jrs;
+ server_json_block += "\n\t\t]"_jrs;
}
// Mutators
if (server->mutators.size() != 0)
{
- server_json_block += ",\n\t\t\"Mutators\": ["_jrs;
+ server_json_block += ",\n\t\t\"Mutators\": ["_jrs;
- server_json_block += "\n\t\t\t{\n\t\t\t\t\"Name\": \""_jrs;
- server_json_block += *server->mutators.get(0);
- server_json_block += "\"\n\t\t\t}"_jrs;
+ server_json_block += "\n\t\t\t{\n\t\t\t\t\"Name\": \""_jrs;
+ server_json_block += *server->mutators.get(0);
+ server_json_block += "\"\n\t\t\t}"_jrs;
- for (size_t index = 1; index != server->mutators.size(); ++index)
- {
- server_json_block += ",\n\t\t\t{\n\t\t\t\t\"Name\": \""_jrs;
- server_json_block += *server->mutators.get(index);
- server_json_block += "\"\n\t\t\t}"_jrs;
- }
+ for (size_t index = 1; index != server->mutators.size(); ++index)
+ {
+ server_json_block += ",\n\t\t\t{\n\t\t\t\t\"Name\": \""_jrs;
+ server_json_block += *server->mutators.get(index);
+ server_json_block += "\"\n\t\t\t}"_jrs;
+ }
- server_json_block += "\n\t\t]"_jrs;
+ server_json_block += "\n\t\t]"_jrs;
}
server_json_block += "\n\t}"_jrs;
@@ -264,8 +273,10 @@ Jupiter::StringS server_as_hr_json(const RenX::Server *server)
return server_json_block;
}
-void RenX_ServerListPlugin::addServerToServerList(const RenX::Server *server)
+void RenX_ServerListPlugin::addServerToServerList(RenX::Server *server)
{
+ Jupiter::String server_json_block(256);
+
// append to server_list_json
if (RenX_ServerListPlugin::server_list_json.isEmpty())
@@ -281,48 +292,6 @@ void RenX_ServerListPlugin::addServerToServerList(const RenX::Server *server)
RenX_ServerListPlugin::server_list_json += server_as_json(server);
RenX_ServerListPlugin::server_list_json += ']';
}
-}
-
-void RenX_ServerListPlugin::updateServerList()
-{
- Jupiter::ArrayList servers = RenX::getCore()->getServers();
- size_t index = 0;
- RenX::Server *server;
-
- // regenerate server_list_json
-
- RenX_ServerListPlugin::server_list_json = '[';
-
- while (index != servers.size())
- {
- server = servers.get(index);
- if (server->isConnected() && server->isFullyConnected())
- {
- RenX_ServerListPlugin::server_list_json += server_as_json(server);
- ++index;
- break;
- }
- ++index;
- }
- while (index != servers.size())
- {
- server = servers.get(index);
- if (server->isConnected() && server->isFullyConnected())
- {
- RenX_ServerListPlugin::server_list_json += ',';
- RenX_ServerListPlugin::server_list_json += server_as_json(server);
- }
- ++index;
- }
-
- RenX_ServerListPlugin::server_list_json += ']';
-}
-
-void RenX_ServerListPlugin::RenX_OnServerFullyConnected(RenX::Server *server)
-{
- Jupiter::String server_json_block(256);
-
- this->addServerToServerList(server);
// add to individual listing
@@ -353,7 +322,9 @@ void RenX_ServerListPlugin::RenX_OnServerFullyConnected(RenX::Server *server)
// Mutators
if (server->mutators.size() != 0)
{
- server_json_block += ",\"Mutators\":["_jrs;
+ if (server->maps.size() != 0)
+ server_json_block += ","_jrs;
+ server_json_block += "\"Mutators\":["_jrs;
server_json_block += "{\"Name\":\""_jrs;
server_json_block += jsonify(*server->mutators.get(0));
@@ -374,6 +345,46 @@ void RenX_ServerListPlugin::RenX_OnServerFullyConnected(RenX::Server *server)
server->varData.set(this->name, "j"_jrs, server_json_block);
}
+void RenX_ServerListPlugin::updateServerList()
+{
+ Jupiter::ArrayList servers = RenX::getCore()->getServers();
+ size_t index = 0;
+ RenX::Server *server;
+
+ // regenerate server_list_json
+
+ RenX_ServerListPlugin::server_list_json = '[';
+
+ while (index != servers.size())
+ {
+ server = servers.get(index);
+ if (server->isConnected() && server->isFullyConnected())
+ {
+ RenX_ServerListPlugin::server_list_json += server_as_json(server);
+ ++index;
+ break;
+ }
+ ++index;
+ }
+ while (index != servers.size())
+ {
+ server = servers.get(index);
+ if (server->isConnected() && server->isFullyConnected())
+ {
+ RenX_ServerListPlugin::server_list_json += ',';
+ RenX_ServerListPlugin::server_list_json += server_as_json(server);
+ }
+ ++index;
+ }
+
+ RenX_ServerListPlugin::server_list_json += ']';
+}
+
+void RenX_ServerListPlugin::RenX_OnServerFullyConnected(RenX::Server *server)
+{
+ this->addServerToServerList(server);
+}
+
void RenX_ServerListPlugin::RenX_OnServerDisconnect(RenX::Server *server, RenX::DisconnectReason)
{
this->updateServerList();
@@ -400,6 +411,45 @@ Jupiter::ReadableString *handle_server_list_page(const Jupiter::ReadableString &
return pluginInstance.getServerListJSON();
}
+Jupiter::ReadableString *handle_server_list_long_page(const Jupiter::ReadableString &)
+{
+ Jupiter::ArrayList servers = RenX::getCore()->getServers();
+ size_t index = 0;
+ RenX::Server *server;
+ Jupiter::String *server_list_long_json = new Jupiter::String(256 * servers.size());
+
+ // regenerate server_list_json
+
+ *server_list_long_json = "["_jrs;
+
+ while (index != servers.size())
+ {
+ server = servers.get(index);
+ if (server->isConnected() && server->isFullyConnected())
+ {
+ *server_list_long_json += "\n\t"_jrs;
+ *server_list_long_json += server_as_long_json(server);
+ ++index;
+ break;
+ }
+ ++index;
+ }
+ while (index != servers.size())
+ {
+ server = servers.get(index);
+ if (server->isConnected() && server->isFullyConnected())
+ {
+ *server_list_long_json += ",\n\t"_jrs;
+ *server_list_long_json += server_as_long_json(server);
+ }
+ ++index;
+ }
+
+ *server_list_long_json += "\n]"_jrs;
+
+ return server_list_long_json;
+}
+
Jupiter::ReadableString *handle_server_page(const Jupiter::ReadableString &query_string)
{
Jupiter::HTTP::HTMLFormResponse html_form_response(query_string);
diff --git a/RenX.ServerList/RenX_ServerList.h b/RenX.ServerList/RenX_ServerList.h
index 44297dd..f00af93 100644
--- a/RenX.ServerList/RenX_ServerList.h
+++ b/RenX.ServerList/RenX_ServerList.h
@@ -28,7 +28,7 @@ class RenX_ServerListPlugin : public RenX::Plugin
public: // RenX_ServerListPlugin
Jupiter::ReadableString *getServerListJSON();
- void addServerToServerList(const RenX::Server *server);
+ void addServerToServerList(RenX::Server *server);
void updateServerList();
RenX_ServerListPlugin();
@@ -48,10 +48,11 @@ private:
STRING_LITERAL_AS_NAMED_REFERENCE(name, "RenX.ServerList");
Jupiter::StringS server_list_json;
- Jupiter::StringS web_hostname, web_path, server_list_page_name, server_page_name;
+ Jupiter::StringS web_hostname, web_path, server_list_page_name, server_list_long_page_name, server_page_name;
};
Jupiter::ReadableString *handle_server_list_page(const Jupiter::ReadableString &);
+Jupiter::ReadableString *handle_server_list_long_page(const Jupiter::ReadableString &);
Jupiter::ReadableString *handle_server_page(const Jupiter::ReadableString &query_string);
#endif // _RENX_SERVERLIST_H_HEADER