Alex King 2a6cf8c8e7
[Strings] Add more number formatters (#2873)
* [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>
2023-03-04 17:01:19 -06:00

78 lines
1.6 KiB
C++
Executable File

#include "../client.h"
void command_timezone(Client *c, const Seperator *sep)
{
int arguments = sep->argnum;
if (!arguments || !sep->IsNumber(1)) {
c->Message(Chat::White, "Usage: #timezone [Hour] [Minute]");
c->Message(
Chat::White,
fmt::format(
"Current timezone is {:02}:{:02} {}.",
(
((zone->zone_time.getEQTimeZoneHr() - 1) % 12) == 0 ?
12 :
((zone->zone_time.getEQTimeZoneHr() - 1) % 12)
),
zone->zone_time.getEQTimeZoneMin(),
(
zone->zone_time.getEQTimeZoneHr() >= 13 ?
"PM" :
"AM"
)
).c_str()
);
return;
}
uint8 minutes = 0;
auto hours = static_cast<uint8>(Strings::ToUnsignedInt(sep->arg[1]));
if (hours > 24) {
hours = 24;
}
uint8 real_hours = (
(hours - 1) > 0 ?
(hours - 1) :
0
);
if (sep->IsNumber(2)) {
minutes = static_cast<uint8>(Strings::ToUnsignedInt(sep->arg[2]));
if (minutes > 59) {
minutes = 59;
}
}
c->Message(
Chat::White,
fmt::format(
"Setting timezone to {:02}:{:02} {}.",
(
(real_hours % 12) == 0 ?
12 :
(real_hours % 12)
),
minutes,
(
hours >= 13 ?
"PM" :
"AM"
)
).c_str()
);
uint32 new_timezone = ((hours * 60) + minutes);
zone->zone_time.setEQTimeZone(new_timezone);
content_db.SetZoneTZ(zone->GetZoneID(), zone->GetInstanceVersion(), new_timezone);
auto outapp = new EQApplicationPacket(OP_TimeOfDay, sizeof(TimeOfDay_Struct));
TimeOfDay_Struct *tod = (TimeOfDay_Struct *) outapp->pBuffer;
zone->zone_time.GetCurrentEQTimeOfDay(time(0), tod);
entity_list.QueueClients(c, outapp);
safe_delete(outapp);
}