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