static inherit "std/object"; #define RESTORE_PATH "/save/library/" #include "quest_handler.h" static string player_name; string *quests, text_file, player_title; int *times; void setup() { set_name("library"); } void init_data(string pl_name) { player_name = pl_name; quests = ({ }); text_file = ""; player_title = 0; times = ({ }); } int get_data_file(string name) { if(player_name != name) { if(restore_object(RESTORE_PATH+name,1)) { player_name = name; return 1; } else { return 0; } } else { return 1; } } void save_data_file(string name) { save_object(RESTORE_PATH + name,1); } string query_title(string name) { if(get_data_file(name)) return player_title; else return 0; } string *query_quests(string name) { if(get_data_file(name)) return quests + ({ }); else return ({ }); } string get_highest_quest(string name) { int loop, highest; if(!get_data_file(name)) return "Sorry"; if(!sizeof(quests)) return "None"; for(highest = loop = 0; loop < sizeof(quests); loop++) if(QUEST_HANDLER->query_quest_level(quests[loop]) > highest) highest = loop; return quests[highest]; } int get_highest_quest_level(string name) { int highest; string qu_name; if(!get_data_file(name)) return 0; if(!sizeof(quests)) return 0; qu_name = get_highest_quest(name); if((highest = member_array(qu_name, quests)) == -1) return 0; return (int)QUEST_HANDLER->query_quest_level(quests[highest]); } string get_most_recent_quest(string name) { int loop, highest; if(!get_data_file(name)) return "Sorry"; if(sizeof(quests) == 0) return "None"; return quests[sizeof(quests) - 1]; } int get_most_recent_time(string name) { int loop, hightime; if(!get_data_file(name)) return -1; if(!sizeof(quests)) return 0; return times[sizeof(times) - 1]; } int get_highest_quest_time(string name) { int hightime; string temp; if(!get_data_file(name)) return -1; if(sizeof(quests) == 0) return 0; temp = get_highest_quest(name); hightime = member_array(temp, quests); return times[hightime]; } int set_quest(string pl_name, string qu_name) { int qu_level, pos; object ob; if(!get_data_file(pl_name)) init_data(pl_name); if(member_array(qu_name, quests) != -1) return 0; quests += ({ qu_name }); times += ({ time() }); qu_level = (int)QUEST_HANDLER->query_quest_level(qu_name); QUEST_HANDLER->quest_completed(pl_name, qu_name, previous_object()); if(qu_level >= get_highest_quest_level(pl_name)) { player_title = (string)QUEST_HANDLER->query_quest_title(qu_name); if(ob = find_player(pl_name)) ob->set_title(player_title); } seteuid((string)"secure/master"->get_root_uid()); save_data_file(pl_name); seteuid("Room"); return 1; } int query_quest_time(string pl_name, string qu_name) { int time; if(!get_data_file(name)) return 0; time = member_array(qu_name, quests); if(time == -1) { return 0; } return times[time]; } string query_story(string name) { string *story; int i; if(!get_data_file(name)) return "You can find nothing in the library on " + name + ".\n"; if(text_file != "") return read_file(text_file); if(!sizeof(quests)) return capitalize(name) + " has lead a most unadventurous life."; story = ({ }); for(i = 0; i < sizeof(quests); i++) story += ({ QUEST_HANDLER->query_quest_story(quests[i]) }); if(sizeof(quests) == 1) return capitalize(name) + " has " + story[0] + ".\n"; else return capitalize(name) + " has " + implode(story[0..sizeof(story)-2], ", ") + " and " + story[sizeof(story)-1] + ".\n"; } void set_title(string who, string what) { if (!"/secure/login"->test_user(who)) return ; get_data_file(who); player_title = what; save_data_file(who); } int query_quest_done(string player, string quest) { if(get_data_file(player)) return (member_array(quest, quests) != -1); else return 0; } int query_quest_points(string name) { int tot, i; get_data_file(name); for(i=0; i<sizeof(quests); i++) tot += (int)QUEST_HANDLER->query_quest_level(quests[i]); return tot; }