mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-11 21:01:29 +00:00
* Initial commit checkpoint * More functions converted * Commify * More functions * Fin * Sort declarations * Split functions between files * Bots * Update strings.h * Split * Revert find replaces * Repository template * Money * Misc function * Update CMakeLists.txt * Saylink * Update strings.cpp * Swap Strings::Saylink for Saylink::Create since saylink is coupled to zone database * API casings
75 lines
1.8 KiB
C++
Executable File
75 lines
1.8 KiB
C++
Executable File
#include "../client.h"
|
|
#include "../worldserver.h"
|
|
|
|
extern WorldServer worldserver;
|
|
|
|
void command_ban(Client *c, const Seperator *sep)
|
|
{
|
|
int arguments = sep->argnum;
|
|
if (arguments < 2) {
|
|
c->Message(Chat::White, "Usage: #ban [Character Name] [Reason]");
|
|
return;
|
|
}
|
|
|
|
std::string character_name = sep->arg[1];
|
|
if (character_name.empty()) {
|
|
c->Message(Chat::White, "Usage: #ban [Character Name] [Reason]");
|
|
return;
|
|
}
|
|
|
|
std::string reason = sep->argplus[2];
|
|
if (reason.empty()) {
|
|
c->Message(Chat::White, "Usage: #ban [Character Name] [Reason]");
|
|
return;
|
|
}
|
|
|
|
auto account_id = database.GetAccountIDByChar(character_name.c_str());
|
|
if (!account_id) {
|
|
c->Message(
|
|
Chat::White,
|
|
fmt::format(
|
|
"Character {} does not exist.",
|
|
character_name
|
|
).c_str()
|
|
);
|
|
return;
|
|
}
|
|
|
|
auto query = fmt::format(
|
|
"UPDATE account SET status = -2, ban_reason = '{}' WHERE id = {}",
|
|
Strings::Escape(reason),
|
|
account_id
|
|
);
|
|
auto results = database.QueryDatabase(query);
|
|
|
|
c->Message(
|
|
Chat::White,
|
|
fmt::format(
|
|
"Account ID {} with the character {} has been banned for the following reason: \"{}\"",
|
|
account_id,
|
|
character_name,
|
|
reason
|
|
).c_str()
|
|
);
|
|
|
|
ServerPacket flagUpdatePack(ServerOP_FlagUpdate, sizeof(ServerFlagUpdate_Struct));
|
|
auto sfus = (ServerFlagUpdate_Struct *) flagUpdatePack.pBuffer;
|
|
sfus->account_id = account_id;
|
|
sfus->admin = -2;
|
|
worldserver.SendPacket(&flagUpdatePack);
|
|
|
|
auto client = entity_list.GetClientByName(character_name.c_str());
|
|
if (client) {
|
|
client->WorldKick();
|
|
return;
|
|
}
|
|
|
|
ServerPacket kickPlayerPack(ServerOP_KickPlayer, sizeof(ServerKickPlayer_Struct));
|
|
auto skp = (ServerKickPlayer_Struct *) kickPlayerPack.pBuffer;
|
|
strcpy(skp->adminname, c->GetName());
|
|
strcpy(skp->name, character_name.c_str());
|
|
skp->adminrank = c->Admin();
|
|
worldserver.SendPacket(&kickPlayerPack);
|
|
}
|
|
|