(pheonix: this is a general reply, it's just that your post is currently the last one with the "Reply" link :tongue:)

Well, after thinking a little, I don't know why I agreed with ignoring *!*@*. If various flooders attack a channel, the script would only kickban one of them, ignoring the rest by 5 secs, while it could be kickbanning them as well.. I guess it would be fast enough to bypass the screen flood they may cause.
So, the best thing to do IMO is really just to ignore specific addresses.

Also, I thought about checking if /silence is supported and using it if so. This complicates things a little, because the absence of the SILENCE flag from numeric 005 isn't sufficient to assume it's not supported. This feature is easily removable, if considered useless.

That said, I don't know if this still matters to the thread poster, but anyway, I enjoyed scripting the code below and figuring out some other things. Now, I only want to share.. nothing more. Anyone is free to change/improve/fix/do whatsoever with it. It's not well commented but I hope it's still playable.

Code:
raw 421:* SILENCE *:{
  if ($var($+(%,flood.,$cid,.silence),1)) { unset $ifmatch | halt }
}
;;; The below raw events only work on mIRC 6.1, due to the $ level prefix
raw $005:/.* SILENCE=[1-9]\d* .*/i:{ set $+(%,flood.,$cid,.silence) 1 }
raw $000:/^[+-]\S+!\S+@\S+$/:{
  var %toggle = $left($1,1), %mask = $mid($1,2)
  if (%toggle == +) {
    if (%mask == <check>!*@*) {
      set $+(%,flood.,$cid,.silence) 1
      !silence -<check>
      halt
    }
    elseif ($($+(%,flood.,$cid,.silence.,%mask),2)) {
      set $+(%,flood.,$cid,.silence.,%mask) 1
      .timer.flood.silence. $+ %mask 1 60 silence - $+ %mask
      halt
    }
  }
  else {
    if ($($+(%,flood.,$cid,.silence.,%mask),2)) {
      set -u $+(%,flood.,$cid,.silence.,%mask)
      halt
    }
    elseif (%mask == <check>!*@*) { halt }
  }
}

on *:CONNECT:{ if (!$($+(%,flood.,$cid,.silence),2)) !silence +<check> }
on *:DISCONNECT:{ unset $+(%,flood.,$cid,.*) }

on @^*:TEXT:*:#:{
  inc -u5 $+(%,flood.,$cid,.,$wildsite,.,$chan)
  if ($($+(%,flood.,$cid,.,$wildsite,.,$chan),2) > 4) { 
    ban -k $chan $nick 2 Stop flooding dude
    .ignore -u5 $wildsite
    if ($($+(%,flood.,$cid,.silence),2)) {
      set $+(%,flood.,$cid,.silence.,$wildsite) 1
      !silence + $+ $wildsite
    }
  }
}