mirror of
https://github.com/diamante0018/BlackOpsPlugin.git
synced 2025-04-19 18:12:54 +00:00
mute/unmute chat
This commit is contained in:
parent
079f75c434
commit
7ca0ab528e
@ -1,11 +1,60 @@
|
||||
#include <stdinc.hpp>
|
||||
|
||||
#include "loader/component_loader.hpp"
|
||||
#include "utils/string.hpp"
|
||||
|
||||
#include "command.hpp"
|
||||
|
||||
namespace chat
|
||||
{
|
||||
namespace
|
||||
{
|
||||
std::unordered_set<std::uint64_t> mute_list{};
|
||||
|
||||
void mute_player(const game::client_s* cl)
|
||||
{
|
||||
if (mute_list.contains(cl->xuid))
|
||||
{
|
||||
game::SV_GameSendServerCommand(-1, game::SV_CMD_CAN_IGNORE,
|
||||
utils::string::va("%c \"%s is already muted\"", 0x65, cl->name));
|
||||
return;
|
||||
}
|
||||
|
||||
mute_list.insert(cl->xuid);
|
||||
}
|
||||
|
||||
void unmute_player(const game::client_s* cl)
|
||||
{
|
||||
mute_list.erase(cl->xuid);
|
||||
|
||||
game::SV_GameSendServerCommand(cl->gentity->entnum, game::SV_CMD_CAN_IGNORE,
|
||||
utils::string::va("%c \"You were unmuted\"", 0x65));
|
||||
}
|
||||
|
||||
void client_command(int clientNumber)
|
||||
{
|
||||
char buf[1024] = {0};
|
||||
|
||||
if (game::g_entities[clientNumber].client == nullptr)
|
||||
{
|
||||
// Not in game
|
||||
return;
|
||||
}
|
||||
|
||||
game::SV_Cmd_ArgvBuffer(0, buf, sizeof(buf));
|
||||
|
||||
if (utils::string::starts_with(buf, "say") &&
|
||||
mute_list.contains(game::svs_clients[clientNumber].xuid))
|
||||
{
|
||||
game::SV_GameSendServerCommand(clientNumber, game::SV_CMD_CAN_IGNORE,
|
||||
utils::string::va("%c \"You are muted\"", 0x65));
|
||||
return;
|
||||
}
|
||||
|
||||
game::ClientCommand(clientNumber);
|
||||
}
|
||||
}
|
||||
|
||||
class component final : public component_interface
|
||||
{
|
||||
public:
|
||||
@ -14,6 +63,10 @@ namespace chat
|
||||
add_chat_commands();
|
||||
}
|
||||
|
||||
void pre_destroy() override
|
||||
{
|
||||
}
|
||||
|
||||
private:
|
||||
static void add_chat_commands()
|
||||
{
|
||||
@ -40,6 +93,50 @@ namespace chat
|
||||
const auto message = params.join(2);
|
||||
game::G_Say(gentity, nullptr, 0, message.data());
|
||||
});
|
||||
|
||||
command::add("mutePlayer", [](const command::params& params)
|
||||
{
|
||||
if (params.size() < 2)
|
||||
{
|
||||
game::Com_Printf(game::CON_CHANNEL_DONT_FILTER,
|
||||
"Usage: mutePlayer <client number>\n");
|
||||
return;
|
||||
}
|
||||
|
||||
const auto* client = game::SV_GetPlayerByNum();
|
||||
|
||||
if (client == nullptr)
|
||||
return;
|
||||
|
||||
assert(client->gentity != nullptr);
|
||||
|
||||
if (client->gentity->client == nullptr)
|
||||
return;
|
||||
|
||||
mute_player(client);
|
||||
});
|
||||
|
||||
command::add("unmutePlayer", [](const command::params& params)
|
||||
{
|
||||
if (params.size() < 2)
|
||||
{
|
||||
game::Com_Printf(game::CON_CHANNEL_DONT_FILTER,
|
||||
"Usage: unmutePlayer <client number>\n");
|
||||
return;
|
||||
}
|
||||
|
||||
const auto* client = game::SV_GetPlayerByNum();
|
||||
|
||||
if (client == nullptr)
|
||||
return;
|
||||
|
||||
assert(client->gentity != nullptr);
|
||||
|
||||
if (client->gentity->client == nullptr)
|
||||
return;
|
||||
|
||||
unmute_player(client);
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@ -533,20 +533,26 @@ namespace game
|
||||
struct client_s
|
||||
{
|
||||
clientHeader_t header;
|
||||
const char* dropReason;
|
||||
char userinfo[1024];
|
||||
char reliableCommandBuffer[16384];
|
||||
int reliableCommandBufferNext;
|
||||
svscmd_info_t reliableCommandInfo[128];
|
||||
int reliableSequence;
|
||||
int reliableAcknowledge;
|
||||
int reliableSent;
|
||||
int messageAcknowledge;
|
||||
int gamestateMessageNum;
|
||||
int challenge;
|
||||
usercmd_s lastUsercmd;
|
||||
int lastClientCommand;
|
||||
char lastClientCommandString[1024];
|
||||
gentity_s* gentity;
|
||||
const char* dropReason; // 1812
|
||||
char userinfo[1024]; // 1816
|
||||
char reliableCommandBuffer[16384]; // 2840
|
||||
int reliableCommandBufferNext; // 19224
|
||||
svscmd_info_t reliableCommandInfo[128]; // 19228
|
||||
int reliableSequence; // 20764
|
||||
int reliableAcknowledge; // 20768
|
||||
int reliableSent; // 20772
|
||||
int messageAcknowledge; // 20776
|
||||
int gamestateMessageNum; // 20780
|
||||
int challenge; // 20784
|
||||
usercmd_s lastUsercmd; // 20788
|
||||
int lastClientCommand; // 20840
|
||||
char lastClientCommandString[1024]; // 20844
|
||||
gentity_s* gentity; // 21868
|
||||
char name[32]; // 21872
|
||||
char clanAbbrev[5]; // 21904
|
||||
unsigned __int64 xuid; // 21912
|
||||
unsigned char __pad0[0x76D48];
|
||||
};
|
||||
|
||||
static_assert(sizeof(client_s) == 0x7C2E8);
|
||||
}
|
||||
|
@ -13,6 +13,8 @@ namespace game
|
||||
WEAK symbol<void(LocalClientNum_t, int controllerIndex, const char* text)> Cmd_ExecuteSingleCommand{0x50B470, 0x0};
|
||||
|
||||
WEAK symbol<void(client_s*, svscmd_type, const char*, ...)> SV_SendServerCommand{0x588B10, 0x0};
|
||||
WEAK symbol<void(int, svscmd_type, const char*)> SV_GameSendServerCommand{0x6B8730, 0x0};
|
||||
WEAK symbol<void(int, char*, int)> SV_Cmd_ArgvBuffer{0x462CB0, 0x0};
|
||||
WEAK symbol<void(client_s*, const char*)> SV_DelayDropClient{0x4A8DC0, 0x0};
|
||||
WEAK symbol<client_s*()> SV_GetPlayerByName{0x875180, 0x0};
|
||||
WEAK symbol<client_s*()> SV_GetPlayerByNum{0x875260, 0x0};
|
||||
@ -33,6 +35,7 @@ namespace game
|
||||
WEAK symbol<char*(char*)> I_CleanStr{0x4B0700, 0x0};
|
||||
|
||||
WEAK symbol<char*(int)> ConcatArgs{0x5D5F10, 0x0};
|
||||
WEAK symbol<void(int)> ClientCommand{0x63DB70, 0x0};
|
||||
WEAK symbol<void(gentity_s*, gentity_s*, int, const char*)> G_Say{0x51BBD0, 0x0};
|
||||
|
||||
WEAK symbol<void(gentity_s*, unsigned __int16, unsigned int)> Scr_Notify{0x458D30, 0x0};
|
||||
@ -44,6 +47,7 @@ namespace game
|
||||
WEAK symbol<CmdArgs> cmd_args{0x355BD88, 0x0};
|
||||
WEAK symbol<int> dvarCount{0x385BE74, 0x0};
|
||||
WEAK symbol<dvar_t*> sortedDvars{0x385BE88, 0x0};
|
||||
WEAK symbol<gentity_s> g_entities{0x32E5784, 0x0};
|
||||
WEAK symbol<client_s> svs_clients{0x372D11C, 0x0};
|
||||
WEAK symbol<gentity_s> g_entities{0x32E5640, 0x0};
|
||||
WEAK symbol<int> level_time{0x3443F4C, 0x0};
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user