Chris Miles dfd8f84cac
[Strings] Refactor Strings Usage (#2305)
* 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
2022-07-14 02:10:52 -05:00

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.");
}
}
}