private void TogglePermission(NWPlayer player, StructurePermission permission)
        {
            var data         = _base.GetPlayerTempData(GetPC());
            var dbPermission = _data.SingleOrDefault <PCBaseStructurePermission>(x => x.PlayerID == player.GlobalID && x.PCBaseStructureID == data.StructureID);
            var action       = DatabaseActionType.Update;

            if (dbPermission == null)
            {
                dbPermission = new PCBaseStructurePermission()
                {
                    PCBaseStructureID = data.StructureID,
                    PlayerID          = player.GlobalID
                };
                action = DatabaseActionType.Insert;
            }

            switch (permission)
            {
            case StructurePermission.CanPlaceEditStructures:
                dbPermission.CanPlaceEditStructures = !dbPermission.CanPlaceEditStructures;
                break;

            case StructurePermission.CanAccessStructureInventory:
                dbPermission.CanAccessStructureInventory = !dbPermission.CanAccessStructureInventory;
                break;

            case StructurePermission.CanEnterBuilding:
                dbPermission.CanEnterBuilding = !dbPermission.CanEnterBuilding;
                break;

            case StructurePermission.CanAdjustPermissions:
                dbPermission.CanAdjustPermissions = !dbPermission.CanAdjustPermissions;
                break;

            case StructurePermission.CanRetrieveStructures:
                dbPermission.CanRetrieveStructures = !dbPermission.CanRetrieveStructures;
                break;

            case StructurePermission.CanRenameStructures:
                dbPermission.CanRenameStructures = !dbPermission.CanRenameStructures;
                break;

            case StructurePermission.CanEditPrimaryResidence:
                dbPermission.CanEditPrimaryResidence = !dbPermission.CanEditPrimaryResidence;
                break;

            case StructurePermission.CanRemovePrimaryResidence:
                dbPermission.CanRemovePrimaryResidence = !dbPermission.CanRemovePrimaryResidence;
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(permission), permission, null);
            }

            _data.SubmitDataChange(dbPermission, action);
        }
        private void TogglePermission(Guid playerID, StructurePermission permission, bool isPublicPermission)
        {
            var data         = BaseService.GetPlayerTempData(GetPC());
            var dbPermission = isPublicPermission ?
                               DataService.SingleOrDefault <PCBaseStructurePermission>(x => x.PCBaseStructureID == data.StructureID &&
                                                                                       x.IsPublicPermission) :
                               DataService.SingleOrDefault <PCBaseStructurePermission>(x => x.PlayerID == playerID &&
                                                                                       x.PCBaseStructureID == data.StructureID &&
                                                                                       !x.IsPublicPermission);
            var action = DatabaseActionType.Update;

            if (dbPermission == null)
            {
                dbPermission = new PCBaseStructurePermission()
                {
                    PCBaseStructureID  = data.StructureID,
                    PlayerID           = playerID,
                    IsPublicPermission = isPublicPermission
                };
                action = DatabaseActionType.Insert;
            }

            switch (permission)
            {
            case StructurePermission.CanPlaceEditStructures:
                dbPermission.CanPlaceEditStructures = !dbPermission.CanPlaceEditStructures;
                break;

            case StructurePermission.CanAccessStructureInventory:
                dbPermission.CanAccessStructureInventory = !dbPermission.CanAccessStructureInventory;
                break;

            case StructurePermission.CanEnterBuilding:
                dbPermission.CanEnterBuilding = !dbPermission.CanEnterBuilding;
                break;

            case StructurePermission.CanAdjustPermissions:
                dbPermission.CanAdjustPermissions = !dbPermission.CanAdjustPermissions;
                break;

            case StructurePermission.CanRetrieveStructures:
                dbPermission.CanRetrieveStructures = !dbPermission.CanRetrieveStructures;
                break;

            case StructurePermission.CanRenameStructures:
                dbPermission.CanRenameStructures = !dbPermission.CanRenameStructures;
                break;

            case StructurePermission.CanEditPrimaryResidence:
                dbPermission.CanEditPrimaryResidence = !dbPermission.CanEditPrimaryResidence;
                break;

            case StructurePermission.CanRemovePrimaryResidence:
                dbPermission.CanRemovePrimaryResidence = !dbPermission.CanRemovePrimaryResidence;
                break;

            case StructurePermission.CanChangeStructureMode:
                dbPermission.CanChangeStructureMode = !dbPermission.CanChangeStructureMode;
                break;

            case StructurePermission.CanAdjustPublicPermissions:
                dbPermission.CanAdjustPublicPermissions = !dbPermission.CanAdjustPublicPermissions;
                break;

            case StructurePermission.CanFlyStarship:
                dbPermission.CanFlyStarship = !dbPermission.CanFlyStarship;
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(permission), permission, null);
            }

            DataService.SubmitDataChange(dbPermission, action);
        }
