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