adapt: adapt LeviLamina v0.12.1
This commit is contained in:
+13
-13
@@ -26,25 +26,26 @@ bool shouldIgnore(GMLIB_Actor* ac) {
|
||||
|
||||
bool ShouldClean(Actor* actor) {
|
||||
// Players
|
||||
auto en = (GMLIB_Actor*)actor;
|
||||
auto& config = Cleaner::Entry::getInstance().getConfig();
|
||||
auto en = (GMLIB_Actor*)actor;
|
||||
if (en->isPlayer() || shouldIgnore(en)) {
|
||||
return false;
|
||||
}
|
||||
auto type = en->getTypeName();
|
||||
for (auto& tag : ConfigFile::mIgnoreTags) {
|
||||
for (auto& tag : config.IgnoreTags) {
|
||||
if (en->hasTag(tag)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// Items
|
||||
if (en->isItemActor()) {
|
||||
if (Config->getValue<bool>({"CleanItem", "Enabled"}, false)) {
|
||||
if (config.CleanItem.Enabled) {
|
||||
auto itac = (ItemActor*)en;
|
||||
if (itac->age() <= Config->getValue<int>({"CleanItem", "ExistTicks"}, 0)) {
|
||||
if (itac->age() <= config.CleanItem.ExistTicks) {
|
||||
return false;
|
||||
}
|
||||
auto itemType = itac->item().getTypeName();
|
||||
auto whitelist = Config->getValue<std::vector<std::string>>({"CleanItem", "Whitelist"}, {});
|
||||
auto whitelist = config.CleanItem.Whitelist;
|
||||
for (auto& key : whitelist) {
|
||||
if (isMatch(itemType, key)) {
|
||||
return false;
|
||||
@@ -56,24 +57,23 @@ bool ShouldClean(Actor* actor) {
|
||||
}
|
||||
// Mobs
|
||||
else if (en->isMob()) {
|
||||
if (Config->getValue<bool>({"CleanMobs", "Enabled"}, false)) {
|
||||
auto blacklist = Config->getValue<std::vector<std::string>>({"CleanMobs", "BlackList"}, {});
|
||||
if (config.CleanMobs.Enabled) {
|
||||
auto blacklist = config.CleanMobs.BlackList;
|
||||
for (auto& key : blacklist) {
|
||||
if (isMatch(type, key)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
auto whitelist = Config->getValue<std::vector<std::string>>({"CleanMobs", "Whitelist"}, {});
|
||||
auto whitelist = config.CleanMobs.Whitelist;
|
||||
for (auto& key : whitelist) {
|
||||
if (isMatch(type, key)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (Config->getValue<bool>({"CleanMobs", "CleanMonstors"}, false)
|
||||
&& en->hasCategory(ActorCategory::Monster)) {
|
||||
if (config.CleanMobs.CleanMonstors && en->hasCategory(ActorCategory::Monster)) {
|
||||
return true;
|
||||
}
|
||||
if (Config->getValue<bool>({"CleanMobs", "CleanPeacefulMobs"}, false)) {
|
||||
if (config.CleanMobs.CleanPeacefulMobs) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -81,8 +81,8 @@ bool ShouldClean(Actor* actor) {
|
||||
}
|
||||
// Others
|
||||
else {
|
||||
if (Config->getValue<bool>({"CleanInanimate", "Enabled"}, false)) {
|
||||
auto blacklist = Config->getValue<std::vector<std::string>>({"CleanInanimate", "Blacklist"}, {});
|
||||
if (config.CleanInanimate.Enabled) {
|
||||
auto blacklist = config.CleanInanimate.Blacklist;
|
||||
for (auto& key : blacklist) {
|
||||
if (isMatch(type, key)) {
|
||||
return true;
|
||||
|
||||
+45
-54
@@ -1,60 +1,49 @@
|
||||
#include "Cleaner.h"
|
||||
|
||||
namespace ConfigFile {
|
||||
|
||||
bool mConsoleLog = true;
|
||||
bool mAnnounce = true;
|
||||
bool mSendToast = true;
|
||||
std::vector<std::string> mIgnoreTags = {};
|
||||
|
||||
} // namespace ConfigFile
|
||||
|
||||
|
||||
namespace Cleaner {
|
||||
|
||||
static std::shared_ptr<ll::schedule::task::Task<ll::chrono::ServerClock>> mAutoCleanTask = nullptr;
|
||||
static std::shared_ptr<ll::schedule::task::Task<ll::chrono::ServerClock>> mCleanTaskCount = nullptr;
|
||||
static std::shared_ptr<ll::schedule::task::Task<ll::chrono::ServerClock>> mCleanTaskTPS = nullptr;
|
||||
|
||||
ServerTimeScheduler scheduler;
|
||||
|
||||
bool auto_clean_triggerred = false;
|
||||
|
||||
void CleanTask() {
|
||||
auto time = Config->getValue<int>({"Basic", "Notice1"}, 20);
|
||||
auto announce_time = Config->getValue<int>({"Basic", "Notice2"}, 5);
|
||||
auto time_1 = std::chrono::seconds::duration(time);
|
||||
auto time_2 = std::chrono::seconds::duration(time - announce_time);
|
||||
if (ConfigFile::mConsoleLog) {
|
||||
logger.info(tr("cleaner.output.count1", {S(time_1.count())}));
|
||||
auto& config = Cleaner::Entry::getInstance().getConfig();
|
||||
auto time = config.Basic.Notice1;
|
||||
auto announce_time = config.Basic.Notice2;
|
||||
auto time_1 = std::chrono::seconds::duration(time);
|
||||
auto time_2 = std::chrono::seconds::duration(time - announce_time);
|
||||
if (config.Basic.ConsoleLog) {
|
||||
logger.info(I18nAPI::get("cleaner.output.count1", {S(time_1.count())}));
|
||||
}
|
||||
if (ConfigFile::mAnnounce) {
|
||||
Helper::broadcastMessage(tr("cleaner.output.count1", {S(time_1.count())}));
|
||||
if (config.Basic.SendBroadcast) {
|
||||
Helper::broadcastMessage(I18nAPI::get("cleaner.output.count1", {S(time_1.count())}));
|
||||
}
|
||||
if (ConfigFile::mSendToast) {
|
||||
Helper::broadcastToast(tr("cleaner.output.count2", {S(announce_time)}));
|
||||
if (config.Basic.SendToast) {
|
||||
Helper::broadcastToast(I18nAPI::get("cleaner.output.count2", {S(announce_time)}));
|
||||
}
|
||||
scheduler.add<DelayTask>(time_2, [announce_time] {
|
||||
if (ConfigFile::mConsoleLog) {
|
||||
logger.info(tr("cleaner.output.count2", {S(announce_time)}));
|
||||
Cleaner::Entry::getInstance().getScheduler().add<DelayTask>(time_2, [announce_time, &config] {
|
||||
if (config.Basic.ConsoleLog) {
|
||||
logger.info(I18nAPI::get("cleaner.output.count2", {S(announce_time)}));
|
||||
}
|
||||
if (ConfigFile::mAnnounce) {
|
||||
Helper::broadcastMessage(tr("cleaner.output.count2", {S(announce_time)}));
|
||||
if (config.Basic.SendBroadcast) {
|
||||
Helper::broadcastMessage(I18nAPI::get("cleaner.output.count2", {S(announce_time)}));
|
||||
}
|
||||
if (ConfigFile::mSendToast) {
|
||||
Helper::broadcastToast(tr("cleaner.output.count2", {S(announce_time)}));
|
||||
if (config.Basic.SendToast) {
|
||||
Helper::broadcastToast(I18nAPI::get("cleaner.output.count2", {S(announce_time)}));
|
||||
}
|
||||
});
|
||||
scheduler.add<DelayTask>(time_1, [] {
|
||||
Cleaner::Entry::getInstance().getScheduler().add<DelayTask>(time_1, [&config] {
|
||||
auto count = ExecuteClean();
|
||||
if (ConfigFile::mConsoleLog) {
|
||||
logger.info(tr("cleaner.output.finish", {S(count)}));
|
||||
if (config.Basic.ConsoleLog) {
|
||||
logger.info(I18nAPI::get("cleaner.output.finish", {S(count)}));
|
||||
}
|
||||
if (ConfigFile::mAnnounce) {
|
||||
Helper::broadcastMessage(tr("cleaner.output.finish", {S(count)}));
|
||||
if (config.Basic.SendBroadcast) {
|
||||
Helper::broadcastMessage(I18nAPI::get("cleaner.output.finish", {S(count)}));
|
||||
}
|
||||
if (ConfigFile::mSendToast) {
|
||||
Helper::broadcastToast(tr("cleaner.output.finish", {S(count)}));
|
||||
if (config.Basic.SendToast) {
|
||||
Helper::broadcastToast(I18nAPI::get("cleaner.output.finish", {S(count)}));
|
||||
}
|
||||
auto_clean_triggerred = false;
|
||||
});
|
||||
@@ -62,23 +51,24 @@ void CleanTask() {
|
||||
|
||||
void AutoCleanTask(int seconds) {
|
||||
auto time = std::chrono::seconds::duration(seconds);
|
||||
mAutoCleanTask = scheduler.add<RepeatTask>(time, [] { CleanTask(); });
|
||||
mAutoCleanTask = Cleaner::Entry::getInstance().getScheduler().add<RepeatTask>(time, [] { CleanTask(); });
|
||||
}
|
||||
|
||||
void CleanTaskCount(int max_entities) {
|
||||
mCleanTaskCount = scheduler.add<RepeatTask>(10s, [max_entities] {
|
||||
auto& config = Cleaner::Entry::getInstance().getConfig();
|
||||
mCleanTaskCount = Cleaner::Entry::getInstance().getScheduler().add<RepeatTask>(10s, [max_entities, &config] {
|
||||
auto count = CountEntities();
|
||||
if (auto_clean_triggerred == false) {
|
||||
if (count >= max_entities) {
|
||||
auto_clean_triggerred = true;
|
||||
if (ConfigFile::mConsoleLog) {
|
||||
logger.warn(tr("cleaner.output.triggerAutoCleanCount", {S(count)}));
|
||||
if (config.Basic.ConsoleLog) {
|
||||
logger.warn(I18nAPI::get("cleaner.output.triggerAutoCleanCount", {S(count)}));
|
||||
}
|
||||
if (ConfigFile::mAnnounce) {
|
||||
Helper::broadcastMessage(tr("cleaner.output.triggerAutoCleanCount", {S(count)}));
|
||||
if (config.Basic.SendBroadcast) {
|
||||
Helper::broadcastMessage(I18nAPI::get("cleaner.output.triggerAutoCleanCount", {S(count)}));
|
||||
}
|
||||
if (ConfigFile::mSendToast) {
|
||||
Helper::broadcastToast(tr("cleaner.output.triggerAutoCleanCount", {S(count)}));
|
||||
if (config.Basic.SendToast) {
|
||||
Helper::broadcastToast(I18nAPI::get("cleaner.output.triggerAutoCleanCount", {S(count)}));
|
||||
}
|
||||
CleanTask();
|
||||
}
|
||||
@@ -87,19 +77,20 @@ void CleanTaskCount(int max_entities) {
|
||||
}
|
||||
|
||||
void CleanTaskTPS(float min_tps) {
|
||||
mCleanTaskTPS = scheduler.add<RepeatTask>(10s, [min_tps] {
|
||||
auto& config = Cleaner::Entry::getInstance().getConfig();
|
||||
mCleanTaskTPS = Cleaner::Entry::getInstance().getScheduler().add<RepeatTask>(10s, [min_tps, &config] {
|
||||
if (auto_clean_triggerred == false) {
|
||||
if (GMLIB_Level::getLevel()->getServerAverageTps() <= min_tps) {
|
||||
auto_clean_triggerred = true;
|
||||
auto mspt = S(GMLIB_Level::getLevel()->getServerAverageTps());
|
||||
if (ConfigFile::mConsoleLog) {
|
||||
logger.warn(tr("cleaner.output.triggerAutoCleanTps", {mspt}));
|
||||
if (config.Basic.ConsoleLog) {
|
||||
logger.warn(I18nAPI::get("cleaner.output.triggerAutoCleanTps", {mspt}));
|
||||
}
|
||||
if (ConfigFile::mAnnounce) {
|
||||
Helper::broadcastMessage(tr("cleaner.output.triggerAutoCleanTps", {mspt}));
|
||||
if (config.Basic.SendBroadcast) {
|
||||
Helper::broadcastMessage(I18nAPI::get("cleaner.output.triggerAutoCleanTps", {mspt}));
|
||||
}
|
||||
if (ConfigFile::mSendToast) {
|
||||
Helper::broadcastToast(tr("cleaner.output.triggerAutoCleanTps", {mspt}));
|
||||
if (config.Basic.SendToast) {
|
||||
Helper::broadcastToast(I18nAPI::get("cleaner.output.triggerAutoCleanTps", {mspt}));
|
||||
}
|
||||
CleanTask();
|
||||
}
|
||||
@@ -110,15 +101,15 @@ void CleanTaskTPS(float min_tps) {
|
||||
void stopAllTasks() {
|
||||
if (!mCleanTaskCount) {
|
||||
mCleanTaskTPS->cancel();
|
||||
scheduler.remove(mCleanTaskTPS);
|
||||
Cleaner::Entry::getInstance().getScheduler().remove(mCleanTaskTPS);
|
||||
}
|
||||
if (mCleanTaskCount) {
|
||||
mCleanTaskCount->cancel();
|
||||
scheduler.remove(mCleanTaskCount);
|
||||
Cleaner::Entry::getInstance().getScheduler().remove(mCleanTaskCount);
|
||||
}
|
||||
if (mAutoCleanTask) {
|
||||
mAutoCleanTask->cancel();
|
||||
scheduler.remove(mAutoCleanTask);
|
||||
Cleaner::Entry::getInstance().getScheduler().remove(mAutoCleanTask);
|
||||
}
|
||||
}
|
||||
} // namespace Cleaner
|
||||
|
||||
@@ -3,31 +3,23 @@
|
||||
namespace Cleaner {
|
||||
|
||||
void loadCleaner() {
|
||||
if (Config->getValue<bool>({"ScheduleClean", "Enabled"}, false)) {
|
||||
Cleaner::AutoCleanTask(Config->getValue<int>({"ScheduleClean", "CleanInterval"}, 3000));
|
||||
auto& config = Cleaner::Entry::getInstance().getConfig();
|
||||
if (config.ScheduleClean.Enabled) {
|
||||
Cleaner::AutoCleanTask(config.ScheduleClean.CleanInterval);
|
||||
}
|
||||
if (Config->getValue<bool>({"AutoCleanCount", "Enabled"}, false)) {
|
||||
Cleaner::CleanTaskCount(Config->getValue<int>({"AutoCleanCount", "TriggerCount"}, 900));
|
||||
if (config.AutoCleanCount.Enabled) {
|
||||
Cleaner::CleanTaskCount(config.AutoCleanCount.TriggerCount);
|
||||
}
|
||||
if (Config->getValue<bool>({"AutoCleanTPS", "Enabled"}, false)) {
|
||||
Cleaner::CleanTaskTPS(Config->getValue<float>({"AutoCleanTPS", "TriggerTPS"}, 15.0f));
|
||||
if (config.AutoCleanTPS.Enabled) {
|
||||
Cleaner::CleanTaskTPS(config.AutoCleanTPS.TriggerTPS);
|
||||
}
|
||||
ConfigFile::mItemDespawnTicks = Config->getValue<int>({"ItemDespawn", "DespawnTime"}, 6000);
|
||||
ConfigFile::mAnnounce = Config->getValue<bool>({"Basic", "SendBroadcast"}, true);
|
||||
ConfigFile::mConsoleLog = Config->getValue<bool>({"Basic", "ConsoleLog"}, true);
|
||||
ConfigFile::mSendToast = Config->getValue<bool>({"Basic", "SendToast"}, true);
|
||||
ConfigFile::mIgnoreTags = Config->getValue<std::vector<std::string>>({"IgnoreTags"}, {});
|
||||
}
|
||||
|
||||
void unloadCleaner() { stopAllTasks(); }
|
||||
|
||||
void reloadCleaner() {
|
||||
unloadCleaner();
|
||||
Config->reload();
|
||||
std::string languageCode = Config->getValue<std::string>({"Basic", "Language"}, "en_US");
|
||||
Language->reloadAllLanguages();
|
||||
Language->chooseLanguage(languageCode);
|
||||
loadCleaner();
|
||||
Cleaner::Entry::getInstance().disable();
|
||||
Cleaner::Entry::getInstance().enable();
|
||||
}
|
||||
|
||||
} // namespace Cleaner
|
||||
@@ -6,8 +6,6 @@ using namespace ll::chrono_literals;
|
||||
|
||||
namespace Cleaner {
|
||||
|
||||
extern ServerTimeScheduler scheduler;
|
||||
|
||||
extern int ExecuteClean();
|
||||
extern int CountEntities();
|
||||
|
||||
|
||||
+6
-12
@@ -1,21 +1,15 @@
|
||||
#include "Cleaner.h"
|
||||
|
||||
namespace ConfigFile {
|
||||
|
||||
int mItemDespawnTicks = 3000;
|
||||
|
||||
} // namespace ConfigFile
|
||||
|
||||
|
||||
namespace Cleaner {
|
||||
|
||||
void setShouldIgnore(GMLIB_Actor* ac) { ac->addTag("cleaner:ignore"); }
|
||||
|
||||
void ListenEvents() {
|
||||
auto& eventBus = ll::event::EventBus::getInstance();
|
||||
auto& config = Cleaner::Entry::getInstance().getConfig();
|
||||
// ItemSpawnEvent
|
||||
eventBus.emplaceListener<GMLIB::Event::EntityEvent::ItemActorSpawnAfterEvent>(
|
||||
[](GMLIB::Event::EntityEvent::ItemActorSpawnAfterEvent& event) {
|
||||
[&config](GMLIB::Event::EntityEvent::ItemActorSpawnAfterEvent& event) {
|
||||
auto& item = event.getItemActor();
|
||||
if (event.getSpawner().has_value()) {
|
||||
auto pl = (GMLIB_Player*)event.getSpawner().as_ptr();
|
||||
@@ -25,16 +19,16 @@ void ListenEvents() {
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (Config->getValue<bool>({"ItemDespawn", "Enabled"}, true)) {
|
||||
item.lifeTime() = ConfigFile::mItemDespawnTicks;
|
||||
auto list = Config->getValue<std::vector<std::string>>({"ItemDespawn", "WhiteList"}, {});
|
||||
if (config.ItemDespawn.Enabled) {
|
||||
item.lifeTime() = config.ItemDespawn.DespawnTime;
|
||||
auto list = config.ItemDespawn.WhiteList;
|
||||
auto type = item.item().getTypeName();
|
||||
for (auto& key : list) {
|
||||
if (isMatch(type, key)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
item.lifeTime() = ConfigFile::mItemDespawnTicks;
|
||||
item.lifeTime() = config.ItemDespawn.DespawnTime;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
|
||||
namespace Helper {
|
||||
|
||||
void broadcastMessage(std::string_view msg) { GMLIB_Level::broadcast(tr("cleaner.info.prefix") + std::string(msg)); }
|
||||
void broadcastMessage(std::string_view msg) { GMLIB_Level::broadcast(I18nAPI::get("cleaner.info.prefix") + std::string(msg)); }
|
||||
|
||||
void broadcastToast(std::string_view msg) { GMLIB_Level::broadcastToast(tr("cleaner.info.prefix"), msg); }
|
||||
void broadcastToast(std::string_view msg) { GMLIB_Level::broadcastToast(I18nAPI::get("cleaner.info.prefix"), msg); }
|
||||
|
||||
} // namespace Helper
|
||||
+33
-31
@@ -24,10 +24,10 @@ int getPlayerCount() {
|
||||
|
||||
void sendVoteForm(Player* pl) {
|
||||
auto fm = ll::form::ModalForm(
|
||||
tr("cleaner.vote.title"),
|
||||
tr("cleaner.vote.subtitle", {pl->getRealName()}),
|
||||
tr("cleaner.vote.ok"),
|
||||
tr("cleaner.vote.no")
|
||||
I18nAPI::get("cleaner.vote.title"),
|
||||
I18nAPI::get("cleaner.vote.subtitle", {pl->getRealName()}),
|
||||
I18nAPI::get("cleaner.vote.ok"),
|
||||
I18nAPI::get("cleaner.vote.no")
|
||||
);
|
||||
ll::service::getLevel()->forEachPlayer([&](Player& pl) -> bool {
|
||||
fm.sendTo(pl, [](Player& player, ll::form::ModalFormResult result, ll::form::FormCancelReason reason) {
|
||||
@@ -35,12 +35,12 @@ void sendVoteForm(Player* pl) {
|
||||
switch (result.value()) {
|
||||
case ll::form::ModalFormSelectedButton::Upper: {
|
||||
voteList[player.getUuid()] = true;
|
||||
player.sendMessage(tr("cleaner.vote.accept"));
|
||||
player.sendMessage(I18nAPI::get("cleaner.vote.accept"));
|
||||
return;
|
||||
}
|
||||
case ll::form::ModalFormSelectedButton::Lower: {
|
||||
voteList[player.getUuid()] = false;
|
||||
player.sendMessage(tr("cleaner.vote.deny"));
|
||||
player.sendMessage(I18nAPI::get("cleaner.vote.deny"));
|
||||
return;
|
||||
}
|
||||
default:
|
||||
@@ -53,7 +53,8 @@ void sendVoteForm(Player* pl) {
|
||||
}
|
||||
|
||||
void checkVote() {
|
||||
float percentage = Config->getValue<float>({"VoteClean", "Percentage"}, 50.0f) / 100.0f;
|
||||
auto& config = Cleaner::Entry::getInstance().getConfig();
|
||||
float percentage = config.VoteClean.Percentage / 100.0f;
|
||||
int voteCount = 0;
|
||||
for (auto& key : voteList) {
|
||||
if (key.second == true) {
|
||||
@@ -62,19 +63,19 @@ void checkVote() {
|
||||
}
|
||||
float result = ((float)voteCount) / ((float)playerCount);
|
||||
if (result >= percentage) {
|
||||
if (ConfigFile::mAnnounce) {
|
||||
Helper::broadcastMessage(tr("cleaner.vote.succeed"));
|
||||
if (config.Basic.SendBroadcast) {
|
||||
Helper::broadcastMessage(I18nAPI::get("cleaner.vote.succeed"));
|
||||
}
|
||||
if (ConfigFile::mSendToast) {
|
||||
Helper::broadcastToast(tr("cleaner.vote.succeed"));
|
||||
if (config.Basic.SendToast) {
|
||||
Helper::broadcastToast(I18nAPI::get("cleaner.vote.succeed"));
|
||||
}
|
||||
Cleaner::CleanTask();
|
||||
} else {
|
||||
if (ConfigFile::mAnnounce) {
|
||||
Helper::broadcastMessage(tr("cleaner.vote.failed"));
|
||||
if (config.Basic.SendBroadcast) {
|
||||
Helper::broadcastMessage(I18nAPI::get("cleaner.vote.failed"));
|
||||
}
|
||||
if (ConfigFile::mSendToast) {
|
||||
Helper::broadcastToast(tr("cleaner.vote.failed"));
|
||||
if (config.Basic.SendToast) {
|
||||
Helper::broadcastToast(I18nAPI::get("cleaner.vote.failed"));
|
||||
}
|
||||
}
|
||||
hasVote = false;
|
||||
@@ -82,29 +83,30 @@ void checkVote() {
|
||||
}
|
||||
|
||||
void voteClean(Player* pl) {
|
||||
auto& config = Cleaner::Entry::getInstance().getConfig();
|
||||
voteList.clear();
|
||||
canVote = false;
|
||||
hasVote = true;
|
||||
playerCount = getPlayerCount();
|
||||
if (ConfigFile::mAnnounce) {
|
||||
Helper::broadcastMessage(tr("cleaner.vote.voteMessage", {pl->getRealName()}));
|
||||
if (config.Basic.SendBroadcast) {
|
||||
Helper::broadcastMessage(I18nAPI::get("cleaner.vote.voteMessage", {pl->getRealName()}));
|
||||
}
|
||||
if (ConfigFile::mSendToast) {
|
||||
Helper::broadcastToast(tr("cleaner.vote.voteMessage", {pl->getRealName()}));
|
||||
if (config.Basic.SendToast) {
|
||||
Helper::broadcastToast(I18nAPI::get("cleaner.vote.voteMessage", {pl->getRealName()}));
|
||||
}
|
||||
sendVoteForm(pl);
|
||||
auto cooldown = std::chrono::seconds::duration(Config->getValue<int>({"VoteClean", "Cooldown"}, 120));
|
||||
auto waitTime = std::chrono::seconds::duration(Config->getValue<int>({"VoteClean", "CheckDelay"}, 30));
|
||||
Cleaner::scheduler.add<DelayTask>(cooldown, [] { canVote = false; });
|
||||
Cleaner::scheduler.add<DelayTask>(waitTime, [] { checkVote(); });
|
||||
auto cooldown = std::chrono::seconds::duration(config.VoteClean.Cooldown);
|
||||
auto waitTime = std::chrono::seconds::duration(config.VoteClean.CheckDelay);
|
||||
Cleaner::Entry::getInstance().getScheduler().add<DelayTask>(cooldown, [] { canVote = false; });
|
||||
Cleaner::Entry::getInstance().getScheduler().add<DelayTask>(waitTime, [] { checkVote(); });
|
||||
}
|
||||
|
||||
void confirmForm(Player* pl) {
|
||||
auto fm = ll::form::ModalForm(
|
||||
tr("cleaner.vote.title"),
|
||||
tr("cleaner.vote.confirmTubtitle"),
|
||||
tr("cleaner.vote.confirmOk"),
|
||||
tr("cleaner.vote.confirmNo")
|
||||
I18nAPI::get("cleaner.vote.title"),
|
||||
I18nAPI::get("cleaner.vote.confirmTubtitle"),
|
||||
I18nAPI::get("cleaner.vote.confirmOk"),
|
||||
I18nAPI::get("cleaner.vote.confirmNo")
|
||||
);
|
||||
fm.sendTo(*pl, [](Player& player, ll::form::ModalFormResult result, ll::form::FormCancelReason reason) {
|
||||
if (result.has_value()) {
|
||||
@@ -113,7 +115,7 @@ void confirmForm(Player* pl) {
|
||||
return voteClean(&player);
|
||||
}
|
||||
case ll::form::ModalFormSelectedButton::Lower: {
|
||||
return player.sendMessage(tr("cleaner.vote.cancel"));
|
||||
return player.sendMessage(I18nAPI::get("cleaner.vote.cancel"));
|
||||
}
|
||||
default:
|
||||
return;
|
||||
@@ -127,14 +129,14 @@ void voteCommandExecute(Player* pl) {
|
||||
if (canVote) {
|
||||
confirmForm(pl);
|
||||
} else {
|
||||
pl->sendMessage(tr("cleaner.vote.cooldown"));
|
||||
pl->sendMessage(I18nAPI::get("cleaner.vote.cooldown"));
|
||||
}
|
||||
} else {
|
||||
if (voteList.count(pl->getUuid())) {
|
||||
pl->sendMessage(tr("cleaner.vote.voted"));
|
||||
pl->sendMessage(I18nAPI::get("cleaner.vote.voted"));
|
||||
} else {
|
||||
voteList[pl->getUuid()] = true;
|
||||
pl->sendMessage(tr("cleaner.vote.accept"));
|
||||
pl->sendMessage(I18nAPI::get("cleaner.vote.accept"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user