ye, the !msg1* matches "!msg10" and occurs before the other event, since events are processed from top to bottom. also, don't you want $2- in the /msg commands, since $1 = !msgN ? you could combine them all like so:
on *:text:!msg* ?*:#:{ if ($istok(1 2 6 7 10 11 13,$mid($1,5),32)) msg $(#,) $+ $mid($1,5) $2- }
or the regex alternative
on $*:text:/^!msg(1[013]?|[267]) ./i:#:{ msg $(#,) $+ $regml(1) $2- }