void DoBan( Player player, Command cmd, bool banIP, bool banAll, bool unban ) {
if( !banAll && !banIP && player.Can( Permissions.Ban ) ||
!banAll && player.Can( Permissions.BanIP ) ||
player.Can( Permissions.BanAll ) ) {
string arg = cmd.Next();
string reason = cmd.NextAll();
IPAddress address;
Player offender = world.FindPlayer( arg );
PlayerInfo info = world.db.FindPlayerInfoExact( arg );
// ban by IP address
if( banIP && IPAddress.TryParse( arg, out address ) ) {
if( banIP ) DoIPBan( player, address, reason, null, banAll, unban );
// ban online players
} else if( !unban && offender != null ) {
address = offender.info.lastIP;
if( banIP ) DoIPBan( player, address, reason, offender.name, banAll, unban );
if( unban ) {
if( offender.info.ProcessUnBan( player.name, reason ) ) {
world.log.Log( "{0} was unbanned by {1}.", LogType.UserActivity, offender.info.name, player.name );
world.SendToAll( PacketWriter.MakeMessage( Color.Red + offender.name + " was unbanned by " + player.name ), offender );
} else {
player.Message( offender.name + " is not currently banned." );
}
}else{
if( offender.info.ProcessBan( player.name, reason ) ) {
world.log.Log( "{0} was banned by {1}.", LogType.UserActivity, offender.info.name, player.name );
world.SendToAll( PacketWriter.MakeMessage( Color.Red + offender.name + " was banned by " + player.name ), offender );
offender.session.Kick( "You were banned by " + player.name + "!" );
} else {
player.Message( offender.name + " is already banned." );
}
}
// ban offline players
} else if( info != null ) {
address = info.lastIP;
if( banIP ) DoIPBan( player, address, reason, info.name, banAll, unban );
if( unban ) {
if( info.ProcessUnBan( player.name, reason ) ) {
world.log.Log( "{0} (offline) was unbanned by {1}", LogType.UserActivity, info.name, player.name );
world.SendToAll( PacketWriter.MakeMessage( Color.Red + info.name + " (offline) was unbanned by " + player.name ), null );
} else {
player.Message( info.name + " (offline) is not currenty banned." );
}
} else {
if( info.ProcessBan( player.name, reason ) ) {
world.log.Log( "{0} (offline) was banned by {1}.", LogType.UserActivity, info.name, player.name );
world.SendToAll( PacketWriter.MakeMessage( Color.Red + info.name + " (offline) was banned by " + player.name ), null );
} else {
player.Message( info.name + " (offline) is already banned." );
}
}
} else {
world.NoPlayerMessage( player, arg );
}
} else {
world.NoAccessMessage( player );
}
}