Hmmm for the dragon siege you could use "in_siege = yes" and then check through scopes if the owner of the location is an enemy. No clue about the fields of fire though.... maybe have it trigger on_combat_pulse at on actions?
Though if in_battle doesn't work... I'm not certain in_siege will.
Though if in_battle doesn't work... I'm not certain in_siege will.