on admin:text:*:*:{
  if (!$chan) close -m $nick
  var %t = $left($1,1),%1 = $right($1,-1)
  if (%t !isalnum) {
    if (%1 == npc) {
      if ($2 == -l) { 
        _msg $iif($chan,$v1,$nick) NPC in combat: $iif($npc_list,$v1,N/A)
      }
      elseif ($2 == -c) { set -u1 %npc_create_admin $nick | npc_create $3- }
      elseif ($2 == -d) { set -u1 %npc_destroy_admin $nick | npc_destroy $3- }
      else _msg $nick NPC Syntax: $+(,%t,NPC) -lcd <name>
    } 
  }
}
alias npc_list {
  var %n = 1,%names
  while ($wildtok(%fighting,npc.*,%n,32)) {
    var %names = %names $v1
    inc %n 
  }
  return %names
}
alias npc_create {
  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
    hadd %name money %money
    set %fighting $addtok(%fighting,%name,32)
    npc_givegun %name
    .amsg * $_nick(%name) enters combat (level: %level $+ )
    ; $+(.timernpcatk.,%name) 1 $r(1,10) npc_randatk %name
    .signal -n 108 %name
  }
}
alias npc_destroy {
  if ($hget($1)) {
    if ($timer($+(npcdestroy.,$1))) $+(.timernpcdestroy.,$1) off
    if ($timer($+(npcatk.,$1))) $+(.timernpcatk.,$1) off
    .amsg * $_nick($1) has been destroyed $iif($2-,( $+ $2- $+ ))
    hfree $1
    set %fighting $remtok(%fighting,$1,1,32)
    .signal -n 109 $1
  }
}
alias npc_pause {
  if ($hget($1)) {
    var %t = $iif($2 isnum 1-120,$2,120) 
    if ($timer($+(npcatk.,$1))) $+(.timernpcatk.,$1) off
    .amsg * $_nick($1) has been paused ( $+ %t $+ s)
    hadd $1 paused $true
    hadd $1 name NPC|Paused
    $+(.timerunpause.,$1) 1 %t npc_unpause $1 
  }
}
alias npc_unpause {
  if ($hget($1,paused)) {
    if ($timer($+(unpause.,$1))) $+(.timerunpause.,$1) off
    hdel $1 paused
    hadd $1 name NPC
    .amsg * $_nick($1) has been unpaused
  }
}
alias npc_givegun {
  var %guns = Shotgun,Ak-47
  if (!$istok(%guns,$2,44)) {
    var %gun = $gettok(%guns,$r(1,$numtok(%guns,44)),44)
  }
  else var %gun = $2
  hadd $1 guns $addtok($u.guns($1),%gun,44)
  $($+(%gun,.stats),2) $1
  set_gun $1 %gun
}

; ===============================
; = SIGNAL system, for full control
; = Allows for detailed AI, as well
; ===============================
/*
on *:SIGNAL:*:{
  if ($signal == 105) { 
    if ($u.name($2) == NPC) npc_destroy $2
  }
  elseif ($signal == 110) {
    var %l = $npc_list,%target = $gettok(%l,$r(1,$numtok(%l,32)),32)
    ; attack
  }
  elseif ($signal == 108) {
    $+(.timernpcdestroy.,$1) 1 300 npc_destroy $1 self-detonation
    if (%npc_create_admin) { 
      _msg $v1 NPC $qt($1) created. 
      unset %npc_create_admin
    }
  }
  elseif ($signal == 109) {
    ;npc destroy'd
    if (%npc_destroy_admin) { 
      _msg $v1 NPC $qt($1) destroyed. 
      unset %npc_destroy_admin
    }
  }
  elseif ($istok(106 107,$signal,32)) {
    if (npc.* iswm $2) && ($r(1,3) == 3) {
      if ($timer($+(npcatk.,$2)).secs <= 1) || (!$timer($+(npcatk.,$2))) .timernpcatk. $+ $2 1 $r(1,5) npc_randatk $2 $iif($r(1,1) == 2,$1)
    }
    if (npc.* iswm $1) {
      ; Start a new attack?
      if ($r(1,3) == 3) {
        .timernpcatk. $+ $1 1 $r(5,10) npc_randatk $1 $iif($r(1,3) == 3,$2)
      }
    }
  }
}
*/
