mud/lib/domains/examples/room/exroom7.c
2020-09-06 05:43:07 -07:00

94 lines
2.5 KiB
C

#include <lib.h>
#include "ex.h"
inherit LIB_ROOM;
int once;
int is_pulled();
void create()
{
::create();
SetAmbientLight(30);
SetShort( "two verbs for one action" );
SetLong(@EndText
This room demonstrates how you can use two verbs to do
one thing.
There's a chain here. You can pull it or yank it.
Note: See how we change the description of the chain?
It's important to remove 'quest hints' once a
quest has been done. And then put them back in
when the quest is ready to do.
EndText
);
// Here is another functional to point to the is_pulled()
// function. This is a very useful tool.
SetItems( ([
"chain" : (: is_pulled :),
]));
SetExits( ([
"south" : EXPATH + "exroom6",
]));
}
/* Here you'll see that we have two add_actions. We have 'pull' and
'yank'. If the player uses either verb when pulling the chain
the aa_chain() function is called.
*/
void init()
{
::init();
add_action("aa_chain","pull");
add_action("aa_chain","yank");
}
/* This is the first reset() function that we've seen so I'd like
to take a moment to explain it. The reset() function allows
an object to do self-maintenance. After every reset interval
(whose exact length is determined on a mud by mud basis, but
averages around every 2 hours), reset() is called in every
object that currently exists. Here, we use the reset()
function to return the variable 'once' back to 0 to allow the
chain to be pulled again after reset occurs.
*/
void reset()
{
::reset();
once=0;
}
/* query_verb() tells you what the player typed */
mixed aa_chain (string str)
{
string averb=query_verb();
if (str!="chain")
return notify_fail(capitalize(averb)+ " what?\n");
if (once)
return notify_fail("The chain has already been " +
averb + "ed.\n");
// We're returning the averb variable that was defined and set
// above in a message to the player and the room. Then, we
// set the 'once' variable to show that the chain has been pulled.
write("You " + averb + " the chain!\n");
say(this_player()->GetName() + " "+ averb + "s the chain!\n");
once=1;
return 1;
}
// This is the functional that was called to show the current state
// of the chain. Pulled or not pulled.
string is_pulled()
{
if( once )
return "You see a plain chain.\n";
else
return "Here's a chain begging to be yanked or pulled.\n";
}