Exemple #1
0
        private string ServerRemote_MakeCurrentBed(IStaticWorldObject bedObject)
        {
            var character = ServerRemoteContext.Character;

            if (!this.SharedIsInsideCharacterInteractionArea(character, bedObject, writeToLog: true))
            {
                return(CoreStrings.Notification_TooFar);
            }

            var privateState = GetPrivateState(bedObject);

            if (privateState.Owner == null)
            {
                // can set new owner
                if (!LandClaimSystem.ServerIsObjectInsideOwnedOfFreeArea(bedObject, character))
                {
                    return(ErrorClaimBed_AnotherPlayersLandClaim);
                }

                ServerSetCurrentBed(bedObject, character);
                return(null);
            }

            if (privateState.Owner == character)
            {
                // the owner is the same
                return(null);
            }

            return(ErrorClaimBed_AlreadyHasOwner);
        }
        public override bool SharedCanInteract(ICharacter character, IStaticWorldObject worldObject, bool writeToLog)
        {
            if (!base.SharedCanInteract(character, worldObject, writeToLog))
            {
                return(false);
            }

            if (IsServer &&
                !LandClaimSystem.ServerIsObjectInsideOwnedOfFreeArea(worldObject, character))
            {
                // not the land owner
                if (writeToLog)
                {
                    Logger.Warning(
                        $"Character cannot interact with {worldObject} - not the land owner.",
                        character);

                    this.CallClient(
                        character,
                        _ => _.ClientRemote_OnCannotInteract(worldObject));
                }

                return(false);
            }

            return(true);
        }
 // also checks that the bed is inside the player land claim (or the land is free)
 private static bool ServerCheckIsHasBed(ICharacter character, out IStaticWorldObject bed)
 {
     bed = PlayerCharacter.GetPrivateState(character).CurrentBedObject;
     return(bed != null &&
            !bed.IsDestroyed &&
            LandClaimSystem.ServerIsObjectInsideOwnedOfFreeArea(bed, character));
 }