What happens with $* is that mIRC takes the whole command and its parameter, replaces $* with `~$*, then evaluates the code so "say `~$* $+ : hi", resulting in "say `~$*: hi" and only then, at the end, replaces with the correct parameter from $N, removing any character sticked to it.


#mircscripting @ irc.swiftirc.net == the best mIRC help channel