To pheonix:
Curious - why do you use

if (%flood . [ $+ [ $nick ] ] <= 4) { return }
else { ban -k $chan $nick }

and not

if (%flood . [ $+ [ $nick ] ] == 5) { ban -k $chan $nick }

?

As it is ony obsolete if-statement less, it should be a tad faster. And especially in these kinds of scripts, you really can't afford to waste a few microseconds on a pointless if statement. Also - I would recommend adding a masktype to your /ban command, or it will ban nick!*identd@host.domain, which is so easy to get around...

To Direkii
Also -- I suggest setting a temporary ignore - if the user keeps flooding and does it decently he might flood you off before the command gets executed.

Code:
on @*:TEXT:*:#:{
  inc -u5 %flood. [ $+ [ $nick ] ]
  if (%flood . [ $+ [ $nick ] ] == 5) { 
    ignore -u5 *!*@*
    ban -k $chan $nick 3 Stop flooding dude
  }
}