LPMUD/
LPMUD/BIN/
LPMUD/DOC/
LPMUD/MUDLIB/
LPMUD/MUDLIB/BANISH/
LPMUD/MUDLIB/D/
LPMUD/MUDLIB/DOC/
LPMUD/MUDLIB/DOC/DOMAINS/
LPMUD/MUDLIB/DOC/EFUN/
LPMUD/MUDLIB/DOC/EXAMPLES/
LPMUD/MUDLIB/DOC/EXAMPLES/ARMOUR/
LPMUD/MUDLIB/DOC/EXAMPLES/CONTAIN/
LPMUD/MUDLIB/DOC/EXAMPLES/FOOD/
LPMUD/MUDLIB/DOC/EXAMPLES/MAGIC/
LPMUD/MUDLIB/DOC/EXAMPLES/MONSTER/
LPMUD/MUDLIB/DOC/EXAMPLES/ROOM/
LPMUD/MUDLIB/DOC/EXAMPLES/WEAPONS/
LPMUD/MUDLIB/FUNCTION/
LPMUD/MUDLIB/INCLUDE/
LPMUD/MUDLIB/INCLUDE/FN_SPECS/
LPMUD/MUDLIB/INCLUDE/SKILLS/
LPMUD/MUDLIB/INFO/
LPMUD/MUDLIB/INHERIT/BASE/
LPMUD/MUDLIB/LOG/
LPMUD/MUDLIB/MANUALS/312/
LPMUD/MUDLIB/NEWS/
LPMUD/MUDLIB/OBJ/PARTY/
LPMUD/MUDLIB/OBJ/SHADOWS/
LPMUD/MUDLIB/OBJECTS/COMPONEN/
LPMUD/MUDLIB/OPEN/
LPMUD/MUDLIB/OPEN/LIBRARY/
LPMUD/MUDLIB/OPEN/PARTY/
LPMUD/MUDLIB/PLAYERS/
LPMUD/MUDLIB/PLAYERS/ZIL/
LPMUD/MUDLIB/ROOM/
LPMUD/MUDLIB/ROOM/CITY/ARENA/
LPMUD/MUDLIB/ROOM/CITY/CREATOR/
LPMUD/MUDLIB/ROOM/CITY/GARDEN/MONST/
LPMUD/MUDLIB/ROOM/CITY/OBJ/
LPMUD/MUDLIB/ROOM/CITY/PUB/
LPMUD/MUDLIB/ROOM/CITY/SHOP/
LPMUD/MUDLIB/ROOM/DEATH/
LPMUD/MUDLIB/ROOM/REGISTRY/
LPMUD/MUDLIB/SECURE/
LPMUD/MUDLIB/SECURE/UDP_CMD_/
LPMUD/MUDLIB/SKILLS/
LPMUD/MUDLIB/SKILLS/FIGHTER/
LPMUD/MUDLIB/SKILLS/THIEF/
LPMUD/MUDLIB/USR/
LPMUD/MUDLIB/USR/CREATORS/
LPMUD/MUDLIB/USR/PLAYERS/
/* Quest Room, Ramses 1993. Revisions by Angel 1994
 * Original code by Lemat(-jj), 1992.
 */

inherit "inherit/room2";
#define ELDER        60
 
void reset(status arg) {
  if(!present("Search For The Guyvers")) {
    move_object(clone_object("room/registry/crombie1"),this_object());
  }
  if(!present("Myphon")) {
    move_object(clone_object("room/registry/cassidy1"),this_object());
  }
  if(arg) return;

  set_weather(2, 1, 0);
  set_short("The Quest Room");
  set_long(
     "-=[  The Quest Room  ]=-                                         \n"+
     "Inside this room are all the quest objects required for the game.\n"+
     "To find out how a quest works, please check ~doc/guidelines and  \n"+
     "read everything inside there. Before you can have a quest object \n"+
     "placed in here, it must be checked by the head of the QC team.   \n");
  set_exits(({
     "room/adv_inner",   "inner",
     "room/city/square", "square",
     "room/void",        "void",
  }));
}
 
string get_new_quest(object pl) {   
  object *obj;
  string *quests_done;
  int level, i;
  string *quests_can_do;

  quests_can_do = ({});
  quests_done = (string *)this_player()->query_done_quests();
  if(!pl) pl = this_player();
  level = (int)pl->query_level();
  obj = all_inventory(this_object());

  for(i=0; i<sizeof(obj); i++) {
    if(member_array(obj[i]->query_name(), quests_done) == -1)
      if(!obj[i]->query_test())
      if((level >= obj[i]->query_min_level()) && 
         (level <= obj[i]->query_max_level())) {
        if((string)obj[i]->query_object_type() == "Quest_object")
          quests_can_do += ({ obj[i]->query_name(), });
      }
  }
  if(!sizeof(quests_can_do)) return 0;
  i = random(sizeof(quests_can_do));
  return quests_can_do[i];
}

 
int finish_quest(string quest_name, object caller, object who) { 
  object quest;
  string tmp, caller_file, caller_room;
  int i;

  if(present(quest_name), this_object()) 
    quest = present(quest_name, this_object());
  if(!quest) {
    write("Error! Quest object missing!\n");
    return 0;
  }
  if(quest->query_test()) {
    write("Quest completed for quest phaze Alpha.\n");
    return 0;
  }
  /* must still be his current quest to finish it */
  if((string)who->query_curr_quest() != quest_name) return 0;

  /* so an Elder can force a complete a quest */
  if(caller->query_security_level() >= 60) {
    if(interactive(caller))
      return (int)quest->query_qpoints();
  }

  sscanf(file_name(caller), "%s", tmp);
  sscanf(file_name(caller), "%s#%d", tmp, i);
  if(tmp != (string)quest->query_req_caller()) {
    return 0;
  }
  if(file_name(environment(who)) != (string)quest->query_req_place()) return 0;

  i = (int)quest->query_qpoints();
  return i;
  return (int)quest->query_qpoints();
}


status get_quest_hint(string quest_name) {
  object quest;

  if(!quest_name) return 0;
  quest = present(quest_name, this_object());
  if(!quest) return 0;

  write(quest->query_hint());
  return 1;
}