It fires for the NPC that dies, not the NPC that does the killing, but it uses the killer NPC in the message.
By changing line 1761 of attack.cpp from
Code:
parse->Event(EVENT_NPC_SLAY, this->GetNPCTypeID(), 0, oos->CastToNPC(), this);
to ..
Code:
parse->Event(EVENT_NPC_SLAY, other->GetNPCTypeID(), 0, other->CastToNPC(), this);
.. it will make the event happen on the slayer, not the slayee. I'm just not sure of what the original intent was, maybe I am misunderstanding it.