Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        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();
        }
Пример #6
0
        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();
        }
Пример #7
0
        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);
            });
        }