mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-11 21:01:29 +00:00
* [Strings] Add more number formatters # Notes - Adds `Strings::ToUnsignedInt` for `uint32` support. - Adds `Strings::ToBigInt` for `int64` support. - Adds `Strings::ToUnsignedBigInt` for `uint64` support. - Adds `Strings::ToFloat` for `float` support. - Replaces all `std::stoi` references with `Strings::ToInt`. - Replaces all `atoi` references with `Strings::ToInt`. - Replaces all `std::stoul` references with `Strings::ToUnsignedInt`. - Replaces all `atoul` references with `Strings::ToUnsignedInt`. - Replaces all `std::stoll` references with `Strings::ToBigInt`. - Replaces all `atoll` references with `Strings::ToBigInt`. - Replaces all `std::stoull` references with `Strings::ToUnsignedBigInt`. - Replaces all `atoull` references with `Strings::ToUnsignedBigInt`. - Replaces all `std::stof` references with `Strings::ToFloat`. * [Strings] Add more number formatters - Adds `Strings::ToUnsignedInt` for `uint32` support. - Adds `Strings::ToBigInt` for `int64` support. - Adds `Strings::ToUnsignedBigInt` for `uint64` support. - Adds `Strings::ToFloat` for `float` support. - Replaces all `std::stoi` references with `Strings::ToInt`. - Replaces all `atoi` references with `Strings::ToInt`. - Replaces all `std::stoul` references with `Strings::ToUnsignedInt`. - Replaces all `atoul` references with `Strings::ToUnsignedInt`. - Replaces all `std::stoll` references with `Strings::ToBigInt`. - Replaces all `atoll` references with `Strings::ToBigInt`. - Replaces all `std::stoull` references with `Strings::ToUnsignedBigInt`. - Replaces all `atoull` references with `Strings::ToUnsignedBigInt`. - Replaces all `std::stof` references with `Strings::ToFloat`. * Rebase cleanup * Changes/benchmarks/tests --------- Co-authored-by: Akkadius <akkadius1@gmail.com>
138 lines
3.3 KiB
C++
Executable File
138 lines
3.3 KiB
C++
Executable File
#include "../client.h"
|
|
|
|
void command_spawnstatus(Client *c, const Seperator *sep)
|
|
{
|
|
int arguments = sep->argnum;
|
|
if (!arguments) {
|
|
c->Message(Chat::White, "Usage: #spawnstatus all - Show all spawn statuses for your current zone");
|
|
c->Message(Chat::White, "Usage: #spawnstatus disabled - Show all disabled spawn statuses for your current zone");
|
|
c->Message(Chat::White, "Usage: #spawnstatus enabled - Show all enabled spawn statuses for your current zone");
|
|
c->Message(Chat::White, "Usage: #spawnstatus [Spawn ID] - Show spawn status by ID for your current zone");
|
|
return;
|
|
}
|
|
|
|
bool is_all = !strcasecmp(sep->arg[1], "all");
|
|
bool is_disabled = !strcasecmp(sep->arg[1], "disabled");
|
|
bool is_enabled = !strcasecmp(sep->arg[1], "enabled");
|
|
bool is_search = sep->IsNumber(1);
|
|
|
|
if (
|
|
!is_all &&
|
|
!is_disabled &&
|
|
!is_enabled &&
|
|
!is_search
|
|
) {
|
|
c->Message(Chat::White, "Usage: #spawnstatus all - Show all spawn statuses for your current zone");
|
|
c->Message(Chat::White, "Usage: #spawnstatus disabled - Show all disabled spawn statuses for your current zone");
|
|
c->Message(Chat::White, "Usage: #spawnstatus enabled - Show all enabled spawn statuses for your current zone");
|
|
c->Message(Chat::White, "Usage: #spawnstatus [Spawn ID] - Show spawn status by ID for your current zone");
|
|
return;
|
|
}
|
|
|
|
std::string filter_type;
|
|
if (is_disabled) {
|
|
filter_type = "Disabled";
|
|
} else if (is_enabled) {
|
|
filter_type = "Enabled";
|
|
}
|
|
|
|
uint32 spawn_id = 0;
|
|
if (is_search) {
|
|
spawn_id = Strings::ToUnsignedInt(sep->arg[1]);
|
|
}
|
|
|
|
LinkedListIterator<Spawn2*> iterator(zone->spawn2_list);
|
|
iterator.Reset();
|
|
|
|
uint32 filtered_count = 0;
|
|
uint32 spawn_count = 0;
|
|
uint32 spawn_number = 1;
|
|
while (iterator.MoreElements()) {
|
|
auto e = iterator.GetData();
|
|
auto time_remaining = e->GetTimer().GetRemainingTime();
|
|
if (
|
|
is_all ||
|
|
(
|
|
is_disabled &&
|
|
time_remaining == 0xFFFFFFFF
|
|
) ||
|
|
(
|
|
is_enabled &&
|
|
time_remaining != 0xFFFFFFFF
|
|
) ||
|
|
(
|
|
is_search &&
|
|
e->GetID() == spawn_id
|
|
)
|
|
) {
|
|
c->Message(
|
|
Chat::White,
|
|
fmt::format(
|
|
"Spawn {} | ID: {} Coordinates: {:.2f}, {:.2f}, {:.2f}, {:.2f}",
|
|
spawn_number,
|
|
e->GetID(),
|
|
e->GetX(),
|
|
e->GetY(),
|
|
e->GetZ(),
|
|
e->GetHeading()
|
|
).c_str()
|
|
);
|
|
if (time_remaining != 0xFFFFFFFF) {
|
|
auto seconds_remaining = (time_remaining / 1000);
|
|
c->Message(
|
|
Chat::White,
|
|
fmt::format(
|
|
"Spawn {} | Respawn: {} ({} Second{})",
|
|
spawn_number,
|
|
Strings::SecondsToTime(seconds_remaining),
|
|
seconds_remaining,
|
|
seconds_remaining != 1 ? "s" : ""
|
|
).c_str()
|
|
);
|
|
}
|
|
filtered_count++;
|
|
spawn_number++;
|
|
}
|
|
spawn_count++;
|
|
iterator.Advance();
|
|
}
|
|
|
|
if (!spawn_count) {
|
|
c->Message(Chat::White, "No spawns were found in this zone.");
|
|
return;
|
|
}
|
|
|
|
if (!is_all && !is_search && !filtered_count) {
|
|
c->Message(
|
|
Chat::White,
|
|
fmt::format(
|
|
"No {} spawns were found in this zone.",
|
|
filter_type
|
|
).c_str()
|
|
);
|
|
return;
|
|
}
|
|
|
|
if (is_all) {
|
|
c->Message(
|
|
Chat::White,
|
|
fmt::format(
|
|
"{} spawn{} listed.",
|
|
spawn_count,
|
|
spawn_count != 1 ? "s" : ""
|
|
).c_str()
|
|
);
|
|
} else {
|
|
c->Message(
|
|
Chat::White,
|
|
fmt::format(
|
|
"{} of {} spawn{} listed.",
|
|
filtered_count,
|
|
spawn_count,
|
|
spawn_count != 1 ? "s" : ""
|
|
).c_str()
|
|
);
|
|
}
|
|
}
|
|
|