/
LIB3/
LIB3/D/ADMIN/
LIB3/D/ADMIN/OBJ/
LIB3/D/ADMIN/ROOM/W/
LIB3/D/HOME/
LIB3/D/HOME/CITY/ARENA/
LIB3/D/HOME/CITY/ITEMS/
LIB3/D/HOME/CITY/POSTOFFI/
LIB3/DOC/
LIB3/GLOBAL/SPECIAL/
LIB3/GLOBAL/VIRTUAL/
LIB3/NET/
LIB3/NET/CONFIG/
LIB3/NET/DAEMON/CHARS/
LIB3/NET/GOPHER/
LIB3/NET/INHERIT/
LIB3/NET/OBJ/
LIB3/NET/SAVE/
LIB3/NET/VIRTUAL/
LIB3/OBJ/B_DAY/
LIB3/OBJ/HANDLERS/TERM_TYP/
LIB3/PLAYERS/B/
LIB3/PLAYERS/N/
LIB3/ROOM/
LIB3/SAVE/
LIB3/SAVE/BOARDS/
LIB3/SAVE/ENVIRON/
LIB3/SAVE/POST/
LIB3/STD/COMMANDS/SHADOWS/
LIB3/STD/CREATOR/
LIB3/STD/DOM/
LIB3/STD/EFFECTS/
LIB3/STD/EFFECTS/HEALING/
LIB3/STD/EFFECTS/OTHER/
LIB3/STD/EFFECTS/POISONS/
LIB3/STD/ENVIRON/
LIB3/STD/GUILDS/
LIB3/STD/LIQUIDS/
LIB3/STD/ROOM/
LIB3/STD/TRIGGER/SHADOW/
LIB3/W/
LIB3/W/BANNOR/
LIB3/W/NEWSTYLE/
/*      /obj/handlers/quest_handler.c

   Change log:

   12/02/92 - Modified by Godot to add function prototypes and comments.

 */
inherit "std/object";

/*
   Global variables.
 */
string *quest_name;		/* quest names */
int    *quest_level;		/* quest difficulty rating */
string *quest_title;		/* quest title for players */
string *quest_story;		/* string to be tacked onto players name for book */
string *last_done_by;		/* last person to do this quest */
int    *num_times_done;		/* number of times quest completed */

#include "library.h"
#define QUEST_LOG "QUESTS"
#define SAVE_FILE "save/quests"
/*
   Function prototypes.
   /*
   int add_quest(string name, int level, string title, string story);
   void create();
   int delete_quest(string name);
   void load_quests();
   int query_quest_level(string name);
   int *query_quest_levels();
   string *query_quest_names();
   string *query_quest_stories();
   string query_quest_story(string name);
   string query_quest_title(string name);
   string *query_quest_titles();
   void quest_completed(string name, int quest, object prev_ob);
   void save_quests();

   /*
   Functions.
 */
void    load_quests()
{
    restore_object( SAVE_FILE );
}

void    save_quests()
{
    seteuid( (string)"secure/master"->get_root_uid() );
    save_object( SAVE_FILE );
    seteuid( "Room" );
}

void    create()
{
    ::create();
    load_quests();
    if( !quest_name )
    {
	quest_name = ({ });
    }
    if( !quest_level )
    {
	quest_level = ({ });
    }
    if( !quest_title )
    {
	quest_title = ({ });
    }
    if( !quest_story )
    {
	quest_story = ({ });
    }
    if( !last_done_by )
    {
	last_done_by = ({ });
    }
    if( !num_times_done )
    {
	num_times_done = ({ });
    }
}

int     add_quest( string name, int level, string title, string story )
{
/*
   This function adds a new quest so we can make life tougher
   for players.
 */
    int     temp;

    temp = member_array( name, quest_name );
    if( temp != -1 )
    {
	return 0;
    }
    quest_name += ({ name });
    quest_level += ({ level });
    quest_title += ({ title });
    quest_story += ({ story });
    last_done_by += ({ "Nobody" });
    num_times_done += ({ 0 });
    log_file( QUEST_LOG, this_player()->query_name() + " added : " + name +
	      ", " + level + ", " + title + ", " + story + "\n\n" );
    save_quests();
    return 1;
}

int     query_quest_level( string name )
{
    int     temp;

    temp = member_array( name, quest_name );
    if( temp == -1 )
    {
	return -1;
    }
    return quest_level[ temp ];
}

string  query_quest_story( string name )
{
    int     temp;

    temp = member_array( name, quest_name );
    if( temp == -1 )
    {
	return "did nothing";
    }
    return quest_story[ temp ];
}

string  query_quest_title( string name )
{
    int     temp;

    temp = member_array( name, quest_name );
    if( temp == -1 || quest_title[ temp ] == "" )
    {
	return "the adventurer";
    }
    return quest_title[ temp ];
}

int     delete_quest( string name )
{
    int     temp;

    log_file( QUEST_LOG, this_player()->query_name() + " removed : " +
	      name + "\n\n" );
    temp = member_array( name, quest_name );
    if( temp == -1 )
    {
	return 0;
    }
    quest_name = delete( quest_name, temp, 1 );
    quest_level = delete( quest_level, temp, 1 );
    quest_title = delete( quest_title, temp, 1 );
    quest_story = delete( quest_story, temp, 1 );
    save_quests();
    return 1;
}

string *query_quest_names()
{
    return quest_name + ({ });
}

int *   query_quest_levels()
{
    return quest_level + ({ });
}

string *query_quest_titles()
{
    return quest_title + ({ });
}

string *query_quest_stories()
{
    return quest_story + ({ });
}

void    quest_completed( string name, int quest, object prev_ob )
{
    int     temp;
    string  prev_ob_name;

    if( file_name( previous_object() ) == LIBRARY )
    {
	prev_ob_name = file_name( prev_ob );
    }
    else
    {
	prev_ob = previous_object();
	prev_ob_name = file_name( previous_object() );
    }
    log_file( QUEST_LOG, ctime( time() ) + " " + name + " completed " + quest + "\n" );
    temp = member_array( quest, quest_name );
    log_file( QUEST_LOG, "Quest set by " + prev_ob_name +
	      " which is " + prev_ob->query_name() + "\n" );
    if( temp == -1 )
    {
	log_file( QUEST_LOG, "Non existant quest\n" );
	return;
    }
    last_done_by[ temp ] = name;
    num_times_done[ temp ]++;
}

/* EOF */