if ( ($nick != %fighter1) && ($nick != %fighter2) ) {
/msg %chan_duel $nick $+ , a duel between %fighter1 and %fighter2 is already underway. please wait until it finishes.
/halt }
The use of brackets may clarify .. what I am now saying is:
if NICK is not fighter 1
and if NICK is not fighter 2 then (send the message).
What you had originally was if NICK is not Fighter 1
or NICK is not fighter 2 : in this case if nick was fighter 2 then it was not fighter 1, and the command would still trigger.
I guess it helps if the result you want is written in plain language (using AND and/or OR) - it helps clarify what you want to achieve.
&& == AND, || == OR .
Cheers,
DK