Inheritance: PlayerInfoFrozenChangedEventArgs, ICancellableEvent
示例#1
0
 static bool RaiseFreezeChangingEvent( [NotNull] PlayerInfo target, [NotNull] Player freezer, bool unfreezing, bool announce )
 {
     var h = FreezeChanging;
     if( h == null ) return false;
     var e = new PlayerInfoFrozenChangingEventArgs( target, freezer, unfreezing, announce );
     h( null, e );
     return e.Cancel;
 }
示例#2
0
        /// <summary> Unfreezes this player. Throws PlayerOpException on problems. </summary>
        /// <param name="player"> Player who is doing the unfreezing. </param>
        /// <param name="announce"> Whether to announce freezing publicly on the server. </param>
        /// <param name="raiseEvents"> Whether to raise PlayerInfo.FreezeChanging and PlayerInfo.FreezeChanged events. </param>
        public void Unfreeze( [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, "unfreeze" );
            }

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

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

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

                // Raise PlayerInfo.FreezeChanging event
                if( raiseEvents ){
                    var e = new PlayerInfoFrozenChangingEventArgs( this, player, true, announce );
                    RaiseFreezeChangingEvent( e );
                    if( e.Cancel ) PlayerOpException.ThrowCanceled( player, this );
                    announce = e.Announce;
                }

                // Actually unfreeze
                Unfreeze();

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

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