private static void KickHandler( Player player, Command cmd )
{
string name = cmd.Next();
if ( name == null ) {
player.Message( "Usage: &H/Kick PlayerName [Message]" );
return;
}
// find the target
Player target = Server.FindPlayerOrPrintMatches( player, name, false, true );
if ( target == null )
return;
string reason = cmd.NextAll();
DateTime previousKickDate = target.Info.LastKickDate;
string previousKickedBy = target.Info.LastKickByClassy;
string previousKickReason = target.Info.LastKickReason;
// do the kick
try {
Player targetPlayer = target;
target.Kick( player, reason, LeaveReason.Kick, true, true, true );
WarnIfOtherPlayersOnIP( player, target.Info, targetPlayer );
} catch ( PlayerOpException ex ) {
player.Message( ex.MessageColored );
if ( ex.ErrorCode == PlayerOpExceptionCode.ReasonRequired ) {
FreezeIfAllowed( player, target.Info );
}
return;
}
// warn player if target has been kicked before
if ( target.Info.TimesKicked > 1 ) {
player.Message( "Warning: {0}&S has been kicked {1} times before.",
target.ClassyName, target.Info.TimesKicked - 1 );
if ( previousKickDate != DateTime.MinValue ) {
player.Message( "Most recent kick was {0} ago, by {1}",
DateTime.UtcNow.Subtract( previousKickDate ).ToMiniString(),
previousKickedBy );
}
if ( !String.IsNullOrEmpty( previousKickReason ) ) {
player.Message( "Most recent kick reason was: {0}",
previousKickReason );
}
}
}