public bool IsLockedForInteract(BlockPos pos, IPlayer forPlayer) { Dictionary <int, BlockReinforcement> reinforcmentsOfChunk = getOrCreateReinforcmentsAt(pos); if (reinforcmentsOfChunk == null) { return(false); } int index3d = toLocalIndex(pos); BlockReinforcement bre; if (reinforcmentsOfChunk.TryGetValue(index3d, out bre)) { if (bre.Locked && bre.PlayerUID != forPlayer.PlayerUID) { EnumBlockAccessFlags flags = GetAccessFlags(bre.PlayerUID, forPlayer); if ((flags & EnumBlockAccessFlags.Use) > 0) { return(false); } return(true); } } return(false); }
public EnumBlockAccessFlags GetAccessFlags(string owningPlayerUid, IPlayer forPlayer) { if (owningPlayerUid == forPlayer.PlayerUID) { return(EnumBlockAccessFlags.Use | EnumBlockAccessFlags.BuildOrBreak); } ReinforcedPrivilegeGrants grants; EnumBlockAccessFlags flags = EnumBlockAccessFlags.None; if (privGrantsByOwningPlayerUid.TryGetValue(owningPlayerUid, out grants)) { // Maybe player privilege? grants.PlayerGrants.TryGetValue(forPlayer.PlayerUID, out flags); // Maybe group privilege? foreach (var val in grants.GroupGrants) { if (forPlayer.GetGroup(val.Key) != null) { flags |= val.Value; } } } return(flags); }
public EnumBlockAccessFlags GetAccessFlags(string owningPlayerUid, int owningGroupId, IPlayer forPlayer) { if (owningPlayerUid == forPlayer.PlayerUID) { return(EnumBlockAccessFlags.Use | EnumBlockAccessFlags.BuildOrBreak); } var group = forPlayer.GetGroup(owningGroupId); if (group != null) { return(EnumBlockAccessFlags.Use | EnumBlockAccessFlags.BuildOrBreak); } ReinforcedPrivilegeGrants grants; EnumBlockAccessFlags flags = EnumBlockAccessFlags.None; if (owningPlayerUid != null && privGrantsByOwningPlayerUid.TryGetValue(owningPlayerUid, out grants)) { // Maybe player privilege? grants.PlayerGrants.TryGetValue(forPlayer.PlayerUID, out flags); // Maybe group privilege? foreach (var val in grants.GroupGrants) { if (forPlayer.GetGroup(val.Key) != null) { flags |= val.Value; } } } ReinforcedPrivilegeGrantsGroup grantsgr; if (owningGroupId != 0 && privGrantsByOwningGroupUid.TryGetValue(owningGroupId, out grantsgr)) { // Is a member of the owning group if (group != null) { grantsgr.PlayerGrants.TryGetValue(forPlayer.PlayerUID, out flags); flags |= grantsgr.DefaultGrants; } // Is a member of a group who has access to the reinforcement foreach (var val in grantsgr.GroupGrants) { if (forPlayer.GetGroup(val.Key) != null) { flags |= val.Value; } } } return(flags); }
public EnumPlayerAccessResult TestPlayerAccess(IServerPlayer player, EnumBlockAccessFlags claimFlag) { // Owner if (player.PlayerUID.Equals(OwnedByPlayerUid)) { return(EnumPlayerAccessResult.OkOwner); } if (OwnedByPlayerGroupUid > 0 && player.Groups.Any((ms) => ms.GroupUid == OwnedByPlayerGroupUid)) { return(EnumPlayerAccessResult.OkGroup); } // Has higher priv level if (player.Role.PrivilegeLevel > ProtectionLevel && player.WorldData.CurrentGameMode == EnumGameMode.Creative) { return(EnumPlayerAccessResult.OkPrivilege); } EnumBlockAccessFlags flags; if (PermittedPlayerUids.TryGetValue(player.PlayerUID, out flags) && (flags & claimFlag) > 0) { return(EnumPlayerAccessResult.OkGrantedPlayer); } foreach (PlayerGroupMembership group in player.Groups) { if (PermittedPlayerGroupIds.TryGetValue(group.GroupUid, out flags) && (flags & claimFlag) > 0) { return(EnumPlayerAccessResult.OkGrantedGroup); } } return(EnumPlayerAccessResult.Denied); }
public void SetGroupPrivilege(IServerPlayer owningPlayer, int chatGroupId, string forGroupName, EnumBlockAccessFlags access) { ReinforcedPrivilegeGrants grants; if (!privGrantsByOwningPlayerUid.TryGetValue(owningPlayer.PlayerUID, out grants)) { grants = new ReinforcedPrivilegeGrants(); privGrantsByOwningPlayerUid[owningPlayer.PlayerUID] = grants; } PlayerGroup group = (api as ICoreServerAPI).Groups.GetPlayerGroupByName(forGroupName); if (group == null) { owningPlayer.SendMessage(chatGroupId, Lang.Get("No such group found"), EnumChatType.CommandError); return; } if (access == EnumBlockAccessFlags.None) { if (grants.GroupGrants.Remove(group.Uid)) { owningPlayer.SendMessage(chatGroupId, Lang.Get("Ok, privilege revoked from group."), EnumChatType.CommandSuccess); } else { owningPlayer.SendMessage(chatGroupId, Lang.Get("No action taken. Group does not have any privilege to your reinforced blocks."), EnumChatType.CommandSuccess); } } else { grants.GroupGrants[group.Uid] = access; owningPlayer.SendMessage(chatGroupId, Lang.Get("Ok, Privilege for group set."), EnumChatType.CommandSuccess); } SyncPrivData(); }
public void SetPlayerPrivilege(IServerPlayer owningPlayer, int chatGroupId, string forPlayerUid, EnumBlockAccessFlags access) { ReinforcedPrivilegeGrants grants; if (!privGrantsByOwningPlayerUid.TryGetValue(owningPlayer.PlayerUID, out grants)) { grants = new ReinforcedPrivilegeGrants(); privGrantsByOwningPlayerUid[owningPlayer.PlayerUID] = grants; } if (access == EnumBlockAccessFlags.None) { if (grants.PlayerGrants.Remove(forPlayerUid)) { owningPlayer.SendMessage(chatGroupId, Lang.Get("Ok, privilege revoked from player."), EnumChatType.CommandSuccess); } else { owningPlayer.SendMessage(chatGroupId, Lang.Get("No action taken. Player does not have any privilege to your reinforced blocks."), EnumChatType.CommandSuccess); } } else { grants.PlayerGrants[forPlayerUid] = access; owningPlayer.SendMessage(chatGroupId, Lang.Get("Ok, Privilege for player set."), EnumChatType.CommandSuccess); } SyncPrivData(); }
private void onCmd(IServerPlayer player, int groupId, CmdArgs args) { string subcmd = args.PopWord(); string plrgrpname = args.PopWord(); string flagString = args.PopWord(); EnumBlockAccessFlags flags = EnumBlockAccessFlags.None; if (flagString != null) { if (flagString.ToLowerInvariant() == "use") { flags = EnumBlockAccessFlags.Use; } if (flagString.ToLowerInvariant() == "all") { flags = EnumBlockAccessFlags.BuildOrBreak | EnumBlockAccessFlags.Use; } } if (subcmd == null || plrgrpname == null) { player.SendMessage(groupId, "Syntax: /bre [grant|revoke|grantgroup|revokegroup] [playername/groupname] [use or all]", EnumChatType.CommandError); return; } ICoreServerAPI sapi = api as ICoreServerAPI; IServerPlayerData plrData = null; if (subcmd == "grant" || subcmd == "revoke") { plrData = sapi.PlayerData.GetPlayerDataByLastKnownName(plrgrpname); if (plrData == null) { player.SendMessage(groupId, "No player with such name found or never connected to this server", EnumChatType.CommandError); return; } } switch (subcmd) { case "grant": if (flags == EnumBlockAccessFlags.None) { player.SendMessage(groupId, "Invalid or missing access flag. Declare 'use' or 'all'", EnumChatType.CommandError); return; } SetPlayerPrivilege(player, groupId, plrData.PlayerUID, flags); break; case "revoke": SetPlayerPrivilege(player, groupId, plrData.PlayerUID, EnumBlockAccessFlags.None); break; case "grantgroup": SetGroupPrivilege(player, groupId, plrgrpname, flags); break; case "revokegroup": SetGroupPrivilege(player, groupId, plrgrpname, EnumBlockAccessFlags.None);; break; } }
protected void grantRevokeGroupOwned2Group(IServerPlayer player, int sourceGroupId, string privtype, string targetGroupName, EnumBlockAccessFlags flags) { // [insert code here \o/] }
protected void grantRevokeGroupOwned2Player(IServerPlayer player, int groupId, string privtype, string firstarg, string flagString, EnumBlockAccessFlags flags, ReinforcedPrivilegeGrantsGroup groupGrants) { (api as ICoreServerAPI).PlayerData.ResolvePlayerName(firstarg, (result, playeruid) => { if (result == EnumServerResponse.Good) { if (privtype == "grant") { groupGrants.PlayerGrants[playeruid] = flags; player.SendMessage(groupId, flagString + " access set for player " + firstarg, EnumChatType.CommandError); SyncPrivData(); } else { if (groupGrants.PlayerGrants.Remove(playeruid)) { player.SendMessage(groupId, "All access revoked for player " + firstarg, EnumChatType.CommandError); SyncPrivData(); } else { player.SendMessage(groupId, "This player has no access. No action taken.", EnumChatType.CommandError); } } return; } if (result == EnumServerResponse.Offline) { player.SendMessage(groupId, Lang.Get("Player with name '{0}' is not online and auth server is offline. Cannot check if this player exists. Try again later.", firstarg), EnumChatType.CommandError); return; } player.SendMessage(groupId, Lang.Get("No player with name '{0}' exists", firstarg), EnumChatType.CommandError); }); }