mirror of
https://github.com/BeamMP/BeamMP-Server.git
synced 2025-07-01 23:35:41 +00:00
Add player limit bypass to onPlayerAuth (#372)
With this PR, returning 2 in onPlayerAuth will allow the player to join without checking if the server is full. This makes it easier for plugin developers to allow for example their staff to join without having to change the max player count.
This commit is contained in:
commit
077bb6b1cd
@ -385,10 +385,21 @@ std::shared_ptr<TClient> TNetwork::Authentication(TConnection&& RawConnection) {
|
|||||||
|
|
||||||
auto Futures = LuaAPI::MP::Engine->TriggerEvent("onPlayerAuth", "", Client->GetName(), Client->GetRoles(), Client->IsGuest(), Client->GetIdentifiers());
|
auto Futures = LuaAPI::MP::Engine->TriggerEvent("onPlayerAuth", "", Client->GetName(), Client->GetRoles(), Client->IsGuest(), Client->GetIdentifiers());
|
||||||
TLuaEngine::WaitForAll(Futures);
|
TLuaEngine::WaitForAll(Futures);
|
||||||
bool NotAllowed = std::any_of(Futures.begin(), Futures.end(),
|
bool NotAllowed = false;
|
||||||
[](const std::shared_ptr<TLuaResult>& Result) {
|
bool BypassLimit = false;
|
||||||
return !Result->Error && Result->Result.is<int>() && bool(Result->Result.as<int>());
|
|
||||||
});
|
for (const auto& Result : Futures) {
|
||||||
|
if (!Result->Error && Result->Result.is<int>()) {
|
||||||
|
auto Res = Result->Result.as<int>();
|
||||||
|
|
||||||
|
if (Res == 1) {
|
||||||
|
NotAllowed = true;
|
||||||
|
break;
|
||||||
|
} else if (Res == 2) {
|
||||||
|
BypassLimit = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
std::string Reason;
|
std::string Reason;
|
||||||
bool NotAllowedWithReason = std::any_of(Futures.begin(), Futures.end(),
|
bool NotAllowedWithReason = std::any_of(Futures.begin(), Futures.end(),
|
||||||
[&Reason](const std::shared_ptr<TLuaResult>& Result) -> bool {
|
[&Reason](const std::shared_ptr<TLuaResult>& Result) -> bool {
|
||||||
@ -421,7 +432,7 @@ std::shared_ptr<TClient> TNetwork::Authentication(TConnection&& RawConnection) {
|
|||||||
|
|
||||||
if (!Allowed) {
|
if (!Allowed) {
|
||||||
return {};
|
return {};
|
||||||
} else if (mServer.ClientCount() < size_t(Application::Settings.getAsInt(Settings::Key::General_MaxPlayers))) {
|
} else if (mServer.ClientCount() < size_t(Application::Settings.getAsInt(Settings::Key::General_MaxPlayers)) || BypassLimit) {
|
||||||
beammp_info("Identification success");
|
beammp_info("Identification success");
|
||||||
mServer.InsertClient(Client);
|
mServer.InsertClient(Client);
|
||||||
TCPClient(Client);
|
TCPClient(Client);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user