Ok, because reading something that looks like that is really annoying, let me first put it into what I consider to be the preferable way of writing code:

Code:
on *:OP:#:{
  if ($opnick == $me) {
    set %ctr 1
    set %check $ulist(*,%ctr)
    var %total = $ulist(*,0)
    while (%ctr <= %total) { 
      if (stick isin $level(%check)) {
        set %kick-check $ialchan($ulist(%check,stick,1),#,1)
        if (%kick-check) {
          mode # +b %check
          .timer 1 1000 mode # -b %check
          fkick # %check $ulist(*,%ctr).info
        }
      }
      elseif (%check ison #) mode # +v %check
      inc %ctr 1
      set %check $ulist(*,%ctr) 
    }
  } 
  unset %ctr %check %kick-*
}

alias -l fkick {
  var %fkick-total = $nick($1,0,a)
  var %fkick-ctr = 1
  :loop
  if (($nick($1, %fkick-ctr, a) != $me) && ($2 iswm $address($nick($1, %fkick-ctr, a),5))) {
    kick $1 $nick($1, %fkick-ctr, a),5) $3-
  }
  if (%fkick-ctr <= %fkick-total) {
    inc %fkick-ctr
    goto loop
  }
}


I also made some minor changes. See if it works. Btw, you could use /var instead of /set on your variables. I didn't bother changing those, but you might as well. Then you don't need to use /unset. And, GOTO is usually frowned on.