mirror of
https://github.com/BeamMP/BeamMP-Server.git
synced 2025-07-01 23:35:41 +00:00
Add player limit bypass to onPlayerAuth
This commit is contained in:
parent
7f69e336a9
commit
bb3c762d68
@ -404,10 +404,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 {
|
||||||
@ -440,7 +451,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