Another note, $1 will come out as the person's nickname as in
* Trixar_za slaps St0NeR with a large trout, so you want to search for slap in $2 not $1

That isn't true. $nick is the nick. $1 is the first word after the nick.
Also, there is no need to use a halt command when you're using IF/ELSEIF/ELSE. And, if you need to use a halt command for something, you should almost always be using RETURN instead of HALT.
Here's how you could do it if you really want 3 different messages:
on *:action:*:#: {
if (slaps * $me * trout* iswm $1-) {
describe $chan message
}
elseif (slaps * $me $+ * iswm $1-) {
describe $chan message
}
elseif (slaps isin $1-) {
describe $chan message
}
}