path.c and pathfuncs.c - examples for course 05

[previous example] [course05] [Table of contents] [next example]
/* Filename      : path.c
 * Description   : an enchanted path
 *
 * written       : 02-10-1996 - Gunner
 * last modified : 26-05-1998 - Gunner
 * HTML-Version  : 02-02-2000 - Ghorwin
 */

#include <mudlib.h>
inherit I_ROOM;

#define FUNC "/doc/crashcourse/course05/pathfuncs"

create()
{
    ::create();
    set_light(1);
    set_short("A path");
    set_long("You are walking along a path running north towards "
        "a mountain that can be seen in the distance. There "
        "seems to be some kind of a hole in it.\n");
  
    add_item(({"path","small path"}), "It's just a small path running "
        "north towards a mountain.\n");
    add_item("mountain","You can see the mountain rise up in the distance.\n");
    add_item("hole","Could it be a cave?\n");
    add_item("cave","It could be a cave, but it's hard to tell from this "
        "far away.\n");
    add_item("ground", "It's still beneath you. Stop worrying!\n");
    add_item("sky","The sky is still up there. Getting paranoid?\n");
    add_item(({"cloud","clouds"}),"The clouds are still attached to that "
        "big bluish thing up there.\n");
    add_item(({"thing","bluish thing","big thing","big bluish thing"}),
        "It's the sky, stupid...\n");
    add_item("sun","You can't see it because of all the clouds up there.\n");

    // Let's hook some events in the room. One is for when the room
    // resets and the other is for objects entering the room...
    add_hook("__reset",(:call_other,FUNC,"reset_path",this_object():));
    add_hook("__enter_inv",({FUNC,"enter_path"}),this_object());

    replace_program(I_ROOM);
}

pathfuncs.c


/* Filename      : pathfuncs.c
 * Description   : the functionfile for path.c
 *
 * written       : 02-10-1996 - Gunner
 * last modified : 05-11-1997 - Gunner
 * HTML-Version  : 02-02-2000 - Ghorwin
 */

#include <mudlib.h>
inherit I_DAEMON;

#define PIZZA "/doc/crashcourse/course02/pizza"

/* 
 * reset_path : is called by the __reset hook
 */
void
reset_path(object room)
{
    // Send a message into the room every time it resets
    tell_room(room, "The room shakes slightly as the almighty RESET monster "
        "bumps into it.\n");
}

/* enter_path : is called by the __enter_inv hook
 * The room object is something we're passing through,
 * while the ob and from objects are both standard arguments
 */
void
enter_path(object room, object ob, object from)
{
    object new_ob;
    if (living(ob) ||                   // Allow living objects into the room
        ob->query_id("pizza")) return;  // Allow pizza's in the room. ;-)
    tell_room(room, "As the " + ob->query_name() + " falls to the ground, "
        "it vanishes. And a pizza appears there instead.\n");

    // Destroy any non-living object that enters the room
    ob->destroy();
	
    // Clone a pizza from course #02
    new_ob = clone_object(PIZZA);

    // Move the pizza out into the room
    new_ob->move(room);
}