fCraft.StandardCommands.DoBan C# (CSharp) Method

DoBan() private method

private DoBan ( Player player, Command cmd, bool banIP, bool banAll, bool unban ) : void
player Player
cmd Command
banIP bool
banAll bool
unban bool
return void
        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 );
            }
        }