From 5442838f6f613d26fc4b5ee713251ea2b5cb8953 Mon Sep 17 00:00:00 2001 From: JAJames Date: Fri, 29 Jan 2016 16:12:55 -0500 Subject: [PATCH] Added config option "BanFromStr", to replace "the server" constant string in ban messages. --- Release/Plugins/RenX.Core.lib | Bin 172438 -> 172438 bytes RenX.Core/RenX_Server.cpp | 13 +++++++------ RenX.Core/RenX_Server.h | 1 + 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/Release/Plugins/RenX.Core.lib b/Release/Plugins/RenX.Core.lib index b85f7213d1eb5251899e18c6959b6302866429bc..bb052b49269cb19609334adcf2d3178257a1d205 100644 GIT binary patch delta 11770 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 delta 11770 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 gO0)n|)~kCO(std::chrono::system_clock::to_time_t(last_to_expire[0]->timestamp + last_to_expire[0]->length)))); if (last_to_expire[0]->length == std::chrono::seconds::zero()) - this->forceKickPlayer(player, Jupiter::StringS::Format("You were permanently banned from the server on %s for: %.*s", timeStr, last_to_expire[0]->reason.size(), last_to_expire[0]->reason.ptr())); + this->forceKickPlayer(player, Jupiter::StringS::Format("You were permanently banned from %.*s on %s for: %.*s", RenX::Server::ban_from_str.size(), RenX::Server::ban_from_str.ptr(), timeStr, last_to_expire[0]->reason.size(), last_to_expire[0]->reason.ptr())); else - this->forceKickPlayer(player, Jupiter::StringS::Format("You are banned from the server until %s for: %.*s", timeStr, last_to_expire[0]->reason.size(), last_to_expire[0]->reason.ptr())); + this->forceKickPlayer(player, Jupiter::StringS::Format("You are banned from %.*s until %s for: %.*s", RenX::Server::ban_from_str.size(), RenX::Server::ban_from_str.ptr(), timeStr, last_to_expire[0]->reason.size(), last_to_expire[0]->reason.ptr())); player->ban_flags |= RenX::BanDatabase::Entry::FLAG_TYPE_BOT; // implies FLAG_TYPE_BOT } @@ -574,14 +574,14 @@ void RenX::Server::banPlayer(const RenX::PlayerInfo *player, const Jupiter::Read if (RenX::Server::rconBan) RenX::Server::sock.send(Jupiter::StringS::Format("ckickban pid%d %.*s\n", player->id, reason.size(), reason.ptr())); else if (banner.isNotEmpty()) - RenX::Server::forceKickPlayer(player, Jupiter::StringS::Format("You are permanently banned from the server by %.*s for: %.*s", banner.size(), banner.ptr(), reason.size(), reason.ptr())); + RenX::Server::forceKickPlayer(player, Jupiter::StringS::Format("You are permanently banned from %.*s by %.*s for: %.*s", RenX::Server::ban_from_str.size(), RenX::Server::ban_from_str.ptr(), banner.size(), banner.ptr(), reason.size(), reason.ptr())); else - RenX::Server::forceKickPlayer(player, Jupiter::StringS::Format("You are permanently banned from the server for: %.*s", reason.size(), reason.ptr())); + RenX::Server::forceKickPlayer(player, Jupiter::StringS::Format("You are permanently banned from %.*s for: %.*s", RenX::Server::ban_from_str.size(), RenX::Server::ban_from_str.ptr(), reason.size(), reason.ptr())); } else if (banner.isNotEmpty()) - RenX::Server::forceKickPlayer(player, Jupiter::StringS::Format("You are banned from the server by %.*s for the next %lld days, %.2d:%.2d:%.2d for: %.*s", banner.size(), banner.ptr(), static_cast(length.count() / 86400), static_cast(length.count() % 3600), static_cast((length.count() % 3600) / 60), static_cast(length.count() % 60), reason.size(), reason.ptr())); + RenX::Server::forceKickPlayer(player, Jupiter::StringS::Format("You are banned from %.*s by %.*s for the next %lld days, %.2d:%.2d:%.2d for: %.*s", RenX::Server::ban_from_str.size(), RenX::Server::ban_from_str.ptr(), banner.size(), banner.ptr(), static_cast(length.count() / 86400), static_cast(length.count() % 3600), static_cast((length.count() % 3600) / 60), static_cast(length.count() % 60), reason.size(), reason.ptr())); else - RenX::Server::forceKickPlayer(player, Jupiter::StringS::Format("You are banned from the server for the next %lld days, %.2d:%.2d:%.2d for: %.*s", static_cast(length.count() / 86400), static_cast(length.count() % 3600), static_cast((length.count() % 3600) / 60), static_cast(length.count() % 60), reason.size(), reason.ptr())); + RenX::Server::forceKickPlayer(player, Jupiter::StringS::Format("You are banned from %.*s for the next %lld days, %.2d:%.2d:%.2d for: %.*s", RenX::Server::ban_from_str.size(), RenX::Server::ban_from_str.ptr(), static_cast(length.count() / 86400), static_cast(length.count() % 3600), static_cast((length.count() % 3600) / 60), static_cast(length.count() % 60), reason.size(), reason.ptr())); } } @@ -2856,6 +2856,7 @@ void RenX::Server::init() RenX::Server::setCommandPrefix(Jupiter::IRC::Client::Config->get(RenX::Server::configSection, "CommandPrefix"_jrs)); RenX::Server::setPrefix(Jupiter::IRC::Client::Config->get(RenX::Server::configSection, "IRCPrefix"_jrs)); + RenX::Server::ban_from_str = Jupiter::IRC::Client::Config->get(RenX::Server::configSection, "BanFromStr"_jrs, "the server"_jrs); RenX::Server::rules = Jupiter::IRC::Client::Config->get(RenX::Server::configSection, "Rules"_jrs, "Anarchy!"_jrs); RenX::Server::delay = std::chrono::milliseconds(Jupiter::IRC::Client::Config->getInt(RenX::Server::configSection, "ReconnectDelay"_jrs, 10000)); RenX::Server::maxAttempts = Jupiter::IRC::Client::Config->getInt(RenX::Server::configSection, "MaxReconnectAttempts"_jrs, -1); diff --git a/RenX.Core/RenX_Server.h b/RenX.Core/RenX_Server.h index a9712ef..2256b40 100644 --- a/RenX.Core/RenX_Server.h +++ b/RenX.Core/RenX_Server.h @@ -989,6 +989,7 @@ namespace RenX Jupiter::StringS pass; Jupiter::StringS configSection; Jupiter::StringS rules; + Jupiter::StringS ban_from_str; Jupiter::StringS IRCPrefix; Jupiter::StringS CommandPrefix; Jupiter::INIFile::Section *commandAccessLevels;