// Christmas Tree
// Windy, December 2001
#define SAVE "/save/misc/tree"
inherit OBJECT_OBJ;
mapping d;
nosave string name, long;
int query_decorations() { return sizeof( d ); }
void add_2( string str );
void add_final( string long, string name );
int do_look( string name );
void save_me();
void load_me();
void create()
{
d = ([ ]);
load_me();
::create();
}
void setup()
{
set_name("tree");
set_short("%^BOLD%^Christmas Tree%^RESET%^");
set_long("A beautiful Christmas Tree. It is adorned with various little items "+
"that have been added by passers-by. It now has "+ query_decorations() +" "+
"decoration"+(sizeof(d) != 1 ? "s" : "" )+" on it!\n\n"+
"Read the sign for details!\n");
reset_get();
}
void init()
{
TP -> add_command("add", TO, "decoration" );
TP -> add_command("browse", TO, "decorations");
TP -> add_command("look", TO, "[at] <string'playername'> decoration",
(: do_look( $4[0] ) :) );
}
int do_add()
{
tell_object( TP, "What is the name of your decoration?\n");
input_to( (: add_2 :) );
return 1;
}
void add_2( string str )
{
tell_object( TP, "What is the description of your decoration?\n");
input_to( (: add_final :), 0, str );
}
void add_final( string long, string name )
{
d[TP -> query_name()] = ([ name : long ]);
tell_object( TP, "You add to the tree "+ name +" that looks like: "+ long +".\n");
setup();
save_me();
}
int do_browse()
{
string s, ret = "";
mapping j;
if( !sizeof( d ) )
return notify_fail("There are no decorations on the tree!\n");
foreach( string str in keys( d ) )
{
s = CAP( str ) +": ";
j = d[str];
s += keys( j )[0] +"\n";
ret += s;
}
tell_object( TP, "You see "+ query_decorations() +" "+
(sizeof(d) != 1 ? "decorations" : "decoration" ) +":\n"+ ret +"");
tell_room( ENV( TP ), TP -> the_short() +" looks at the tree to see what "+
"decorations it has.\n", TP );
return 1;
}
int do_look( string name )
{
mapping m;
name = lower_case(name);
if( name[<2..] == "'s" )
name = name[0..<3];
if( !m = d[name] )
{
add_failed_mess( CAP( name ) +" doesn't have a decoration on the tree!\n");
return 0;
}
tell_object( TP, "You look at "+ CAP( name ) +"'s "+
keys( m )[0] +":\n"+ values( m )[0] +"\n");
tell_room( ENV( TP ), TP -> the_short() +" looks at "+ CAP( name ) +"'s "+
"decoration.\n", TP );
return 1;
}
void save_me()
{
unguarded( (: save_object, SAVE, 1 :) );
}
void load_me()
{
unguarded( (: restore_object, SAVE, 1 :) );
}