mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-11 16:51: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.
141 lines
3.3 KiB
C++
Executable File
141 lines
3.3 KiB
C++
Executable File
#include "../client.h"
|
|
|
|
void command_editmassrespawn(Client *c, const Seperator *sep)
|
|
{
|
|
if (strcasecmp(sep->arg[1], "usage") == 0) {
|
|
c->Message(Chat::White, "#editmassrespawn [exact_match: =]npc_type_name new_respawn_seconds (apply)");
|
|
return;
|
|
}
|
|
|
|
std::string search_npc_type;
|
|
if (sep->arg[1]) {
|
|
search_npc_type = sep->arg[1];
|
|
}
|
|
|
|
int change_respawn_seconds = 0;
|
|
if (sep->arg[2] && sep->IsNumber(2)) {
|
|
change_respawn_seconds = atoi(sep->arg[2]);
|
|
}
|
|
|
|
bool change_apply = false;
|
|
if (sep->arg[3] && strcasecmp(sep->arg[3], "apply") == 0) {
|
|
change_apply = true;
|
|
}
|
|
|
|
std::string search_encapsulator = "%";
|
|
if (search_npc_type[0] == '=') {
|
|
|
|
search_npc_type = search_npc_type.substr(1);
|
|
search_encapsulator = "";
|
|
}
|
|
|
|
std::string query = fmt::format(
|
|
SQL(
|
|
SELECT npc_types.id, spawn2.spawngroupID, spawn2.id, npc_types.name, spawn2.respawntime
|
|
FROM spawn2
|
|
INNER JOIN spawnentry ON spawn2.spawngroupID = spawnentry.spawngroupID
|
|
INNER JOIN npc_types ON spawnentry.npcID = npc_types.id
|
|
WHERE spawn2.zone LIKE '{}'
|
|
AND spawn2.version = '{}'
|
|
AND npc_types.name LIKE '{}{}{}'
|
|
ORDER BY npc_types.id, spawn2.spawngroupID, spawn2.id
|
|
),
|
|
zone->GetShortName(),
|
|
zone->GetInstanceVersion(),
|
|
search_encapsulator,
|
|
search_npc_type,
|
|
search_encapsulator
|
|
);
|
|
|
|
std::string status = "(Searching)";
|
|
if (change_apply) {
|
|
status = "(Applying)";
|
|
}
|
|
|
|
int results_count = 0;
|
|
|
|
auto results = content_db.QueryDatabase(query);
|
|
if (results.Success() && results.RowCount()) {
|
|
|
|
results_count = results.RowCount();
|
|
|
|
for (auto row : results) {
|
|
c->Message(
|
|
Chat::Yellow,
|
|
fmt::format(
|
|
"NPC (npcid:{}) (sgid:{}) (s2id:{}) [{}] Respawn: Current [{}] New [{}] {}",
|
|
row[0],
|
|
row[1],
|
|
row[2],
|
|
row[3],
|
|
row[4],
|
|
change_respawn_seconds,
|
|
status
|
|
).c_str()
|
|
);
|
|
}
|
|
|
|
c->Message(Chat::Yellow, "Found (%i) NPC's that match this search...", results_count);
|
|
|
|
if (change_respawn_seconds > 0) {
|
|
|
|
if (change_apply) {
|
|
|
|
results = content_db.QueryDatabase(
|
|
fmt::format(
|
|
SQL(
|
|
UPDATE spawn2
|
|
SET respawntime = '{}'
|
|
WHERE id IN(
|
|
SELECT spawn2.id
|
|
FROM spawn2
|
|
INNER JOIN spawnentry ON spawn2.spawngroupID = spawnentry.spawngroupID
|
|
INNER JOIN npc_types ON spawnentry.npcID = npc_types.id
|
|
WHERE spawn2.zone LIKE '{}'
|
|
AND spawn2.version = '{}'
|
|
AND npc_types.name LIKE '{}{}{}'
|
|
)
|
|
),
|
|
change_respawn_seconds,
|
|
zone->GetShortName(),
|
|
zone->GetInstanceVersion(),
|
|
search_encapsulator,
|
|
search_npc_type,
|
|
search_encapsulator
|
|
)
|
|
);
|
|
|
|
if (results.Success()) {
|
|
|
|
c->Message(Chat::Yellow, "Changes applied to (%i) NPC 'Spawn2' entries", results_count);
|
|
zone->Repop();
|
|
}
|
|
else {
|
|
|
|
c->Message(Chat::Yellow, "Found (0) NPC's that match this search...");
|
|
}
|
|
}
|
|
else {
|
|
|
|
std::string saylink = fmt::format(
|
|
"#editmassrespawn {}{} {} apply",
|
|
(search_encapsulator.empty() ? "=" : ""),
|
|
search_npc_type,
|
|
change_respawn_seconds
|
|
);
|
|
|
|
c->Message(
|
|
Chat::Yellow, "To apply these changes, click <%s> or type [%s]",
|
|
Saylink::Silent(saylink, "Apply").c_str(),
|
|
saylink.c_str()
|
|
);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
|
|
c->Message(Chat::Yellow, "Found (0) NPC's that match this search...");
|
|
}
|
|
}
|
|
|