// hall2.c
// This room is where players come to be promoted to wizard. The function
// wizqual in this room is the one that determines what it takes to become
// a wizard. You probably want to alter it: we've set the standards rather
// low for our own purposes. More detail on it in the header.
#define NUM_QUESTS 1
#define MIN_SKILL 5
#define TOT_SKILL 100
#include <mudlib.h>
#include <daemons.h>
inherit ROOM ;
void create() {
::create();
// This room needs EUID so it can load the promotion daemon.
seteuid(getuid()) ;
set("light", 1) ;
set ("short", "The promotion room") ;
set ("long",
"You are in a small back room of the Fooland adventurer's hall. There is\n"+
"a small gnome sitting behind a desk which is covered with papers. You can\n"+
"go back east to the main hall.\n") ;
set ("item_desc", ([ "gnome" :
"This fellow is responsible for promoting players into the ranks of wizards.\n"+
"He has an aura of tremendous responsibility and power about him. If you\n"+
"believe you are worthy of promotion, type \"apply\". He can also tell you\n"+
"what the requirements for wizardhood are: if you wish to know them, type\n"+
"\"inquire\".\n",
"desk" :
"It is a solid oak desk. Strangely, it contains no drawers, yet the gnome\n"+
"behind the desk seems to be pulling items out of it regularly.\n",
"papers" :
"The papers are written in a strange language that you cannot read.\n"
]) ) ;
set ("exits", ([ "east" : "/d/Fooland/hall" ]) ) ;
}
void init() {
add_action ("apply", "apply") ;
add_action ("inquire", "inquire") ;
}
// This is the wizqual function which determines what it takes to get
// promoted to wizard. It comes with the following standards:
// 1. All quests completed.
// 2. No skill below 5.
// 3. Total skills above 100.
// If the player has met the requirements it returns 1, otherwise it
// returns 0.
int wizqual (object ob) {
mapping solved, skills ;
string *names ;
int i, j, sum ;
solved = ob->query("quest") ;
if (!solved) return 0 ;
j = sizeof(solved) ;
if (j != NUM_QUESTS) return 0 ;
skills = ob->query_skills() ;
names = keys(skills) ;
for (i=0;i<sizeof(skills);i++) {
j = skills[names[i]] ;
if (j<MIN_SKILL) return 0 ;
sum = sum + j ;
}
if (sum<TOT_SKILL) return 0 ;
return 1 ;
}
// This function checks whether a player has met the criteria. If so, it
// gives him the wizard command path, sets his wizard property, and calls
// enable_wizard() on him. Notably, it does NOT give him a directory. If
// you want that done, you'll have to add it.
int apply() {
string str ;
int res ;
if (wizardp(this_player())) {
notify_fail ("The gnome gives you a dirty look. You are already a wizard!\n") ;
return 0 ;
}
if (wizqual(this_player())==1) {
res = PROMOTION_D->promote_wiz(this_player()) ;
if (res==0) {
write ("Unable to promote you! See an admin.\n") ;
return 1 ;
}
write (
"The old gnome looks you in the eye and says:\n"+
" Congratulations! You have been promoted to wizard on this MUD. If you\n"+
"have never been a wizard before, the first thing you should do is type\n"+
"\"help new_wiz\" and read the whole thing through. It will give you some\n"+
"idea of what powers wizards have, and what responsibilities wizards must\n"+
"carry out in order to keep the MUD running smoothly. When you have done\n"+
"that, talk to one of the administrators of the MUD and ask them what you\n"+
"should do in order to become a full_fledged wizard.\n") ;
shout ("A new wizard has been born.\n") ;
str = this_player()->query("cap_name")+" "+ctime(time()) ;
log_file ("NEW_WIZARDS", str) ;
return 1 ;
} else {
write ("The gnome looks at you and shakes his head. \"I'm sorry,\" he says, \"but you\n"+
"are not yet qualified to be promoted to wizard.\"\n") ;
return 1 ;
}
}
int inquire() {
write (
"The old gnome looks at you and says:\n"+
" To make wizard on this MUD you must meet three qualifications. First,\n"+
"you must complete all the the quests. The Book of Quests downstairs will\n"+
"describe them, and you can type \"quests\" to see how many you have left to\n"+
"do. Second, all of your skills must be 5 or higher. Third, the total of\n"+
"all your skills must be at least 100.\n"+
"\nThen he returns to his paperwork.\n") ;
return 1 ;
}