mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-11 21:01:29 +00:00
* [Saylinks] Convert all GM Command Saylinks to Silent Saylinks. - This cleans up all non-silent GM Command Saylinks that we had before due to the way they worked before. All saylinks like this should be silent now. - Add source short hand capability for say links with same link as text. * Defaults to r anyway. * Spacing.
266 lines
5.4 KiB
C++
Executable File
266 lines
5.4 KiB
C++
Executable File
#include "../client.h"
|
|
#include "../corpse.h"
|
|
#include "../object.h"
|
|
#include "../doors.h"
|
|
|
|
void command_list(Client *c, const Seperator *sep)
|
|
{
|
|
std::string search_type;
|
|
if (strcasecmp(sep->arg[1], "npcs") == 0) {
|
|
search_type = "npcs";
|
|
}
|
|
|
|
if (strcasecmp(sep->arg[1], "players") == 0) {
|
|
search_type = "players";
|
|
}
|
|
|
|
if (strcasecmp(sep->arg[1], "corpses") == 0) {
|
|
search_type = "corpses";
|
|
}
|
|
|
|
if (strcasecmp(sep->arg[1], "doors") == 0) {
|
|
search_type = "doors";
|
|
}
|
|
|
|
if (strcasecmp(sep->arg[1], "objects") == 0) {
|
|
search_type = "objects";
|
|
}
|
|
|
|
if (search_type.length() > 0) {
|
|
|
|
int entity_count = 0;
|
|
int found_count = 0;
|
|
|
|
std::string search_string;
|
|
|
|
if (sep->arg[2]) {
|
|
search_string = sep->arg[2];
|
|
}
|
|
|
|
/**
|
|
* NPC
|
|
*/
|
|
if (search_type.find("npcs") != std::string::npos) {
|
|
auto &entity_list_search = entity_list.GetMobList();
|
|
|
|
for (auto &itr : entity_list_search) {
|
|
Mob *entity = itr.second;
|
|
if (!entity->IsNPC()) {
|
|
continue;
|
|
}
|
|
|
|
entity_count++;
|
|
|
|
std::string entity_name = entity->GetName();
|
|
|
|
/**
|
|
* Filter by name
|
|
*/
|
|
if (search_string.length() > 0 && entity_name.find(search_string) == std::string::npos) {
|
|
continue;
|
|
}
|
|
|
|
std::string saylink = StringFormat(
|
|
"#goto %.0f %0.f %.0f",
|
|
entity->GetX(),
|
|
entity->GetY(),
|
|
entity->GetZ() + (entity->IsBoat() ? 50 : 0));
|
|
|
|
c->Message(
|
|
0,
|
|
"| %s | ID %5d | %s | x %.0f | y %0.f | z %.0f",
|
|
Saylink::Silent(saylink, "Goto").c_str(),
|
|
entity->GetID(),
|
|
entity->GetName(),
|
|
entity->GetX(),
|
|
entity->GetY(),
|
|
entity->GetZ()
|
|
);
|
|
|
|
found_count++;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Client
|
|
*/
|
|
if (search_type.find("players") != std::string::npos) {
|
|
auto &entity_list_search = entity_list.GetClientList();
|
|
|
|
for (auto &itr : entity_list_search) {
|
|
Client *entity = itr.second;
|
|
|
|
entity_count++;
|
|
|
|
std::string entity_name = entity->GetName();
|
|
|
|
/**
|
|
* Filter by name
|
|
*/
|
|
if (search_string.length() > 0 && entity_name.find(search_string) == std::string::npos) {
|
|
continue;
|
|
}
|
|
|
|
std::string saylink = StringFormat(
|
|
"#goto %.0f %0.f %.0f",
|
|
entity->GetX(),
|
|
entity->GetY(),
|
|
entity->GetZ());
|
|
|
|
c->Message(
|
|
0,
|
|
"| %s | ID %5d | %s | x %.0f | y %0.f | z %.0f",
|
|
Saylink::Silent(saylink, "Goto").c_str(),
|
|
entity->GetID(),
|
|
entity->GetName(),
|
|
entity->GetX(),
|
|
entity->GetY(),
|
|
entity->GetZ()
|
|
);
|
|
|
|
found_count++;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Corpse
|
|
*/
|
|
if (search_type.find("corpses") != std::string::npos) {
|
|
auto &entity_list_search = entity_list.GetCorpseList();
|
|
|
|
for (auto &itr : entity_list_search) {
|
|
Corpse *entity = itr.second;
|
|
|
|
entity_count++;
|
|
|
|
std::string entity_name = entity->GetName();
|
|
|
|
/**
|
|
* Filter by name
|
|
*/
|
|
if (search_string.length() > 0 && entity_name.find(search_string) == std::string::npos) {
|
|
continue;
|
|
}
|
|
|
|
std::string saylink = StringFormat(
|
|
"#goto %.0f %0.f %.0f",
|
|
entity->GetX(),
|
|
entity->GetY(),
|
|
entity->GetZ());
|
|
|
|
c->Message(
|
|
0,
|
|
"| %s | ID %5d | %s | x %.0f | y %0.f | z %.0f",
|
|
Saylink::Silent(saylink, "Goto").c_str(),
|
|
entity->GetID(),
|
|
entity->GetName(),
|
|
entity->GetX(),
|
|
entity->GetY(),
|
|
entity->GetZ()
|
|
);
|
|
|
|
found_count++;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Doors
|
|
*/
|
|
if (search_type.find("doors") != std::string::npos) {
|
|
auto &entity_list_search = entity_list.GetDoorsList();
|
|
|
|
for (auto &itr : entity_list_search) {
|
|
Doors *entity = itr.second;
|
|
|
|
entity_count++;
|
|
|
|
std::string entity_name = entity->GetDoorName();
|
|
|
|
/**
|
|
* Filter by name
|
|
*/
|
|
if (search_string.length() > 0 && entity_name.find(search_string) == std::string::npos) {
|
|
continue;
|
|
}
|
|
|
|
std::string saylink = StringFormat(
|
|
"#goto %.0f %0.f %.0f",
|
|
entity->GetX(),
|
|
entity->GetY(),
|
|
entity->GetZ());
|
|
|
|
c->Message(
|
|
0,
|
|
"| %s | Entity ID %5d | Door ID %i | %s | x %.0f | y %0.f | z %.0f",
|
|
Saylink::Silent(saylink, "Goto").c_str(),
|
|
entity->GetID(),
|
|
entity->GetDoorID(),
|
|
entity->GetDoorName(),
|
|
entity->GetX(),
|
|
entity->GetY(),
|
|
entity->GetZ()
|
|
);
|
|
|
|
found_count++;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Objects
|
|
*/
|
|
if (search_type.find("objects") != std::string::npos) {
|
|
auto &entity_list_search = entity_list.GetObjectList();
|
|
|
|
for (auto &itr : entity_list_search) {
|
|
Object *entity = itr.second;
|
|
|
|
entity_count++;
|
|
|
|
std::string entity_name = entity->GetModelName();
|
|
|
|
/**
|
|
* Filter by name
|
|
*/
|
|
if (search_string.length() > 0 && entity_name.find(search_string) == std::string::npos) {
|
|
continue;
|
|
}
|
|
|
|
std::string saylink = StringFormat(
|
|
"#goto %.0f %0.f %.0f",
|
|
entity->GetX(),
|
|
entity->GetY(),
|
|
entity->GetZ());
|
|
|
|
c->Message(
|
|
0,
|
|
"| %s | Entity ID %5d | Object DBID %i | %s | x %.0f | y %0.f | z %.0f",
|
|
Saylink::Silent(saylink, "Goto").c_str(),
|
|
entity->GetID(),
|
|
entity->GetDBID(),
|
|
entity->GetModelName(),
|
|
entity->GetX(),
|
|
entity->GetY(),
|
|
entity->GetZ()
|
|
);
|
|
|
|
found_count++;
|
|
}
|
|
}
|
|
|
|
if (found_count) {
|
|
c->Message(
|
|
0, "Found (%i) of type (%s) in zone (%i) total",
|
|
found_count,
|
|
search_type.c_str(),
|
|
entity_count
|
|
);
|
|
}
|
|
}
|
|
else {
|
|
c->Message(Chat::White, "Usage of #list");
|
|
c->Message(Chat::White, "- #list [npcs|players|corpses|doors|objects] [search]");
|
|
c->Message(Chat::White, "- Example: #list npcs (Blank for all)");
|
|
}
|
|
}
|
|
|