diff --git a/data/menu/nullifiedcat/chat.xml b/data/menu/nullifiedcat/chat.xml index 7500fc53..f93f23b9 100755 --- a/data/menu/nullifiedcat/chat.xml +++ b/data/menu/nullifiedcat/chat.xml @@ -118,10 +118,11 @@ - - - - + + + + + diff --git a/src/settings/SettingsIO.cpp b/src/settings/SettingsIO.cpp index 6b4d6ef5..3d9fb25f 100644 --- a/src/settings/SettingsIO.cpp +++ b/src/settings/SettingsIO.cpp @@ -226,9 +226,11 @@ struct migration_struct }; /* clang-format off */ // Use one per line, from -> to -static std::array migrations({ +static std::array migrations({ migration_struct{ "misc.semi-auto", "misc.full-auto" }, - migration_struct{ "cat-bot.abandon-if.bots-gte", "cat-bot.abandon-if.ipc-bots-gte" } + migration_struct{ "cat-bot.abandon-if.bots-gte", "cat-bot.abandon-if.ipc-bots-gte" }, + migration_struct{ "votelogger.partysay-casts", "votelogger.chat.casts" }, + migration_struct{ "votelogger.partysay-casts.f1-only", "votelogger.chat.casts.f1-only" } }); /* clang-format on */ void settings::SettingsReader::finishString(bool complete) diff --git a/src/votelogger.cpp b/src/votelogger.cpp index 1627e359..016d7a21 100644 --- a/src/votelogger.cpp +++ b/src/votelogger.cpp @@ -14,9 +14,11 @@ static settings::Boolean vote_kicky{ "votelogger.autovote.yes", "false" }; static settings::Boolean vote_kickn{ "votelogger.autovote.no", "false" }; static settings::Boolean vote_rage_vote{ "votelogger.autovote.no.rage", "false" }; -static settings::Boolean party_say{ "votelogger.partysay", "true" }; -static settings::Boolean party_say_casts{ "votelogger.partysay-casts", "false" }; -static settings::Boolean party_say_f1_only{ "votelogger.partysay-casts.f1-only", "true" }; +static settings::Boolean chat{ "votelogger.chat", "true" }; +static settings::Boolean chat_partysay{ "votelogger.chat.partysay", "false" }; +static settings::Boolean chat_casts{ "votelogger.chat.casts", "false" }; +static settings::Boolean chat_casts_f1_only{ "votelogger.chat.casts.f1-only", "true" }; +// Leave party and crash, useful for personal party bots static settings::Boolean abandon_and_crash_on_kick{ "votelogger.restart-on-kick", "false" }; namespace votelogger @@ -82,19 +84,19 @@ void dispatchUserMessage(bf_read &buffer, int type) char name[64]; buffer.ReadString(reason, 64, false, nullptr); buffer.ReadString(name, 64, false, nullptr); - auto eid = (unsigned char) buffer.ReadByte(); + auto target = (unsigned char) buffer.ReadByte(); buffer.Seek(0); - eid >>= 1; + target >>= 1; // info is the person getting kicked, // info2 is the person calling the kick. player_info_s info{}, info2{}; - if (!g_IEngine->GetPlayerInfo(eid, &info) || !g_IEngine->GetPlayerInfo(caller, &info2)) + if (!g_IEngine->GetPlayerInfo(target, &info) || !g_IEngine->GetPlayerInfo(caller, &info2)) break; - kicked_player = eid; + kicked_player = target; logging::Info("Vote called to kick %s [U:1:%u] for %s by %s [U:1:%u]", info.name, info.friendsID, reason, info2.name, info2.friendsID); - if (eid == LOCAL_E->m_IDX) + if (target == LOCAL_E->m_IDX) { was_local_player = true; local_kick_timer.update(); @@ -122,12 +124,15 @@ void dispatchUserMessage(bf_read &buffer, int type) vote_command.timer.update(); } } - if (*party_say) + if (*chat_partysay) { char formated_string[256]; std::snprintf(formated_string, sizeof(formated_string), "[CAT] votekick called: %s => %s (%s)", info2.name, info.name, reason); - re::CTFPartyClient::GTFPartyClient()->SendPartyChat(formated_string); + if (chat_partysay) + re::CTFPartyClient::GTFPartyClient()->SendPartyChat(formated_string); } + if (chat) + PrintChat("Votekick called: \x07%06X%s\x01 => \x07%06X%s\x01 (%s)", colors::chat::team(g_pPlayerResource->getTeam(caller)), info2.name, colors::chat::team(g_pPlayerResource->getTeam(target)), info.name, reason); break; } case 47: @@ -205,22 +210,28 @@ class VoteEventListener : public IGameEventListener public: void FireGameEvent(KeyValues *event) override { - if (!*party_say_casts || !*party_say) + if (!*chat_casts || (!*chat_partysay && !chat)) return; const char *name = event->GetName(); if (!strcmp(name, "vote_cast")) { bool vote_option = event->GetInt("vote_option"); - if (*party_say_f1_only && vote_option) + if (*chat_casts_f1_only && vote_option) return; int eid = event->GetInt("entityid"); player_info_s info{}; if (!g_IEngine->GetPlayerInfo(eid, &info)) return; - char formated_string[256]; - std::snprintf(formated_string, sizeof(formated_string), "[CAT] %s [U:1:%u] %s", info.name, info.friendsID, vote_option ? "F2" : "F1"); - re::CTFPartyClient::GTFPartyClient()->SendPartyChat(formated_string); + if (chat_partysay) + { + char formated_string[256]; + std::snprintf(formated_string, sizeof(formated_string), "[CAT] %s [U:1:%u] %s", info.name, info.friendsID, vote_option ? "F2" : "F1"); + + re::CTFPartyClient::GTFPartyClient()->SendPartyChat(formated_string); + } + if (chat) + PrintChat("\x07%06X%s\x01 [U:1:%u] %s", colors::chat::team(g_pPlayerResource->getTeam(eid)), info.name, info.friendsID, vote_option ? "F2" : "F1"); } } };