From the NannyMUD documentation

LAST CHANGE

2001-10-06

RULES

NAME

        quests - rules on quests

DESCRIPTION

	DEMANDS ON NEW QUESTS

	* Random parts that prevents the use of scripts.
	* Testplay by mortal, i.e NOT only your test char or 2nd.
	* It must be approved before you open it. Beware, your area might be
	  checked for Quality at this point.
	* The quest should be Nanny original, i.e. not exist on another MUD.
	* The quest should be coded in a way that keeps it alive, even after
	  the creator has left Nanny. It should be easy to maintain and if
	  the quest requires code from another wizard's area, the name of
	  that wizard should be noted in files in the directories of all
	  involved wizards, together with the nature of the link and the
	  names of the files used. 
	* The files used in a quest should as far as possible be kept off the
	  game until the quest is approved.


	HOW TO CREATE A QUEST

	1/ Start with writing a doc. (motivation, how to solve, random
	   moments and a brief description of how to solve). Send the doc to
	   the quest coordinator before starting to code. You will get
	   permission to code, or ideas on how to improve the quest idea
	   further. 
	2/ Code it, test it yourself, then ask permission to start
	   testplaying. A good thing is to inform the quest coordinator the
	   name of the test players.
	3/ Get a fellow wizard to test-play the quest, preferable with his
	   testchar. It is a good idea to snoop the tester to find even more
	   bugs and ideas of further improvement. Ask the tester to mail
	   comments to the quest coordinator, who will evaluate.
	4/ Recode it! (If necessary)
	5/ Decide, together with the quest coordinator, how many qp's it
	   should be worth. Perhaps build a www page about the quest. 
	6/ Give the quest a unique name starting with your name, and write a
	   hint that will be given to the players as information.
	7/ In your castle, add code to put a quest object ("/obj/quest_obj")
	   in the quest room ("/room/quest_room") once each reboot.
	8/ Final approval given, and quest opened.


	PUZZLES

	Puzzles are here to reward the player for doing things the first time
	they do it. Puzzles need no approval and aren't mandatory to solve to
	become wizard.  There are two functions to remember in /obj/player.c:
	set_puzzle() and query_puzzles().  See puzzles.r for more
	information.


	QUESTS

	A quest is a problem to solve for the mortals. NannyMUD have lots of
	quests and not only require the mortal to solve them to become
	wizard, but also to advance in levels. Any wizard may set up quests.


	MULTI AREA QUESTS

	To install a quest requiring code from several wizards areas, the
	responsible wizards have to consider the following things:
	* permission from the other wizards to use their code
	* control over the code used, or in some other way make the quest
	  solvable even if one or more of the contributing wizards leave
	  Nanny.


	REWARDS FOR SOLVING A QUEST

	A quest gives the player some quest points. You don't have to have
	any other reward. If you give a useful item, give it the first time
	only. If it's not useful, give it every time.


	FUNCTIONS TO REMEMBER

	Here is a brief list of useful functions. Take a look in the files
	for more details.

	/obj/player.c
	    set_quest()
            query_quests()
	/obj/quest_obj.c
	    set_name()
            set_hint()
            set_short()
            set_points()
            query_points()
	/obj/quest_mailer.c
	    set_mailtext()  
            set_other_wiz()

EXAMPLE

	AN EXAMPLE: THE QUEST "padrone"

	This example was written by Padrone once upon the time. It is still
	(February 6:th 1995) a valid piece of code, which shows that
	carefully written things will last longer.

        object qobj;

        qobj = clone_object("obj/quest_obj");
        qobj->set_name("padrone");
        qobj->set_hint("Padrone is sad. He built a beautiful walking "+
		       "castle, but a gang of pirates stole it and now "+
		       "he cannot find it any more. Help him to get it "+
		       "back!\n""+
		       "You don't have to be big and dangerous to solve "+
		       "this quest, but it's always a good idea to bring a "+
		       "weapon and some armour...\n");
        qobj->set_short("Find Padrone's walking castle");
        qobj->set_points(30);
        move_object(qobj, "room/quest_room");

	To mark that a quest is solved, call the function "set_quest" in the
	player object. Example:

        if (this_player()->query_quests("padrone")) {
          write("Padrone says: What? Have you solved the quest again?\n"+
	        "But Ok, I won't be angry.\n");
        }
        else {
          write("Padrone says: You found my castle! I am so happy!\n");
          this_player()->set_quest("padrone");
        }