/*
* This stick doesn't actually do anything. But who cares?
* Written by Pinkfish -- Today is Setting Orange, the 38th day
* of The Aftermath in the YOLD 3162
*/
inherit HELD_OBJ;
#include <move_failures.h>
int state;
void set_state(int state);
void setup() {
set_name("stick");
set_state(0);
set_weight(2);
set_value(10);
} /* setup() */
void init() {
add_command("turn", "<direct:object> {on|off}");
add_command("flick", "switch on <direct:object>");
add_command("press", "switch on <direct:object>");
add_command("push", "switch on <direct:object>");
add_command("flick", "<direct:object>");
add_command("turn", "switch {on|off} on <direct:object>");
add_command("switch", "<direct:object> {on|off}");
} /* init() */
void set_state( int new_state ) {
state = new_state;
if( state ) {
set_long("The long straight black stick vibrates slightly in your "
"hands, you get a nice massage from it. There is something "
"which looks a bit like a switch down near the base of the "
"stick. Flashing lights rush up and down the side of the stick "
"in a mad progression.\n");
} else {
set_long("The long straight black stick vibrates slightly in your "
"hands, you get a nice massage from it. There is something "
"which looks a bit like a switch down near the base of the "
"stick.\n");
}
if( environment() ) {
if( state ) {
if( living(environment()) )
environment()->add_extra_look(TO);
} else
environment()->remove_extra_look(TO);
}
} /* set_state() */
string extra_look() {
return CAP(PO->query_pronoun())+" is surrounded by an aura of bees.\n";
} /* extra_look() */
int do_turn( mixed indirect_obs, string indir_match,
string dir_match, mixed *args, string pattern ) {
int new_state;
new_state = 0;
if( "<direct:object> {on|off}" == pattern ) {
if( args[1] == "on")
new_state = 1;
} else {
if( args[0] == "on")
new_state = 1;
}
if( state == new_state ) {
add_failed_mess("$D is already turned "+(state?"on":"off")+".\n");
return 0;
}
set_state(new_state);
add_succeeded_mess("$N $V $D "+(state?"on":"off")+".\n");
return 1;
} /* do_turn() */
int do_flick() {
set_state(!state);
add_succeeded_mess("$N $V the switch on $D to the "+
(state?"on":"off")+" position.\n");
return 1;
} /* do_flick() */
int do_press() {
return do_flick();
} /* do_press() */
int do_push() {
return do_flick();
} /* do_push() */
int do_switch( mixed indirect_obs, string indir_match,
string dir_match, mixed *args, string pattern) {
int new_state;
if( args[1] == "on")
new_state = 1;
if( state == new_state ) {
add_failed_mess("$D is already turned "+(state?"on":"off")+".\n");
return 0;
}
set_state(new_state);
add_succeeded_mess("$N $V $D "+(state?"on":"off")+".\n");
return 1;
} /* do_switch() */
/** @ignore yes */
mapping query_dynamic_auto_load() {
mapping m;
m = ([ "::" : held::query_dynamic_auto_load() ]);
if( state )
m["state"] = state;
return m;
} /* query_dynamic_auto_load() */
/** @ignore yes */
void init_dynamic_arg( mapping map, mixed dummy ) {
set_state(map["state"]);
if( map["::"] )
held::init_dynamic_arg( map["::"], dummy );
} /* init_dynamic_arg() */
/** @ignore yes */
varargs int move( mixed dest, string str1, string str2 ) {
int ret;
object old;
old = environment();
ret = ::move( dest, str1, str2 );
if( !ret ) {
if( state ) {
if( old )
old->remove_extra_look(TO);
if( living(environment()) )
environment()->add_extra_look(TO);
}
}
return ret;
} /* move() */
/** @ignore yes */
mixed stats() { return ::stats() + ({ ({"state", state }) }); }