From 7f29c661bacb861d426871d0c395386de8dd239c Mon Sep 17 00:00:00 2001
From: Skull <86374920+skkuull@users.noreply.github.com>
Date: Sun, 1 Jan 2023 06:32:11 +0300
Subject: [PATCH 1/9] marketing comms
---
src/client/game/demonware/data_types.hpp | 25 ++++++++
.../demonware/services/bdMarketingComms.cpp | 58 ++++++++++++++++++-
.../demonware/services/bdMarketingComms.hpp | 1 +
3 files changed, 83 insertions(+), 1 deletion(-)
diff --git a/src/client/game/demonware/data_types.hpp b/src/client/game/demonware/data_types.hpp
index 9b6a909b..4c7c58d1 100644
--- a/src/client/game/demonware/data_types.hpp
+++ b/src/client/game/demonware/data_types.hpp
@@ -237,4 +237,29 @@ namespace demonware
buffer->read_string(&this->filename);
}
};
+
+ class bdMarketingMessage final : public bdTaskResult
+ {
+ public:
+ uint64_t m_messageID;
+ std::string m_languageCode;
+ std::string m_content;
+ std::string m_metadata;
+
+ void serialize(byte_buffer* buffer) override
+ {
+ buffer->write_uint64(this->m_messageID);
+ buffer->write_string(this->m_languageCode);
+ buffer->write_blob(this->m_content);
+ buffer->write_blob(this->m_metadata);
+ }
+
+ void deserialize(byte_buffer* buffer) override
+ {
+ buffer->read_uint64(&this->m_messageID);
+ buffer->read_string(&this->m_languageCode);
+ buffer->read_blob(&this->m_content);
+ buffer->read_blob(&this->m_metadata);
+ }
+ };
}
diff --git a/src/client/game/demonware/services/bdMarketingComms.cpp b/src/client/game/demonware/services/bdMarketingComms.cpp
index 409b278a..8e344444 100644
--- a/src/client/game/demonware/services/bdMarketingComms.cpp
+++ b/src/client/game/demonware/services/bdMarketingComms.cpp
@@ -7,12 +7,61 @@ namespace demonware
{
this->register_task(1, &bdMarketingComms::getMessages);
this->register_task(4, &bdMarketingComms::reportFullMessagesViewed);
+ this->register_task(5, &bdMarketingComms::getMessages_);
}
void bdMarketingComms::getMessages(service_server* server, byte_buffer* /*buffer*/) const
{
- // TODO:
+ auto motd = new bdMarketingMessage;
+ motd->m_messageID = 1;
+ motd->m_languageCode = "en-US";
+ motd->m_content = R"({
+"title": "
Message of the Day
",
+"content_short": "",
+"h3_header": "^2Welcome to H1-Mod^7
",
+"content_long": "Join our discord to stay tuned for latest updates and news: ^5https://discord.gg/RzzXu5EVnh^7
Visit ^2https://h1.gg^7 for further information!",
+"popup_action_title": "Press 'Esc' or 'Enter' to close",
+"popup_image": "h1_motd_template_1_2"
+})";
+ motd->m_metadata = "{}";
+
+ auto featured = new bdMarketingMessage;
+ featured->m_messageID = 2;
+ featured->m_languageCode = "en-US";
+ featured->m_content = R"({
+ "action_title": "v2.0.0",
+ "image": "h1_motd_360x200_mp_crash",
+ "title": "v2.0.0
",
+ "content_short": "",
+ "h3_header": "CHANGELOG:
",
+ "content_long": "- Added Wine/Proton compatibility
- Added custom zones/maps/weapons support
- Added usermap/mod downloading
- Added GSC support
You can check the whole changelog via: ^2https://docs.h1.gg/changelog^7.",
+ "popup_action_title": "Press 'Esc' or 'Enter' to close",
+ "popup_image": "h1_motd_620x580_mp_crash",
+ "action": "popup"
+})";
+ featured->m_metadata = "{}";
+
+ auto featured2 = new bdMarketingMessage;
+ featured2->m_messageID = 3;
+ featured2->m_languageCode = "en-US";
+ featured2->m_content = R"({
+ "action_title": "Custom Depot System",
+ "image": "h1_motd_dlc_360x200_ch_mtx6_kits",
+ "title": "Custom Depot System
",
+ "content_short": "",
+ "h3_header": "^3No COD Points!^7
",
+ "content_long": "We've added a new depot system to the game
Which you can now collect credits/parts from playing to be used with depots!",
+ "popup_action_title": "Press 'Esc' or 'Enter' to close",
+ "popup_action": "depot",
+ "popup_image": "h1_motd_dlc_620x580_ch_mtx6_kits",
+ "action": "popup"
+})";
+ featured2->m_metadata = "{}";
+
auto reply = server->create_reply(this->task_id());
+ reply->add(motd);
+ reply->add(featured);
+ reply->add(featured2);
reply->send();
}
@@ -22,4 +71,11 @@ namespace demonware
auto reply = server->create_reply(this->task_id());
reply->send();
}
+
+ void bdMarketingComms::getMessages_(service_server* server, byte_buffer* /*buffer*/) const
+ {
+ // TODO:
+ auto reply = server->create_reply(this->task_id());
+ reply->send();
+ }
}
diff --git a/src/client/game/demonware/services/bdMarketingComms.hpp b/src/client/game/demonware/services/bdMarketingComms.hpp
index c973d7ae..8a4aa007 100644
--- a/src/client/game/demonware/services/bdMarketingComms.hpp
+++ b/src/client/game/demonware/services/bdMarketingComms.hpp
@@ -10,5 +10,6 @@ namespace demonware
private:
void getMessages(service_server* server, byte_buffer* buffer) const;
void reportFullMessagesViewed(service_server* server, byte_buffer* buffer) const;
+ void getMessages_(service_server* server, byte_buffer* buffer) const;
};
}
From 6d38fdca527da1b1537402b137b77cfab9e58fc0 Mon Sep 17 00:00:00 2001
From: Skull <86374920+skkuull@users.noreply.github.com>
Date: Sun, 1 Jan 2023 06:36:09 +0300
Subject: [PATCH 2/9] label marketing_motd_once_per_day
---
src/client/game/dvars.cpp | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/src/client/game/dvars.cpp b/src/client/game/dvars.cpp
index 204cc8cb..40294cd4 100644
--- a/src/client/game/dvars.cpp
+++ b/src/client/game/dvars.cpp
@@ -4993,14 +4993,19 @@ namespace dvars
},
{
"marketing_active",
- "Are we allowed to enable Marketing Comms or not",
+ "Enable/Disable Marketing Comms",
generate_hash("marketing_active")
},
{
"marketing_refresh_time",
- "time in seconds to wait before refreshing marketing messages from demonware",
+ "Time in seconds to wait before refreshing marketing messages from demonware",
generate_hash("marketing_refresh_time")
},
+ {
+ "marketing_motd_once_per_day",
+ "Display motd once per day",
+ generate_hash("marketing_motd_once_per_day")
+ },
{
"matchdata_active",
"Are match data uploads enabled",
From a688c40177723cea1ce5f6fd56b364d93102df39 Mon Sep 17 00:00:00 2001
From: Skull <86374920+skkuull@users.noreply.github.com>
Date: Sun, 1 Jan 2023 06:42:28 +0300
Subject: [PATCH 3/9] add and enable marketing
---
data/cdata/ui_scripts/server_list/lobby.lua | 15 +++++++--------
src/client/component/patches.cpp | 3 +++
2 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/data/cdata/ui_scripts/server_list/lobby.lua b/data/cdata/ui_scripts/server_list/lobby.lua
index 8d71585c..7fe06964 100644
--- a/data/cdata/ui_scripts/server_list/lobby.lua
+++ b/data/cdata/ui_scripts/server_list/lobby.lua
@@ -1,7 +1,7 @@
local Lobby = luiglobals.Lobby
local MPLobbyOnline = LUI.mp_menus.MPLobbyOnline
-function LeaveLobby(f5_arg0)
+function LeaveLobby()
LeaveXboxLive()
if Lobby.IsInPrivateParty() == false or Lobby.IsPrivatePartyHost() then
LUI.FlowManager.RequestLeaveMenuByName("menu_xboxlive")
@@ -9,7 +9,7 @@ function LeaveLobby(f5_arg0)
end
end
-function menu_xboxlive(f16_arg0, f16_arg1)
+function menu_xboxlive(f16_arg0)
local menu = LUI.MPLobbyBase.new(f16_arg0, {
menu_title = "@PLATFORM_UI_HEADER_PLAY_MP_CAPS",
memberListState = Lobby.MemberListStates.Prelobby
@@ -17,7 +17,7 @@ function menu_xboxlive(f16_arg0, f16_arg1)
menu:setClass(LUI.MPLobbyOnline)
- local serverListButton = menu:AddButton("@LUA_MENU_SERVERLIST", function(a1, a2)
+ local serverListButton = menu:AddButton("@LUA_MENU_SERVERLIST", function(a1)
LUI.FlowManager.RequestAddMenu(a1, "menu_systemlink_join", true, nil)
end)
serverListButton:setDisabledRefreshRate(500)
@@ -26,10 +26,8 @@ function menu_xboxlive(f16_arg0, f16_arg1)
menu:AddBarracksButton()
menu:AddPersonalizationButton()
menu:AddDepotButton()
-
- -- kinda a weird place to do this, but it's whatever
- -- add "MODS" button below depot button
- local modsButton = menu:AddButton("@MENU_MODS", function(a1, a2)
+
+ menu:AddButton("@MENU_MODS", function(a1)
LUI.FlowManager.RequestAddMenu(a1, "mods_menu", true, nil)
end)
end
@@ -58,6 +56,7 @@ function menu_xboxlive(f16_arg0, f16_arg1)
menu:addElement(self)
end
+ menu:AddMarketingPanel(LUI.MarketingLocation.Featured, LUI.ComScore.ScreenID.PlayOnline)
menu.isSignInMenu = true
menu:registerEventHandler("gain_focus", LUI.MPLobbyOnline.OnGainFocus)
menu:registerEventHandler("player_joined", luiglobals.Cac.PlayerJoinedEvent)
@@ -84,4 +83,4 @@ function menu_xboxlive(f16_arg0, f16_arg1)
return menu
end
-LUI.MenuBuilder.m_types_build["menu_xboxlive"] = menu_xboxlive
+LUI.MenuBuilder.m_types_build["menu_xboxlive"] = menu_xboxlive
\ No newline at end of file
diff --git a/src/client/component/patches.cpp b/src/client/component/patches.cpp
index 215711ea..015b5659 100644
--- a/src/client/component/patches.cpp
+++ b/src/client/component/patches.cpp
@@ -351,6 +351,9 @@ namespace patches
dvars::override::register_float("cg_fovScale", 1.f, 0.1f, 2.f, game::DvarFlags::DVAR_FLAG_SAVED);
dvars::override::register_float("cg_fovMin", 1.f, 1.0f, 90.f, game::DvarFlags::DVAR_FLAG_SAVED);
+ // Enable Marketing Comms
+ dvars::override::register_int("marketing_active", 1, 1, 1, game::DVAR_FLAG_WRITE);
+
// Makes com_maxfps saved dvar
dvars::override::register_int("com_maxfps", 0, 0, 1000, game::DVAR_FLAG_SAVED);
From b9851d7f68e5d564b6ac0c7a4b3b900d0b061c6b Mon Sep 17 00:00:00 2001
From: Skull <86374920+skkuull@users.noreply.github.com>
Date: Sun, 1 Jan 2023 06:54:56 +0300
Subject: [PATCH 4/9] small fix
---
data/cdata/ui_scripts/server_list/lobby.lua | 1 +
1 file changed, 1 insertion(+)
diff --git a/data/cdata/ui_scripts/server_list/lobby.lua b/data/cdata/ui_scripts/server_list/lobby.lua
index 7fe06964..a5ecb57a 100644
--- a/data/cdata/ui_scripts/server_list/lobby.lua
+++ b/data/cdata/ui_scripts/server_list/lobby.lua
@@ -56,6 +56,7 @@ function menu_xboxlive(f16_arg0)
menu:addElement(self)
end
+ menu:AddMenuDescription(1)
menu:AddMarketingPanel(LUI.MarketingLocation.Featured, LUI.ComScore.ScreenID.PlayOnline)
menu.isSignInMenu = true
menu:registerEventHandler("gain_focus", LUI.MPLobbyOnline.OnGainFocus)
From befd3653fcfb8010c11283586c38d892568cd43f Mon Sep 17 00:00:00 2001
From: Skull <86374920+skkuull@users.noreply.github.com>
Date: Sun, 1 Jan 2023 07:12:40 +0300
Subject: [PATCH 5/9] use our online json data
Co-Authored-By: Hosseinpourziyaie
---
.../demonware/services/bdMarketingComms.cpp | 38 ++++---------------
1 file changed, 7 insertions(+), 31 deletions(-)
diff --git a/src/client/game/demonware/services/bdMarketingComms.cpp b/src/client/game/demonware/services/bdMarketingComms.cpp
index 8e344444..655ba3a6 100644
--- a/src/client/game/demonware/services/bdMarketingComms.cpp
+++ b/src/client/game/demonware/services/bdMarketingComms.cpp
@@ -1,4 +1,5 @@
#include
+#include
#include "../services.hpp"
namespace demonware
@@ -12,50 +13,25 @@ namespace demonware
void bdMarketingComms::getMessages(service_server* server, byte_buffer* /*buffer*/) const
{
+ auto motd_content = utils::http::get_data("https://h1.gg/data/motd.json");
auto motd = new bdMarketingMessage;
motd->m_messageID = 1;
motd->m_languageCode = "en-US";
- motd->m_content = R"({
-"title": "Message of the Day
",
-"content_short": "",
-"h3_header": "^2Welcome to H1-Mod^7
",
-"content_long": "Join our discord to stay tuned for latest updates and news: ^5https://discord.gg/RzzXu5EVnh^7
Visit ^2https://h1.gg^7 for further information!",
-"popup_action_title": "Press 'Esc' or 'Enter' to close",
-"popup_image": "h1_motd_template_1_2"
-})";
+ motd->m_content = motd_content.value().buffer.data();
motd->m_metadata = "{}";
+ auto featured_content = utils::http::get_data("https://h1.gg/data/featured.json");
auto featured = new bdMarketingMessage;
featured->m_messageID = 2;
featured->m_languageCode = "en-US";
- featured->m_content = R"({
- "action_title": "v2.0.0",
- "image": "h1_motd_360x200_mp_crash",
- "title": "v2.0.0
",
- "content_short": "",
- "h3_header": "CHANGELOG:
",
- "content_long": "- Added Wine/Proton compatibility
- Added custom zones/maps/weapons support
- Added usermap/mod downloading
- Added GSC support
You can check the whole changelog via: ^2https://docs.h1.gg/changelog^7.",
- "popup_action_title": "Press 'Esc' or 'Enter' to close",
- "popup_image": "h1_motd_620x580_mp_crash",
- "action": "popup"
-})";
+ featured->m_content = featured_content.value().buffer.data();
featured->m_metadata = "{}";
+ auto featured2_content = utils::http::get_data("https://h1.gg/data/featured2.json");
auto featured2 = new bdMarketingMessage;
featured2->m_messageID = 3;
featured2->m_languageCode = "en-US";
- featured2->m_content = R"({
- "action_title": "Custom Depot System",
- "image": "h1_motd_dlc_360x200_ch_mtx6_kits",
- "title": "Custom Depot System
",
- "content_short": "",
- "h3_header": "^3No COD Points!^7
",
- "content_long": "We've added a new depot system to the game
Which you can now collect credits/parts from playing to be used with depots!",
- "popup_action_title": "Press 'Esc' or 'Enter' to close",
- "popup_action": "depot",
- "popup_image": "h1_motd_dlc_620x580_ch_mtx6_kits",
- "action": "popup"
-})";
+ featured2->m_content = featured2_content.value().buffer.data();
featured2->m_metadata = "{}";
auto reply = server->create_reply(this->task_id());
From 65cffef560ecdbcf01c29a2a587850b25c08b65e Mon Sep 17 00:00:00 2001
From: Vlad
Date: Sun, 1 Jan 2023 18:22:58 +0300
Subject: [PATCH 6/9] workaround for back button overlapping (#441)
---
data/cdata/ui_scripts/server_list/lobby.lua | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/data/cdata/ui_scripts/server_list/lobby.lua b/data/cdata/ui_scripts/server_list/lobby.lua
index a5ecb57a..e2d48619 100644
--- a/data/cdata/ui_scripts/server_list/lobby.lua
+++ b/data/cdata/ui_scripts/server_list/lobby.lua
@@ -26,7 +26,7 @@ function menu_xboxlive(f16_arg0)
menu:AddBarracksButton()
menu:AddPersonalizationButton()
menu:AddDepotButton()
-
+
menu:AddButton("@MENU_MODS", function(a1)
LUI.FlowManager.RequestAddMenu(a1, "mods_menu", true, nil)
end)
@@ -81,6 +81,15 @@ function menu_xboxlive(f16_arg0)
end
end)
+ menu:AddHelp({
+ name = "add_button_helper_text",
+ button_ref = "",
+ helper_text = " ",
+ side = "left",
+ priority = -9000,
+ clickable = false
+ })
+
return menu
end
From 06a30e0458f549a5ca6504175c0be3371041af4e Mon Sep 17 00:00:00 2001
From: Skull <86374920+skkuull@users.noreply.github.com>
Date: Sun, 1 Jan 2023 18:37:06 +0300
Subject: [PATCH 7/9] small fix
---
.../demonware/services/bdMarketingComms.cpp | 33 ++++++++++++-------
1 file changed, 21 insertions(+), 12 deletions(-)
diff --git a/src/client/game/demonware/services/bdMarketingComms.cpp b/src/client/game/demonware/services/bdMarketingComms.cpp
index 655ba3a6..48b4f52a 100644
--- a/src/client/game/demonware/services/bdMarketingComms.cpp
+++ b/src/client/game/demonware/services/bdMarketingComms.cpp
@@ -15,24 +15,33 @@ namespace demonware
{
auto motd_content = utils::http::get_data("https://h1.gg/data/motd.json");
auto motd = new bdMarketingMessage;
- motd->m_messageID = 1;
- motd->m_languageCode = "en-US";
- motd->m_content = motd_content.value().buffer.data();
- motd->m_metadata = "{}";
+ if (motd_content.has_value())
+ {
+ motd->m_messageID = 1;
+ motd->m_languageCode = "en-US";
+ motd->m_content = motd_content.value().buffer.data();
+ motd->m_metadata = "{}";
+ }
auto featured_content = utils::http::get_data("https://h1.gg/data/featured.json");
auto featured = new bdMarketingMessage;
- featured->m_messageID = 2;
- featured->m_languageCode = "en-US";
- featured->m_content = featured_content.value().buffer.data();
- featured->m_metadata = "{}";
+ if (featured_content.has_value())
+ {
+ featured->m_messageID = 2;
+ featured->m_languageCode = "en-US";
+ featured->m_content = featured_content.value().buffer.data();
+ featured->m_metadata = "{}";
+ }
auto featured2_content = utils::http::get_data("https://h1.gg/data/featured2.json");
auto featured2 = new bdMarketingMessage;
- featured2->m_messageID = 3;
- featured2->m_languageCode = "en-US";
- featured2->m_content = featured2_content.value().buffer.data();
- featured2->m_metadata = "{}";
+ if (featured2_content.has_value())
+ {
+ featured2->m_messageID = 3;
+ featured2->m_languageCode = "en-US";
+ featured2->m_content = featured2_content.value().buffer.data();
+ featured2->m_metadata = "{}";
+ }
auto reply = server->create_reply(this->task_id());
reply->add(motd);
From 8185fd550c7f8b0f2a8d49934f4de2299afc8d64 Mon Sep 17 00:00:00 2001
From: m
Date: Mon, 2 Jan 2023 10:39:34 -0600
Subject: [PATCH 8/9] only send necessary data
---
src/client/game/demonware/data_types.hpp | 42 +++++++++----------
.../demonware/services/bdMarketingComms.cpp | 22 +++++-----
2 files changed, 33 insertions(+), 31 deletions(-)
diff --git a/src/client/game/demonware/data_types.hpp b/src/client/game/demonware/data_types.hpp
index 4c7c58d1..8d1bb377 100644
--- a/src/client/game/demonware/data_types.hpp
+++ b/src/client/game/demonware/data_types.hpp
@@ -239,27 +239,27 @@ namespace demonware
};
class bdMarketingMessage final : public bdTaskResult
- {
- public:
- uint64_t m_messageID;
- std::string m_languageCode;
- std::string m_content;
- std::string m_metadata;
+ {
+ public:
+ uint64_t m_messageID;
+ std::string m_languageCode;
+ std::string m_content;
+ std::string m_metadata;
- void serialize(byte_buffer* buffer) override
- {
- buffer->write_uint64(this->m_messageID);
- buffer->write_string(this->m_languageCode);
- buffer->write_blob(this->m_content);
- buffer->write_blob(this->m_metadata);
- }
+ void serialize(byte_buffer* buffer) override
+ {
+ buffer->write_uint64(this->m_messageID);
+ buffer->write_string(this->m_languageCode);
+ buffer->write_blob(this->m_content);
+ buffer->write_blob(this->m_metadata);
+ }
- void deserialize(byte_buffer* buffer) override
- {
- buffer->read_uint64(&this->m_messageID);
- buffer->read_string(&this->m_languageCode);
- buffer->read_blob(&this->m_content);
- buffer->read_blob(&this->m_metadata);
- }
- };
+ void deserialize(byte_buffer* buffer) override
+ {
+ buffer->read_uint64(&this->m_messageID);
+ buffer->read_string(&this->m_languageCode);
+ buffer->read_blob(&this->m_content);
+ buffer->read_blob(&this->m_metadata);
+ }
+ };
}
diff --git a/src/client/game/demonware/services/bdMarketingComms.cpp b/src/client/game/demonware/services/bdMarketingComms.cpp
index 48b4f52a..56f0f999 100644
--- a/src/client/game/demonware/services/bdMarketingComms.cpp
+++ b/src/client/game/demonware/services/bdMarketingComms.cpp
@@ -1,4 +1,5 @@
#include
+
#include
#include "../services.hpp"
@@ -13,40 +14,41 @@ namespace demonware
void bdMarketingComms::getMessages(service_server* server, byte_buffer* /*buffer*/) const
{
- auto motd_content = utils::http::get_data("https://h1.gg/data/motd.json");
- auto motd = new bdMarketingMessage;
+ auto reply = server->create_reply(this->task_id());
+
+ const auto motd_content = utils::http::get_data("https://h1.gg/data/motd.json");
if (motd_content.has_value())
{
+ const auto motd = new bdMarketingMessage;
motd->m_messageID = 1;
motd->m_languageCode = "en-US";
motd->m_content = motd_content.value().buffer.data();
motd->m_metadata = "{}";
+ reply->add(motd);
}
- auto featured_content = utils::http::get_data("https://h1.gg/data/featured.json");
- auto featured = new bdMarketingMessage;
+ const auto featured_content = utils::http::get_data("https://h1.gg/data/featured.json");
if (featured_content.has_value())
{
+ const auto featured = new bdMarketingMessage;
featured->m_messageID = 2;
featured->m_languageCode = "en-US";
featured->m_content = featured_content.value().buffer.data();
featured->m_metadata = "{}";
+ reply->add(featured);
}
- auto featured2_content = utils::http::get_data("https://h1.gg/data/featured2.json");
- auto featured2 = new bdMarketingMessage;
+ const auto featured2_content = utils::http::get_data("https://h1.gg/data/featured2.json");
if (featured2_content.has_value())
{
+ const auto featured2 = new bdMarketingMessage;
featured2->m_messageID = 3;
featured2->m_languageCode = "en-US";
featured2->m_content = featured2_content.value().buffer.data();
featured2->m_metadata = "{}";
+ reply->add(featured2);
}
- auto reply = server->create_reply(this->task_id());
- reply->add(motd);
- reply->add(featured);
- reply->add(featured2);
reply->send();
}
From bdc18c1d2c285460fc9f3d433066c8594da93540 Mon Sep 17 00:00:00 2001
From: Skull <86374920+skkuull@users.noreply.github.com>
Date: Tue, 3 Jan 2023 07:52:29 +0300
Subject: [PATCH 9/9] add motd image
---
src/client/component/motd.cpp | 37 +++++++++++++++++++++++++++++++++++
1 file changed, 37 insertions(+)
create mode 100644 src/client/component/motd.cpp
diff --git a/src/client/component/motd.cpp b/src/client/component/motd.cpp
new file mode 100644
index 00000000..632a0a3c
--- /dev/null
+++ b/src/client/component/motd.cpp
@@ -0,0 +1,37 @@
+#include
+#include "loader/component_loader.hpp"
+
+#include "materials.hpp"
+
+#include "game/game.hpp"
+
+#include
+
+namespace motd
+{
+ class component final : public component_interface
+ {
+ public:
+ void post_load() override
+ {
+ std::thread([]
+ {
+ auto data = utils::http::get_data("https://h1.gg/data/motd.png");
+ if (data.has_value())
+ {
+ materials::add("motd_image", data.value().buffer);
+ }
+ }).detach();
+ }
+
+ void post_unpack() override
+ {
+ if (game::environment::is_sp())
+ {
+ return;
+ }
+ }
+ };
+}
+
+REGISTER_COMPONENT(motd::component)
\ No newline at end of file