// MorgenGrauen MUDlib
//
// inpc.c -- Intelligenter NPC
//
// $Id: inpc.c 6571 2007-10-21 14:41:10Z Zesstra $
#pragma strong_types
#pragma save_types
#pragma range_check
#pragma no_clone

inherit "/std/npc";
inherit "/std/inpc/nobank";
inherit "/std/inpc/select";
inherit "/std/inpc/boozing";
inherit "/std/inpc/items";
inherit "/std/inpc/eval";

#include <moving.h>
#include <inpc.h>
#define ME this_object()
#define ENV environment()
#define TP this_player()

#pragma strong_types

protected void create() {
  npc::create();
  items::create();
  add_select_commands();
}

protected void create_super() {
  set_next_reset(-1);
}

void reset() {
  npc::reset();
  items::reset();
}

public varargs void init(object origin) {
  npc::init(origin);
  if (TP && query_once_interactive(TP))
    SetProp(P_INPC_LAST_PLAYER_CONTACT,time());
}

varargs int move(mixed dest, int meth, string dir, string tin, string tout) {
  int res;
  object env;

  env=ENV;
  if (!(meth&M_NOCHECK)
      && !ENV
      && QueryProp(P_INPC_WALK_MODE)
      && !may_enter_room(dest))
    return ME_CANT_TPORT_IN;
  res=::move(dest,meth,dir,tin,tout);
  if (env!=ENV)
    SetProp(P_INPC_LAST_ENVIRONMENT,ENV);
  return res;
}