Example #3
0
        public static bool HasStructurePermission(NWPlayer player, Guid pcBaseStructureID, StructurePermission permission)
        {
            if (player.IsDM)
            {
                return(true);
            }

            var dbStructure = DataService.GetAll <PCBaseStructure>().Single(x => x.ID == pcBaseStructureID);

            // Check whether this is an item of furniture in a building.  If so, check the building's permissions.
            if (!String.IsNullOrWhiteSpace(dbStructure.ParentPCBaseStructureID.ToString()))
            {
                return(HasStructurePermission(player, (Guid)dbStructure.ParentPCBaseStructureID, permission));
            }

            // Public base permissions take priority over all other permissions. Check those first.
            var publicBasePermission = DataService.SingleOrDefault <PCBasePermission>(x => x.PCBaseID == dbStructure.PCBaseID &&
                                                                                      x.IsPublicPermission);

            if (publicBasePermission != null)
            {
                if (permission == StructurePermission.CanAccessStructureInventory && publicBasePermission.CanAccessStructureInventory)
                {
                    return(true);
                }
                if (permission == StructurePermission.CanPlaceEditStructures && publicBasePermission.CanPlaceEditStructures)
                {
                    return(true);
                }
                if (permission == StructurePermission.CanEnterBuilding && publicBasePermission.CanEnterBuildings)
                {
                    return(true);
                }
                if (permission == StructurePermission.CanRetrieveStructures && publicBasePermission.CanRetrieveStructures)
                {
                    return(true);
                }
                if (permission == StructurePermission.CanAdjustPermissions && publicBasePermission.CanAdjustPermissions)
                {
                    return(true);
                }
                if (permission == StructurePermission.CanRenameStructures && publicBasePermission.CanRenameStructures)
                {
                    return(true);
                }
                if (permission == StructurePermission.CanEditPrimaryResidence && publicBasePermission.CanEditPrimaryResidence)
                {
                    return(true);
                }
                if (permission == StructurePermission.CanRemovePrimaryResidence && publicBasePermission.CanRemovePrimaryResidence)
                {
                    return(true);
                }
                if (permission == StructurePermission.CanChangeStructureMode && publicBasePermission.CanChangeStructureMode)
                {
                    return(true);
                }
                if (permission == StructurePermission.CanAdjustPublicPermissions && publicBasePermission.CanAdjustPublicPermissions)
                {
                    return(true);
                }
                if (permission == StructurePermission.CanFlyStarship && publicBasePermission.CanFlyStarship)
                {
                    return(true);
                }
            }

            // Public structure permissions are the next thing we check.
            var publicStructurePermission = DataService.SingleOrDefault <PCBaseStructurePermission>(x => x.PCBaseStructureID == dbStructure.ID &&
                                                                                                    x.IsPublicPermission);

            if (publicStructurePermission != null)
            {
                if (permission == StructurePermission.CanAccessStructureInventory && publicStructurePermission.CanAccessStructureInventory)
                {
                    return(true);
                }
                if (permission == StructurePermission.CanPlaceEditStructures && publicStructurePermission.CanPlaceEditStructures)
                {
                    return(true);
                }
                if (permission == StructurePermission.CanEnterBuilding && publicStructurePermission.CanEnterBuilding)
                {
                    return(true);
                }
                if (permission == StructurePermission.CanRetrieveStructures && publicStructurePermission.CanRetrieveStructures)
                {
                    return(true);
                }
                if (permission == StructurePermission.CanAdjustPermissions && publicStructurePermission.CanAdjustPermissions)
                {
                    return(true);
                }
                if (permission == StructurePermission.CanRenameStructures && publicStructurePermission.CanRenameStructures)
                {
                    return(true);
                }
                if (permission == StructurePermission.CanEditPrimaryResidence && publicStructurePermission.CanEditPrimaryResidence)
                {
                    return(true);
                }
                if (permission == StructurePermission.CanRemovePrimaryResidence && publicStructurePermission.CanRemovePrimaryResidence)
                {
                    return(true);
                }
                if (permission == StructurePermission.CanChangeStructureMode && publicStructurePermission.CanChangeStructureMode)
                {
                    return(true);
                }
                if (permission == StructurePermission.CanAdjustPublicPermissions && publicStructurePermission.CanAdjustPublicPermissions)
                {
                    return(true);
                }
                if (permission == StructurePermission.CanFlyStarship && publicStructurePermission.CanFlyStarship)
                {
                    return(true);
                }
            }

            // Base permissions take priority over structure permissions. Check those next.
            var basePermission = DataService.SingleOrDefault <PCBasePermission>(x => x.PlayerID == player.GlobalID &&
                                                                                x.PCBaseID == dbStructure.PCBaseID &&
                                                                                !x.IsPublicPermission);


            if (basePermission != null)
            {
                if (permission == StructurePermission.CanAccessStructureInventory && basePermission.CanAccessStructureInventory)
                {
                    return(true);
                }
                if (permission == StructurePermission.CanPlaceEditStructures && basePermission.CanPlaceEditStructures)
                {
                    return(true);
                }
                if (permission == StructurePermission.CanEnterBuilding && basePermission.CanEnterBuildings)
                {
                    return(true);
                }
                if (permission == StructurePermission.CanRetrieveStructures && basePermission.CanRetrieveStructures)
                {
                    return(true);
                }
                if (permission == StructurePermission.CanAdjustPermissions && basePermission.CanAdjustPermissions)
                {
                    return(true);
                }
                if (permission == StructurePermission.CanRenameStructures && basePermission.CanRenameStructures)
                {
                    return(true);
                }
                if (permission == StructurePermission.CanEditPrimaryResidence && basePermission.CanEditPrimaryResidence)
                {
                    return(true);
                }
                if (permission == StructurePermission.CanRemovePrimaryResidence && basePermission.CanRemovePrimaryResidence)
                {
                    return(true);
                }
                if (permission == StructurePermission.CanChangeStructureMode && basePermission.CanChangeStructureMode)
                {
                    return(true);
                }
                if (permission == StructurePermission.CanAdjustPublicPermissions && basePermission.CanAdjustPublicPermissions)
                {
                    return(true);
                }
                if (permission == StructurePermission.CanFlyStarship && basePermission.CanFlyStarship)
                {
                    return(true);
                }
            }

            // Didn't find a base permission. Check the structure permissions.
            var structurePermission = DataService.GetAll <PCBaseStructurePermission>()
                                      .SingleOrDefault(x => x.PCBaseStructureID == pcBaseStructureID &&
                                                       x.PlayerID == player.GlobalID &&
                                                       !x.IsPublicPermission);

            if (structurePermission == null)
            {
                return(false);
            }

            if (permission == StructurePermission.CanAccessStructureInventory && structurePermission.CanAccessStructureInventory)
            {
                return(true);
            }
            if (permission == StructurePermission.CanPlaceEditStructures && structurePermission.CanPlaceEditStructures)
            {
                return(true);
            }
            if (permission == StructurePermission.CanEnterBuilding && structurePermission.CanEnterBuilding)
            {
                return(true);
            }
            if (permission == StructurePermission.CanRetrieveStructures && structurePermission.CanRetrieveStructures)
            {
                return(true);
            }
            if (permission == StructurePermission.CanAdjustPermissions && structurePermission.CanAdjustPermissions)
            {
                return(true);
            }
            if (permission == StructurePermission.CanRenameStructures && structurePermission.CanRenameStructures)
            {
                return(true);
            }
            if (permission == StructurePermission.CanEditPrimaryResidence && structurePermission.CanEditPrimaryResidence)
            {
                return(true);
            }
            if (permission == StructurePermission.CanRemovePrimaryResidence && structurePermission.CanRemovePrimaryResidence)
            {
                return(true);
            }
            if (permission == StructurePermission.CanChangeStructureMode && structurePermission.CanChangeStructureMode)
            {
                return(true);
            }
            if (permission == StructurePermission.CanAdjustPublicPermissions && structurePermission.CanAdjustPublicPermissions)
            {
                return(true);
            }
            if (permission == StructurePermission.CanFlyStarship && structurePermission.CanFlyStarship)
            {
                return(true);
            }

            // Player doesn't have permission.
            return(false);
        }
        public bool HasStructurePermission(NWPlayer player, Guid pcBaseStructureID, StructurePermission permission)
        {
            if (player.IsDM)
            {
                return(true);
            }

            // Base permissions take priority over structure permissions. Check those first.
            var dbStructure    = _data.GetAll <PCBaseStructure>().Single(x => x.ID == pcBaseStructureID);
            var basePermission = _data.SingleOrDefault <PCBasePermission>(x => x.PlayerID == player.GlobalID && x.PCBaseID == dbStructure.PCBaseID);

            if (basePermission != null)
            {
                if (permission == StructurePermission.CanAccessStructureInventory && basePermission.CanAccessStructureInventory)
                {
                    return(true);
                }
                if (permission == StructurePermission.CanPlaceEditStructures && basePermission.CanPlaceEditStructures)
                {
                    return(true);
                }
                if (permission == StructurePermission.CanEnterBuilding && basePermission.CanEnterBuildings)
                {
                    return(true);
                }
                if (permission == StructurePermission.CanRetrieveStructures && basePermission.CanRetrieveStructures)
                {
                    return(true);
                }
                if (permission == StructurePermission.CanAdjustPermissions && basePermission.CanAdjustPermissions)
                {
                    return(true);
                }
                if (permission == StructurePermission.CanRenameStructures && basePermission.CanRenameStructures)
                {
                    return(true);
                }
                if (permission == StructurePermission.CanEditPrimaryResidence && basePermission.CanEditPrimaryResidence)
                {
                    return(true);
                }
                if (permission == StructurePermission.CanRemovePrimaryResidence && basePermission.CanRemovePrimaryResidence)
                {
                    return(true);
                }
            }

            // Didn't find a base permission. Check the structure permissions.
            var structurePermission = _data.GetAll <PCBaseStructurePermission>().SingleOrDefault(x => x.PCBaseStructureID == pcBaseStructureID && x.PlayerID == player.GlobalID);

            if (structurePermission == null)
            {
                return(false);
            }

            if (permission == StructurePermission.CanAccessStructureInventory && structurePermission.CanAccessStructureInventory)
            {
                return(true);
            }
            if (permission == StructurePermission.CanPlaceEditStructures && structurePermission.CanPlaceEditStructures)
            {
                return(true);
            }
            if (permission == StructurePermission.CanEnterBuilding && structurePermission.CanEnterBuilding)
            {
                return(true);
            }
            if (permission == StructurePermission.CanRetrieveStructures && structurePermission.CanRetrieveStructures)
            {
                return(true);
            }
            if (permission == StructurePermission.CanAdjustPermissions && structurePermission.CanAdjustPermissions)
            {
                return(true);
            }
            if (permission == StructurePermission.CanRenameStructures && structurePermission.CanRenameStructures)
            {
                return(true);
            }
            if (permission == StructurePermission.CanEditPrimaryResidence && structurePermission.CanEditPrimaryResidence)
            {
                return(true);
            }
            if (permission == StructurePermission.CanRemovePrimaryResidence && structurePermission.CanRemovePrimaryResidence)
            {
                return(true);
            }

            // Player doesn't have permission.
            return(false);
        }