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
104 lines
2.6 KiB
C++
Executable File
104 lines
2.6 KiB
C++
Executable File
#include "../client.h"
|
|
#include "../groups.h"
|
|
|
|
void command_roambox(Client *c, const Seperator *sep)
|
|
{
|
|
if (!c->GetTarget() || !c->GetTarget()->IsNPC()) {
|
|
c->Message(Chat::White, "You need a valid NPC target for this command");
|
|
return;
|
|
}
|
|
|
|
int arguments = sep->argnum;
|
|
if (!arguments) {
|
|
c->Message(Chat::White, "#roambox remove - Remove a roambox from an NPC");
|
|
c->Message(Chat::White, "#roambox set [Box Size] [Delay] - Set a roambox for an NPC");
|
|
return;
|
|
}
|
|
|
|
auto target = c->GetTarget()->CastToNPC();
|
|
int spawn_group_id = target->GetSpawnGroupId();
|
|
if (spawn_group_id <= 0) {
|
|
c->Message(Chat::Red, "NPC needs a valid SpawnGroup!");
|
|
return;
|
|
}
|
|
|
|
bool is_remove = !strcasecmp(sep->arg[1], "remove");
|
|
bool is_set = !strcasecmp(sep->arg[1], "set");
|
|
if (!is_remove && !is_set) {
|
|
c->Message(Chat::White, "#roambox remove - Remove a roambox from an NPC");
|
|
c->Message(Chat::White, "#roambox set [Box Size] [Delay] - Set a roambox for an NPC");
|
|
return;
|
|
}
|
|
|
|
if (is_remove) {
|
|
auto query = fmt::format(
|
|
"UPDATE spawngroup SET dist = 0, min_x = 0, max_x = 0, min_y = 0, max_y = 0, delay = 0 WHERE id = {}",
|
|
spawn_group_id
|
|
);
|
|
|
|
database.QueryDatabase(query);
|
|
|
|
c->Message(
|
|
Chat::White,
|
|
fmt::format(
|
|
"Roambox has been removed from {} ({}) on spawn group ID {}.",
|
|
target->GetCleanName(),
|
|
target->GetID(),
|
|
spawn_group_id
|
|
).c_str()
|
|
);
|
|
} else if (is_set) {
|
|
float box_size = 0.0f;
|
|
int delay = 15000;
|
|
|
|
if (arguments >= 2) {
|
|
box_size = std::stof(sep->arg[2]);
|
|
|
|
if (arguments == 3) {
|
|
delay = std::stoi(sep->arg[3]);
|
|
}
|
|
}
|
|
|
|
if (box_size) {
|
|
auto query = fmt::format(
|
|
"UPDATE spawngroup SET dist = {:2f}, min_x = {:2f}, max_x = {:.2f}, min_y = {:2f}, max_y = {:2f}, delay = {} WHERE id = {}",
|
|
(box_size / 2.0f),
|
|
(target->GetX() - (box_size / 2.0f)),
|
|
(target->GetX() + (box_size / 2.0f)),
|
|
(target->GetY() - (box_size / 2.0f)),
|
|
(target->GetY() + (box_size / 2.0f)),
|
|
delay,
|
|
spawn_group_id
|
|
);
|
|
|
|
auto results = database.QueryDatabase(query);
|
|
|
|
if (!results.RowsAffected()) {
|
|
c->Message(
|
|
Chat::White,
|
|
fmt::format(
|
|
"Failed to set roambox for {}.",
|
|
c->GetTargetDescription(target)
|
|
).c_str()
|
|
);
|
|
return;
|
|
}
|
|
|
|
c->Message(
|
|
Chat::White,
|
|
fmt::format(
|
|
"Roambox set to box size of {} for {} on spawn group ID {} with a delay of {} ({}).",
|
|
box_size,
|
|
c->GetTargetDescription(target),
|
|
spawn_group_id,
|
|
Strings::MillisecondsToTime(delay),
|
|
delay
|
|
).c_str()
|
|
);
|
|
} else {
|
|
c->Message(Chat::White, "Box size must be greater than 0.");
|
|
}
|
|
}
|
|
}
|
|
|