The reurn will be triggered so your unset will not be used.
You have a check here
if ( %skill [ $+ [ $nick ] ] > 0 ) {
That will only trigger if the %skill<nick> have a level higher then 0, so all you need to do is to remove all your returns.
on *:text:*:#: {
if ( %skill [ $+ [ $nick ] ] > 0 ) {
; Check the value and will go on if more then 0.
if ($istok(%am,$1,32)) { msg $chan Anti Mage }
elseif ($istok(%qop,$1,32)) { msg $chan Queen of Pain }
elseif ($istok(%ss,$1,32)) { msg $chan Shadow Shaman }
elseif ($istok(%lion,$1,32)) { msg $chan Lion }
elseif ($istok(%dp,$1,32)) { msg $chan Death Prophet }
elseif ($istok(%drow,$1,32)) { msg $chan Drow Ranger }
}
}
You already removing "%skill" with this code
set -u30 %skill [ $+ [ $nick ] ] 1
The code give you 30 seconds to use the variable, and it should be more then enough. I didnt test it.