/
lib/banish/
lib/d/coronos/
lib/d/coronos/w/alena/
lib/d/coronos/w/angel/
lib/d/coronos/w/angel/caves/
lib/d/coronos/w/angel/caves/monst/
lib/d/coronos/w/angel/city/chambers/
lib/d/coronos/w/angel/city/monst/
lib/d/coronos/w/angel/city/obj/
lib/d/coronos/w/angel/city/streets/
lib/d/coronos/w/angel/farms/plains/
lib/d/coronos/w/angel/monst/
lib/d/tempus/
lib/d/tempus/w/angel/
lib/d/tempus/w/kingbill/
lib/d/tempus/w/mirak/
lib/d/tempus/w/mirak/monst/
lib/d/tempus/w/mirak/obj/
lib/d/tempus/w/relgar/planes/baat/
lib/d/tempus/w/sarak/
lib/d/tempus/w/serepion/mon/
lib/d/tempus/w/valrejn/
lib/doc/
lib/doc/domains/
lib/doc/efun/
lib/include/fn_specs/
lib/info/
lib/inherit/base/
lib/log/
lib/log/mailbox/
lib/log/main/
lib/news/
lib/obj/party/
lib/objects/componen/
lib/open/
lib/open/party/
lib/open/paste/
lib/open/spells/
lib/open/valrejn/
lib/players/
lib/players/alena/
lib/players/alena/obj/
lib/players/alena/open/
lib/players/alena/private/
lib/players/angel/
lib/players/angel/obj/
lib/players/ash/
lib/players/biggs/
lib/players/biggs/food/
lib/players/biggs/gobkeep/
lib/players/biggs/mnstr/
lib/players/biggs/town/caves/
lib/players/biggs/town/tower/
lib/players/biggs/wpns/
lib/players/calris/
lib/players/deathurg/
lib/players/deathurg/open/
lib/players/deathurg/private/thief/
lib/players/dogberry/
lib/players/dogberry/library/
lib/players/dogberry/open/
lib/players/epsilon/
lib/players/epsilon/private/
lib/players/farewell/
lib/players/hippo/
lib/players/hippo/open/
lib/players/hippo/tools/
lib/players/jimpa/
lib/players/josh/
lib/players/josh/room/
lib/players/josh/room/mage/dungeon/
lib/players/josh/room/mage/dungeon/obj/
lib/players/josh/wep/
lib/players/kingbill/
lib/players/metatron/
lib/players/miette/
lib/players/mirak/
lib/players/mirak/open/
lib/players/parsilan/
lib/players/relgar/
lib/players/relgar/private/
lib/players/sarak/
lib/players/sarak/bugs/
lib/players/sarak/feelings/
lib/players/sarak/magical/
lib/players/sarak/minotaur/island/
lib/players/sarak/open/
lib/players/sarak/private/
lib/players/serepion/
lib/players/serepion/open/
lib/players/serepion/private/
lib/players/spike/
lib/players/spike/open/
lib/players/spike/private/
lib/players/spike/seaworld/
lib/players/valrejn/
lib/players/valrejn/open/
lib/players/valrejn/private/
lib/players/virus/
lib/players/wrath/
lib/players/wrath/arm/
lib/players/wrath/mon/
lib/players/wrath/room/
lib/players/wrath/room/entry/
lib/players/wrath/room/zolgath/
lib/players/wrath/weap/
lib/players/zil/
lib/room/
lib/room/city/arena/
lib/room/city/creator/
lib/room/city/garden/monst/
lib/room/city/library/
lib/room/city/library/open/books/
lib/room/city/shop/
lib/room/death/
lib/room/death/open/
lib/room/island/
lib/room/keeps/
lib/room/registry/
lib/room/ships/crew/
lib/room/ships/open/
lib/room/ships/open/types/bounty/
lib/room/ships/open/types/nebula/
lib/room/ships/open/types/phoenix/
lib/secure/udp_cmd_/
lib/skills/
lib/skills/fighter/
lib/skills/psionici/
lib/skills/thief/
lib/usr/
lib/usr/creators/
lib/usr/no_banis/
lib/usr/players/
/* Quest Room, Ramses 1993. Revisions by Angel 1994
 * Original code by Lemat(-jj), 1992.
 */

#include <mudlib.h>
inherit ROOM;

#define ELDER        60
 
void reset(status arg) {
  string *quests_to_clone;
  int i;
  object ob;

  quests_to_clone = ({
    "quest1",
  });
  if(arg) return;

  for(i=0; i<sizeof(quests_to_clone); i++) {
    ob = clone_object("room/registry/"+quests_to_clone[i]);
    move_object(ob, this_object());
  }



  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 'man quests' 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"+
     "If a quest does not appear here, then simply 'update' the room.  \n");
  set_exits(({
     "room/adv_inner",   "inner",
     CHURCH,             "square",
     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;
  string tmp;

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

  tmp = (string)quest->query_hint();
  write(tmp);
  return 1;
}