You could try this.  You can switch things up for environmental damage and whatnot as well.
	Code:
	$myvar = 0;
sub EVENT_ATTACK {
   if($myvar==0) {
      quest::say("$name, do not attack me.  You have earned this punishment!");
##client is damaged.  Format is: from/amount/spellid/skill
#So, from the npc, 1000dmg, no spell is used, and 1 is for the skill id.
      $client->Damage($npc, 1000, SPELL_UNKNOWN, 1);
      $myvar=1;
   }
}
 I recommend using a timer or something to resetting variable though.  Either could use combat_event or a timer when he engages.  With a timer a:
	Code:
	$myvar = undef;
sub EVENT_ATTACK {
##client is damaged.  Format is: from/amount/spellid/skill
#So, from the npc, 1000dmg, no spell is used, and 1 is for the skill id
   if(!$myvar) {
      quest::say("$name, do not attack me.  You have earned this punishment!");
	$client->Damage($npc, 1000, SPELL_UNKNOWN, 1);
	$myvar = 1;
	quest::settimer("checkengaged",1);
   }
}
sub EVENT_TIMER {
	if ($timer eq "checkengaged") {
	if (!$npc->IsEngaged();
	$myvar = undef;
	quest::stoptimer("checkengaged");
	}
}
 Honestly, combat status toggle is probably better.  However, I just was using this method before it was implemented.