inherit "/lib/std/room";
#define POINTS_NEEDED   100
#define QUEST_DIR	"/domains/Praxis/quests/"
void init() {
    ::init();
    if(!archp(this_player())) this_player()->destruct();
}
void create() {
    string *quest_ls;
    int i;
    ::create();
    SetProperty("light", 1);
    SetShort( "Quest room");
    SetLong( "Quests are stored here.");
    quest_ls = get_dir(QUEST_DIR);
    if(!sizeof(quest_ls)) return;
    for(i=0; i<sizeof(quest_ls); i++) {
        new(QUEST_DIR+quest_ls[i])->move(this_object());
    }
}
void list_quests(object tp, int x) {
    object *inv;
    int i;
    string *quest_list;
    inv = all_inventory(this_object());
    if(!sizeof(inv)) {
        tell_object(tp, "There are no quests.");
        return;
    }
    quest_list = ({});
    for(i=0; i<sizeof(inv); i++) {
        if(member_array((string)inv[i]->query_name(), (string *)tp->query_quests()) == -1) quest_list += ({ inv[i] });
    }
    if(!x) {
        tell_object(tp, "There are "+sizeof(quest_list)+" quests you "
          "have not solved. They are these quests:\n");
        for(i=0; i<sizeof(quest_list); i++) {
            tell_object(tp, (i+1)+": "+(string)present(quest_list[i], this_object())->GetShort()+"\n");
        }
    }
    else {
        if(x > sizeof(quest_list)) {
            tell_object(tp, "No such quest.\n");
            return;
        }
        tell_object(tp, (string)present(quest_list[x-1], this_object())->GetLong());
    }
}
int query_quest_points(string str) {
    int x;
    object ob;
    ob = present(str);
    x = (int)ob->query_quest_points();
    return x;
}
int check_quests(object tp, int lev) {
    int qp;
    string *list;
    qp= (int)tp->query_quest_points();
    if(lev>=5) if(qp < POINTS_NEEDED/4) return 0;
        else if(lev >= 10) if(qp < POINTS_NEEDED/2) return 0;
            else if(lev >= 15) if(qp < (3*POINTS_NEEDED)/4) return 0;
                else if(lev > 19) if(qp < POINTS_NEEDED) return 0;
    return 1;
}
void clean_up() { return; }