Fix empty group letting people in over cap

This commit is contained in:
Westin Miller
2018-02-12 14:41:25 -08:00
parent b5793d36a8
commit f19fd84f1d
2 changed files with 18 additions and 9 deletions

View File

@@ -200,6 +200,7 @@
<ItemGroup> <ItemGroup>
<Service Include="{508349B6-6B84-4DF5-91F0-309BEEBAD82D}" /> <Service Include="{508349B6-6B84-4DF5-91F0-309BEEBAD82D}" />
</ItemGroup> </ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="$(SolutionDir)\TransformOnBuild.targets" /> <Import Project="$(SolutionDir)\TransformOnBuild.targets" />
</Project> </Project>

View File

@@ -29,7 +29,9 @@ namespace Torch.Server.Managers
private static readonly Logger _log = LogManager.GetCurrentClassLogger(); private static readonly Logger _log = LogManager.GetCurrentClassLogger();
#pragma warning disable 649 #pragma warning disable 649
[ReflectedGetter(Name = "m_members")] private static Func<MyDedicatedServerBase, List<ulong>> _members; [ReflectedGetter(Name = "m_members")]
private static Func<MyDedicatedServerBase, List<ulong>> _members;
[ReflectedGetter(Name = "m_waitingForGroup")] [ReflectedGetter(Name = "m_waitingForGroup")]
private static Func<MyDedicatedServerBase, HashSet<ulong>> _waitingForGroup; private static Func<MyDedicatedServerBase, HashSet<ulong>> _waitingForGroup;
#pragma warning restore 649 #pragma warning restore 649
@@ -112,13 +114,17 @@ namespace Torch.Server.Managers
[ReflectedStaticMethod(Type = typeof(MyGameService), Name = "GetServerAccountType")] [ReflectedStaticMethod(Type = typeof(MyGameService), Name = "GetServerAccountType")]
private static Func<ulong, MyGameServiceAccountType> _getServerAccountType; private static Func<ulong, MyGameServiceAccountType> _getServerAccountType;
[ReflectedMethod(Name = "UserAccepted")] private static Action<MyDedicatedServerBase, ulong> _userAcceptedImpl; [ReflectedMethod(Name = "UserAccepted")]
private static Action<MyDedicatedServerBase, ulong> _userAcceptedImpl;
[ReflectedMethod(Name = "UserRejected")] [ReflectedMethod(Name = "UserRejected")]
private static Action<MyDedicatedServerBase, ulong, JoinResult> _userRejected; private static Action<MyDedicatedServerBase, ulong, JoinResult> _userRejected;
[ReflectedMethod(Name = "IsClientBanned")] private static Func<MyMultiplayerBase, ulong, bool> _isClientBanned; [ReflectedMethod(Name = "IsClientBanned")]
[ReflectedMethod(Name = "IsClientKicked")] private static Func<MyMultiplayerBase, ulong, bool> _isClientKicked; private static Func<MyMultiplayerBase, ulong, bool> _isClientBanned;
[ReflectedMethod(Name = "IsClientKicked")]
private static Func<MyMultiplayerBase, ulong, bool> _isClientKicked;
[ReflectedMethod(Name = "RaiseClientKicked")] [ReflectedMethod(Name = "RaiseClientKicked")]
private static Action<MyMultiplayerBase, ulong> _raiseClientKicked; private static Action<MyMultiplayerBase, ulong> _raiseClientKicked;
@@ -158,7 +164,8 @@ namespace Torch.Server.Managers
_log.Warn($"Rejecting user {steamId} because they are not whitelisted in Torch.cfg."); _log.Warn($"Rejecting user {steamId} because they are not whitelisted in Torch.cfg.");
UserRejected(steamId, JoinResult.NotInGroup); UserRejected(steamId, JoinResult.NotInGroup);
} }
else if (Torch.CurrentSession.KeenSession.OnlineMode == MyOnlineModeEnum.OFFLINE && !Torch.CurrentSession.KeenSession.IsUserAdmin(steamId)) else if (Torch.CurrentSession.KeenSession.OnlineMode == MyOnlineModeEnum.OFFLINE &&
!Torch.CurrentSession.KeenSession.IsUserAdmin(steamId))
{ {
_log.Warn($"Rejecting user {steamId}, world is set to offline and user is not admin."); _log.Warn($"Rejecting user {steamId}, world is set to offline and user is not admin.");
UserRejected(steamId, JoinResult.TicketCanceled); UserRejected(steamId, JoinResult.TicketCanceled);
@@ -191,14 +198,14 @@ namespace Torch.Server.Managers
CommitVerdict(info.SteamID, JoinResult.KickedRecently); CommitVerdict(info.SteamID, JoinResult.KickedRecently);
else if (info.SteamResponse != JoinResult.OK) else if (info.SteamResponse != JoinResult.OK)
CommitVerdict(info.SteamID, info.SteamResponse); CommitVerdict(info.SteamID, info.SteamResponse);
else if (MySandboxGame.ConfigDedicated.GroupID == 0uL || else if (MySandboxGame.ConfigDedicated.Administrators.Contains(info.SteamID.ToString()) ||
MySandboxGame.ConfigDedicated.Administrators.Contains(info.SteamID.ToString()) ||
MySandboxGame.ConfigDedicated.Administrators.Contains(_convertSteamIDFrom64(info.SteamID))) MySandboxGame.ConfigDedicated.Administrators.Contains(_convertSteamIDFrom64(info.SteamID)))
CommitVerdict(info.SteamID, JoinResult.OK); CommitVerdict(info.SteamID, JoinResult.OK);
else if (MyMultiplayer.Static.MemberLimit > 0 && else if (MyMultiplayer.Static.MemberLimit > 0 &&
MyMultiplayer.Static.MemberCount + 1 > MyMultiplayer.Static.MemberLimit) MyMultiplayer.Static.MemberCount + 1 > MyMultiplayer.Static.MemberLimit)
CommitVerdict(info.SteamID, JoinResult.ServerFull); CommitVerdict(info.SteamID, JoinResult.ServerFull);
else if (MySandboxGame.ConfigDedicated.GroupID == info.Group && (info.Member || info.Officer)) else if (MySandboxGame.ConfigDedicated.GroupID == 0uL ||
MySandboxGame.ConfigDedicated.GroupID == info.Group && (info.Member || info.Officer))
CommitVerdict(info.SteamID, JoinResult.OK); CommitVerdict(info.SteamID, JoinResult.OK);
else else
CommitVerdict(info.SteamID, JoinResult.NotInGroup); CommitVerdict(info.SteamID, JoinResult.NotInGroup);
@@ -215,6 +222,7 @@ namespace Torch.Server.Managers
} }
else else
verdict = task.Result; verdict = task.Result;
Torch.Invoke(() => { CommitVerdict(info.SteamID, verdict); }); Torch.Invoke(() => { CommitVerdict(info.SteamID, verdict); });
}); });
} }