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.
171 lines
4.3 KiB
C++
Executable File
171 lines
4.3 KiB
C++
Executable File
#include "../client.h"
|
|
|
|
void command_faction(Client *c, const Seperator *sep)
|
|
{
|
|
int arguments = sep->argnum;
|
|
if (!arguments) {
|
|
c->Message(
|
|
Chat::White,
|
|
"Usage: #faction review [Search Criteria | All] - Review Targeted Player's Faction Hits"
|
|
);
|
|
c->Message(
|
|
Chat::White,
|
|
"Usage: #faction reset [Faction ID] - Reset Targeted Player's Faction to Base Faction Value"
|
|
);
|
|
c->Message(Chat::White, "Usage: #faction view - Displays Target NPC's Primary Faction");
|
|
return;
|
|
}
|
|
|
|
std::string faction_filter;
|
|
if (sep->arg[2]) {
|
|
faction_filter = Strings::ToLower(sep->arg[2]);
|
|
}
|
|
|
|
if (!strcasecmp(sep->arg[1], "review")) {
|
|
if (!(c->GetTarget() && c->GetTarget()->IsClient())) {
|
|
c->Message(Chat::Red, "Player Target Required for faction review");
|
|
return;
|
|
}
|
|
|
|
Client *target = c->GetTarget()->CastToClient();
|
|
uint32 character_id = target->CharacterID();
|
|
std::string query;
|
|
if (!strcasecmp(faction_filter.c_str(), "all")) {
|
|
query = fmt::format(
|
|
"SELECT id, `name`, current_value FROM faction_list INNER JOIN faction_values ON faction_list.id = faction_values.faction_id WHERE char_id = {}",
|
|
character_id
|
|
);
|
|
}
|
|
else {
|
|
query = fmt::format(
|
|
"SELECT id, `name`, current_value FROM faction_list INNER JOIN faction_values ON faction_list.id = faction_values.faction_id WHERE `name` like '%{}%' and char_id = {}",
|
|
faction_filter.c_str(),
|
|
character_id
|
|
);
|
|
}
|
|
|
|
auto results = content_db.QueryDatabase(query);
|
|
if (!results.Success() || !results.RowCount()) {
|
|
c->Message(Chat::Yellow, "No faction hits found. All are at base level.");
|
|
return;
|
|
}
|
|
|
|
uint32 found_count = 0;
|
|
for (auto row : results) {
|
|
uint32 faction_number = (found_count + 1);
|
|
auto faction_id = std::stoul(row[0]);
|
|
std::string faction_name = row[1];
|
|
std::string faction_value = row[2];
|
|
std::string reset_link = Saylink::Silent(
|
|
fmt::format("#faction reset {}", faction_id),
|
|
"Reset"
|
|
);
|
|
|
|
c->Message(
|
|
Chat::White,
|
|
fmt::format(
|
|
"Faction {} | Name: {} ({}) Value: {} [{}]",
|
|
faction_number,
|
|
faction_name,
|
|
faction_id,
|
|
faction_value,
|
|
reset_link
|
|
).c_str()
|
|
);
|
|
found_count++;
|
|
}
|
|
|
|
auto faction_message = (
|
|
found_count > 0 ?
|
|
(
|
|
found_count == 1 ?
|
|
"A Faction was" :
|
|
fmt::format("{} Factions were", found_count)
|
|
) :
|
|
"No Factions were"
|
|
);
|
|
c->Message(
|
|
Chat::White,
|
|
fmt::format(
|
|
"{} found.",
|
|
faction_message
|
|
).c_str()
|
|
);
|
|
}
|
|
else if (!strcasecmp(sep->arg[1], "reset")) {
|
|
if (strlen(faction_filter.c_str()) > 0) {
|
|
if (c->GetTarget() && c->GetTarget()->IsClient()) {
|
|
Client *target = c->GetTarget()->CastToClient();
|
|
if (
|
|
(
|
|
!c->GetFeigned() &&
|
|
c->GetAggroCount() == 0
|
|
) ||
|
|
(
|
|
!target->GetFeigned() &&
|
|
target->GetAggroCount() == 0
|
|
)
|
|
) {
|
|
uint32 character_id = target->CharacterID();
|
|
uint32 faction_id = std::stoul(faction_filter.c_str());
|
|
if (target->ReloadCharacterFaction(target, faction_id, character_id)) {
|
|
c->Message(
|
|
Chat::White,
|
|
fmt::format(
|
|
"Faction Reset | {} ({}) was reset for {}.",
|
|
content_db.GetFactionName(faction_id),
|
|
faction_id,
|
|
target->GetCleanName()
|
|
).c_str()
|
|
);
|
|
}
|
|
else {
|
|
c->Message(
|
|
Chat::White,
|
|
fmt::format(
|
|
"Faction Reset Failed | {} ({}) was unable to be reset for {}.",
|
|
content_db.GetFactionName(faction_id),
|
|
faction_id,
|
|
target->GetCleanName()
|
|
).c_str()
|
|
);
|
|
}
|
|
}
|
|
else {
|
|
c->Message(
|
|
Chat::White,
|
|
"You cannot reset factions while you or your target is in combat or feigned."
|
|
);
|
|
return;
|
|
}
|
|
}
|
|
else {
|
|
c->Message(Chat::White, "You must target a PC for this command.");
|
|
return;
|
|
}
|
|
}
|
|
else {
|
|
c->Message(
|
|
Chat::White,
|
|
"Usage: #faction reset [Faction ID] - Reset Targeted Player's Faction to Base Faction Value"
|
|
);
|
|
}
|
|
}
|
|
else if (!strcasecmp(sep->arg[1], "view")) {
|
|
if (c->GetTarget() && c->GetTarget()->IsNPC()) {
|
|
auto target = c->GetTarget();
|
|
auto npc_faction_id = target->CastToNPC()->GetPrimaryFaction();
|
|
c->Message(
|
|
Chat::White,
|
|
fmt::format(
|
|
"{} has a Primary Faction of {} ({}).",
|
|
c->GetTargetDescription(target),
|
|
content_db.GetFactionName(npc_faction_id),
|
|
npc_faction_id
|
|
).c_str()
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|