Not bad, a couple things to keep in my mind for future endeavors:
on ^*:BAN:#CHANNEL:{
var %bannum 1
while ($nick($chan,%bannum)) {
if ($address($v1,2) == $banmask) kick $chan $nick($chan,%bannum) You have been banned
inc %bannum
}
}
Rather than doing while (%bannum <= $nick($chan,0)), you can use the change shown to achieve the same result and even quickly access the result with the $v1 identifier. Since you have 'inc %bannum' in both blocks of logic, you can improve efficiency and readability by switching the logic around to only place it where required.
Not saying that anything you did was wrong in any way, but suggestions have always helped me.