#include <lib.h> #include ROOMS_H #include "ex.h" // The #include "ex.h" is used in each of these files to remember // the defines for EXPATH and other variables we have defined // that all of these files use. It would be tedious to have to // put the #define EXPATH in every file, so we put it into one // and include it as a reference for each file that needs it. // Consider it a library card. The books that are in the library // (the #define's) are referenced every time you see EXPATH. inherit LIB_ROOM; // I'm defining a global variable here called once to be used later // in the file. A global variable is something that can be used // by any function in this room. There are also local variables // that can be defined only in the variable using it. int once; // I'm also defing a function lever_pulled() that will be called later. mixed lever_pulled(); void create() { ::create(); SetAmbientLight(30); SetShort( "Lever Pull" ); SetLong("This is an example room for a simple add_action which changes "+ "a description. There's a lever to pull." ); SetExits( ([ "north" : EXPATH + "exroom2", "south" : EXPATH + "entrance", ])); // Here, take a look at how I set the lever item. It is different // that you saw in the entrance room. What I am doing here is // calling a functional. When the player types 'look lever', it // will call the functional (: lever_pulled :) that we defined above. // I'll explain later in this file. SetItems( ([ "lever" : ((: lever_pulled :)) ]) ); } // In the init() function, I am setting our global variable 'once' to 0. This // is used to reset the lever back when the room resets or the mud reboots. // so the next player who comes in to pull the lever, they can. // In the init() function, we also define the actions that can be done in the // room. In this case, we need a pull action to 'pull lever'. Whenever a player // types pull, it will call the function aa_pull(). void init() { ::init(); add_action("aa_pull","pull"); once = 0; } // This is the function that is called when a player types pull as mentioned above. // First, we need to check and see if they are pulling the correct thing. the // string str is defining a local variable that will be used in this function. // Next, we have if( str != "lever"). That is saying if I type 'pull finger', // it will write 'Pull what?'. The \n symbol means a carriage return or 'enter' // to go to the next line. mixed aa_pull(string str) { if ( str != "lever") { write( "Pull what?\n" ); return 1; } // Here we are going to check if the lever has been pulled. If it has, // it's going to tell the player that and exit the aa_pull() function. // this is done by the return 1; that you see here. if( once ==1 ) { write( "The lever's already pulled." ); return 1; } // If the lever has not been pulled, this part starts. As you'll notice, we // set once = 1 to indicate that the lever has been pulled. write("You pull the lever!\n"); say(this_player()->GetName() + " pulls the lever!\n"); once=1; return 1; } // I told you I'd explain what the functional (: lever_pulled :) was for. // Below, it checks to see if the lever has been pulled. if( !once ) // says, if once is equal to 0 (not pulled) it returns and says the lever // has not been pulled. If once is not equal to 0, then it means that it // has been pulled and returns a different message. mixed lever_pulled() { if( !once ) return "The lever is pushed into the wall. Perhaps you could pull it."; return "The lever has already been pulled. You're too late!"; }