Yes, I am aware there are a billion or more of these threads floating around the place.

However, I have a rather big problem with the code below.
What it is suppsed to do, is kick the user once on a flood (if they aren't an op), add their full address to the hash table (which it is doing), and then stop (which it isn't doing).
It is then meant to kick and ban them if the flood again, and then remove them from the hash table (which it isn't doing).

Currently, its just skipping all the way through, and banning them.

I have no idea why this is happening, as it has always worked properly before hand.

Code:
on @*:TEXT:*:#:{
  if (($hget(protect,protect $+ $chan) == on) && ($hkick == on)) {
    set -u60 %kc on
    inc -u3 %flood [ $+ [ $wildsite ] ]
    if ($nick isop $chan) {
      if ((%flood [ $+ [ $wildsite ] ] >= $hkick.num) && ($nick ison $chan)) {
        kick $chan $nick flood
        halt
      }
    }
    elseif ($nick !isop $chan) {
      if ((%flood [ $+ [ $wildsite ] ] >= $hkick.num) && (($hget(flood,$fulladdress) != $chan) || ($hget(flood,$fulladdress) == $null))) {
        kick $chan $nick flooding
        if !$hget(flood) { .hmake -s flood 100 }
        .hadd -s flood $fulladdress $chan
        .notice $nick do not flood - this is a warning
        halt
      }
      elseif ((%flood [ $+ [ $wildsite ] ] >= $hkick.num) && ($hget(flood,$fulladdress) == $chan)) {
        kick $chan $nick flood - ban
        ban -u60 $chan $nick $hkick.mask
        .hdel -s flood $fulladdress
        halt
      }
    }
  }
}


--------
mIRC - fun for all the family (except grandma and grandpa)