mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-11 21:01:29 +00:00
* [Commands] Cleanup #emote Command. - Cleanup messages and logic. - Allow `^` separator to send multiple messages by name, world, or zone. * Update emote.cpp
58 lines
1.3 KiB
C++
Executable File
58 lines
1.3 KiB
C++
Executable File
#include "../client.h"
|
|
#include "../worldserver.h"
|
|
|
|
extern WorldServer worldserver;
|
|
|
|
void command_emote(Client *c, const Seperator *sep)
|
|
{
|
|
auto arguments = sep->argnum;
|
|
if (arguments < 3 || !sep->IsNumber(2)) {
|
|
c->Message(Chat::White, "Usage: #emote [Name] [Type] [Message]");
|
|
c->Message(Chat::White, "Usage: #emote world [Type] [Message]");
|
|
c->Message(Chat::White, "Usage: #emote zone [Type] [Message]");
|
|
return;
|
|
}
|
|
|
|
if (!worldserver.Connected()) {
|
|
c->Message(Chat::White, "Error: World server disconnected!");
|
|
return;
|
|
}
|
|
|
|
bool is_world = !strcasecmp(sep->arg[1], "world");
|
|
bool is_zone = !strcasecmp(sep->arg[1], "zone");
|
|
|
|
const std::string emote_message = sep->argplus[3];
|
|
const auto emote_type = std::stoul(sep->arg[2]);
|
|
|
|
if (is_zone) {
|
|
if (!Strings::Contains(emote_message, "^")) {
|
|
entity_list.Message(0, emote_type, emote_message.c_str());
|
|
return;
|
|
}
|
|
|
|
for (const auto& m : Strings::Split(emote_message, "^")) {
|
|
entity_list.Message(0, emote_type, m.c_str());
|
|
}
|
|
} else {
|
|
if (!Strings::Contains(emote_message, "^")) {
|
|
worldserver.SendEmoteMessage(
|
|
is_world ? 0 : sep->arg[1],
|
|
0,
|
|
emote_type,
|
|
emote_message.c_str()
|
|
);
|
|
return;
|
|
}
|
|
|
|
for (const auto& m : Strings::Split(emote_message, "^")) {
|
|
worldserver.SendEmoteMessage(
|
|
is_world ? 0 : sep->arg[1],
|
|
0,
|
|
emote_type,
|
|
m.c_str()
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|