alias create_npc {
  if ($wildtok($1-,name=*,1,32)) var %name = $gettok($v1,2,61)
  if ($wildtok($1-,level=*,1,32)) var %level = $gettok($v1,2,61)
  if (!%name) var %name = $+(npc.,$r(A,Z),$r(10,99))
  if ($left(%name,4) != npc.) var %name = npc. $+ %name
  if (%level !isnum 1-50) var %level = $r(1,50)
  ; stats ;
  var %pass = $qp,%hp = $calc($r(10,35) * %level)
  var %acc = $calc($r(1,5) * %level),%str = $calc($r(2,8) * %level),%tuff = $calc($r(2,8) * %level)
  var %nexp = $calc(200 * %level),%output = return
  var %money = $calc($r(15,30) * %level)
  if (!$hget(%name)) {
    hadd -m %name name NPC
    hadd %name pass %pass
    hadd %name fhp %hp
    hadd %name hp %hp
    hadd %name accuracy %acc
    hadd %name strength %str
    hadd %name toughness %tuff
    hadd %name nexp %nexp
    hadd %name output %output
    hadd %name level %level
    hadd %name melee punch,kick
    set %fighting $addtok(%fighting,%name,32)
    _msg $chan * $_nick(%name) enters combat
    .signal -n 108 %name
  }
}
alias destroy_npc {
  if ($hget($1)) {
    if ($timer($+(npcdestroy.,$1))) $+(timernpcdestroy.,$1) off
    _msg $chan * $_nick($1) has been destroyed $iif($2-,( $+ $2- $+ ))
    hfree $1
    set %fighting $remtok(%fighting,$1,1,32)
    .signal -n 109 $1
  }
}

; ===============================
; = SIGNAL system, for full control
; = Allows for detailed AI, as well
; ===============================

on *:SIGNAL:*:{
  if ($signal == 105) destroy_npc $1
  elseif ($signal == 108) {
    $+(timernpcdestroy.,$1) 1 300 destroy_npc $1 self-detonation
  }
  elseif ($signal == 109) {
    ;npc destroy'd
  }
}
