mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-14 11:31:30 +00:00
* Start rewrite, add vcpkg * Simple vcpkg manifest, will almost certainly need tweaking * Remove cmake ext we wont be using anymore * Update vcpkg to no longer be from 2022, update cmake lists (wip) * Add finds to the toplevel cmakelists * WIP, luabind and perlbind build. Common only partially builds. * Fix common build. * shared_memory compiles * client files compile * Tests and more cmake version updates * World, had to swap out zlib-ng for now because it wasn't playing nicely along side the zlib install. May revisit. * UCS compiles now too! * queryserv and eqlaunch * loginserver works * Zone works but is messy, tomorrow futher cleanup! * Cleanup main file * remove old zlibng, remove perlwrap, remove hc * More cleanup * vcpkg baseline set for CI * Remove pkg-config, it's the suggested way to use luajit with vcpkg but it causes issues with CI and might be a pain point for windows users * Actually add file * Set perlbind include dir * Perl link got lost * PERL_SET_INTERP causes an issue on newer versions of perl on windows because a symbol is not properly exported in their API, change the lines so it's basically what it used to be * Remove static unix linking, we dont do automated released anymore and this was tightly coupled to that. Can explore this again if we decide to change that. * Remove unused submodules, set cmake policy for boost * Fix some cereal includes * Improve some boilerplate, I'd still like to do better about getting linker stuff set. * Going through and cleaning up the build. * Fix world, separate out data_buckets. * add fixes for other servers * fix zone * Fix client files, loginserver and tests * Newer versions of libmariadb default to tls forced on, return to the default of not forcing that. auto_login were breaking on linux builds loginserver wasn't setting proper openssl compile flag * Move set out of a giant cpp file include. * Convert show * convert find * Add uuid to unix builds * Remove some cpp includes. * Restructure to remove more things. * change db update manifest to header change build yml * Move world CLI include cpps to cmake. * Move zone cli out of source and into cmake * Sidecar stuff wont directly include cpp files now too. * Fix uuid-dev missing on linux runner * Reorg common cmake file * Some cleanup * Fix libsodium support (oops). Fix perl support (more oops) * Change doc --------- Co-authored-by: KimLS <KimLS@peqtgc.com>
94 lines
2.8 KiB
C++
94 lines
2.8 KiB
C++
#include "dynamic_zone_lockout.h"
|
|
#include "strings.h"
|
|
#include "rulesys.h"
|
|
#include "util/uuid.h"
|
|
#include <fmt/format.h>
|
|
#include <fmt/ranges.h>
|
|
#include <cereal/types/chrono.hpp>
|
|
|
|
DzLockout::DzLockout(std::string uuid, std::string expedition, std::string event, uint64_t expire_time, uint32_t duration)
|
|
: m_uuid(std::move(uuid))
|
|
, m_name(std::move(expedition))
|
|
, m_event(std::move(event))
|
|
, m_expire_time(std::chrono::system_clock::from_time_t(expire_time))
|
|
, m_duration(duration)
|
|
{
|
|
m_is_replay = m_event == ReplayTimer;
|
|
}
|
|
|
|
DzLockout::DzLockout(std::string_view name, BaseDynamicZoneLockoutsRepository::DynamicZoneLockouts&& lockout)
|
|
: m_uuid(std::move(lockout.from_expedition_uuid))
|
|
, m_name(name)
|
|
, m_event(std::move(lockout.event_name))
|
|
, m_expire_time(std::chrono::system_clock::from_time_t(lockout.expire_time))
|
|
, m_duration(lockout.duration)
|
|
{
|
|
m_is_replay = m_event == ReplayTimer;
|
|
}
|
|
|
|
DzLockout DzLockout::Create(const std::string& expedition, const std::string& event, uint32_t seconds, std::string uuid)
|
|
{
|
|
seconds = static_cast<uint32_t>(seconds * RuleR(Expedition, LockoutDurationMultiplier));
|
|
|
|
if (uuid.empty())
|
|
{
|
|
uuid = EQ::Util::UUID::Generate().ToString();
|
|
}
|
|
|
|
DzLockout lockout{uuid, expedition, event, 0, seconds};
|
|
lockout.Reset(); // sets expire time
|
|
return lockout;
|
|
}
|
|
|
|
uint32_t DzLockout::GetSecondsRemaining() const
|
|
{
|
|
auto now = std::chrono::system_clock::now();
|
|
if (m_expire_time > now)
|
|
{
|
|
auto remaining = m_expire_time - now;
|
|
return static_cast<uint32_t>(std::chrono::duration_cast<std::chrono::seconds>(remaining).count());
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
DzLockout::TimeStrings DzLockout::GetTimeRemainingStrs() const
|
|
{
|
|
auto seconds = GetSecondsRemaining();
|
|
return DzLockout::TimeStrings{
|
|
fmt::format_int(seconds / 86400).str(), // days
|
|
fmt::format_int(seconds / 3600 % 24).str(), // hours
|
|
fmt::format_int(seconds / 60 % 60).str(), // minutes
|
|
fmt::format_int(seconds % 60).str() // seconds
|
|
};
|
|
}
|
|
|
|
bool DzLockout::IsSame(const DzLockout& other) const
|
|
{
|
|
return other.IsSame(m_name, m_event);
|
|
}
|
|
|
|
bool DzLockout::IsSame(const std::string& expedition, const std::string& event) const
|
|
{
|
|
return m_name == expedition && m_event == event;
|
|
}
|
|
|
|
void DzLockout::AddLockoutTime(int seconds)
|
|
{
|
|
seconds = static_cast<int>(seconds * RuleR(Expedition, LockoutDurationMultiplier));
|
|
|
|
auto new_duration = std::max(0, static_cast<int>(m_duration.count()) + seconds);
|
|
|
|
auto start_time = m_expire_time - m_duration;
|
|
m_duration = std::chrono::seconds(new_duration);
|
|
m_expire_time = start_time + m_duration;
|
|
}
|
|
|
|
template <typename T>
|
|
void DzLockout::serialize(T& archive)
|
|
{
|
|
archive(m_is_replay, m_uuid, m_name, m_event, m_duration, m_expire_time);
|
|
}
|
|
|
|
template void DzLockout::serialize(cereal::BinaryOutputArchive&);
|
|
template void DzLockout::serialize(cereal::BinaryInputArchive&);
|