Try combining those events into one and using $level to determine if they are the correct level.

The main problem I see is that your first on text is for level 250 and up. That means the other on texts won't work. You can reverse these the way you did with the on joins if you want, or you can set them up to only work on that level (I believe using = with the 250/500/750/1000 will do that, but I don't have mIRC handy to check). I still think the best method is to put everything into one on text and one on join event and use $level with the if statements.

As for elseif/else, they should work fine if you formatted them correctly.

Example:
Code:
on 250:TEXT:*:#:{
  if ($1 == `voice) { mode $chan +v $2 }
  elseif ($1 == `devoice) { mode $chan -v $2 }
  elseif ($1 == `commands) { notice $nick OP Commands for you (250) : `voice :: `devoice :: }
}


Finally, I'd put @ with the events so you don't get errors if you aren't opped.

Example:
Code:
on @250:text:*:#: {


Invision Support
#Invision on irc.irchighway.net