Sorry, but did you other posters test the script at least?

Yes, it is a bit more lengthy:
- half of it is comments, to help the OP understanding the code
- it contains some additional checks to prevent possible common sources of error, like: "invalid window", "channel not joined", "not connected", "no other users in channel"
- it prevents the common "line too long" error, by splitting long greetings (in channels with lot of nicknames) to multiple lines
- as multiple lines may be thrown, it goes for /play with a delay, to prevent possible flooding. /play further has (in comparison to timers which often aren't used properly) the advantages of showing no multiple "no such target" errors (e.g. in case of a part/kick while playing) and adding no evaluation to the output text (i.e. of a custom greet message).
As the only "cosmetical" part, it's inserting "and" as second-last word (for greetings of more than one nick) with plain token means. Just to give the mechanical act of mass-greeting a wee bit of human touch...

The script itself is neither *complex* in structure, nor "bloated" nor uses *fancy* commands/methods for the task. Debugging shouldn't be hard. I don't find a bug (an antique mIRC version or overridden internal commands could be a source of error - but you cannot blame the code for that) - be my guest to find the problem. But please don't blame the "complexity" of a script if it's complexity is for the sake of prevention of errors.

For my part and out of curiosity, I even tested it successfully on the network mentioned by ToRmEnTeD (v6.35 and v6.31).

@ToRmEnTeD:
Do all nicks on the channel show if you insert after the line:
Code:
var %nick = $v1
the additional line:
Code:
echo -ag * greetall: looping nick no. %n of $active = %nick
?