fCraft.PlayerInfo.Freeze C# (CSharp) Method

Freeze() public method

Freezes this player (prevents from moving, building, and from using most commands). Throws PlayerOpException on problems.
public Freeze ( [ player, bool announce, bool raiseEvents ) : void
player [ Player who is doing the freezing.
announce bool Whether to announce freezing publicly on the server.
raiseEvents bool Whether to raise PlayerInfo.FreezeChanging and PlayerInfo.FreezeChanged events.
return void
        public void Freeze( [NotNull] Player player, bool announce, bool raiseEvents )
        {
            if ( player == null )
                throw new ArgumentNullException( "player" );

            // Check if player is trying to freeze self
            if ( player.Info == this ) {
                PlayerOpException.ThrowCannotTargetSelf( player, this, "freeze" );
            }

            lock ( actionLock ) {
                // Check if player can freeze in general
                if ( !player.Can( Permission.Freeze ) ) {
                    PlayerOpException.ThrowPermissionMissing( player, this, "freeze", Permission.Freeze );
                }

                // Check if player has sufficient rank permissions
                if ( !player.Can( Permission.Freeze, Rank ) ) {
                    PlayerOpException.ThrowPermissionLimit( player, this, "freeze", Permission.Freeze );
                }

                // Check if target is already frozen
                if ( IsFrozen ) {
                    string msg = String.Format( "Player {0} is already frozen (by {1}).", Name, FrozenBy );
                    string colorMsg = String.Format( "&SPlayer {0}&S is already frozen (by {1}&S).", ClassyName, FrozenByClassy );
                    throw new PlayerOpException( player, this, PlayerOpExceptionCode.NoActionNeeded, msg, colorMsg );
                }

                // Raise PlayerInfo.FreezeChanging event
                if ( raiseEvents && RaiseFreezeChangingEvent( this, player, false, announce ) ) {
                    PlayerOpException.ThrowCancelled( player, this );
                }

                // Actually freeze
                IsFrozen = true;
                IsHidden = false;
                FrozenOn = DateTime.UtcNow;
                FrozenBy = player.Name;
                LastModified = DateTime.UtcNow;

                // Apply side effects
                Player target = PlayerObject;
                if ( target != null )
                    target.IsDeaf = false;

                // Log and announce
                Logger.Log( LogType.UserActivity,
                            "{0} froze {1}",
                            player.Name, Name );
                if ( announce ) {
                    if ( target != null ) {
                        target.Message( "&WYou were frozen by {0}", player.ClassyName );
                    }
                    Server.Message( target, "&SPlayer {0}&S was frozen by {1}",
                                            ClassyName, player.ClassyName );
                }

                // Raise PlayerInfo.FreezeChanged event
                if ( raiseEvents )
                    RaiseFreezeChangedEvent( this, player, false, announce );
            }
        }

Usage Example

Example #1
0
 // freeze target if player is allowed to do so
 static void FreezeIfAllowed( Player player, PlayerInfo targetInfo ) {
     if( targetInfo.IsOnline && !targetInfo.IsFrozen && player.Can( Permission.Freeze, targetInfo.Rank ) ) {
         try {
             targetInfo.Freeze( player, true, true );
             player.Message( "Player {0}&S has been frozen while you retry.", targetInfo.ClassyName );
         } catch( PlayerOpException ) { }
     }
 }