/* /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,1);
}
void save_quests() {
seteuid((string)"secure/master"->get_root_uid());
save_object(SAVE_FILE,1);
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 */