Attacker can be null if not a player