Generic Speaking Wandering Automaton (#1044)

(an instance of Generic Wandering Automaton made by Eclipse)

     You see a homeless, nomadic robot. Its memory circuits were affected by being stored too close to a television set and may now be seen roaming about shouting "Exterminate! Exterminate!".

Generic Speaking Wandering Automaton has some things to say:
      Hey, my speak_msg is clear. Please set it for me!

Go to location of this object, wooden box.


HELP MANUAL:
        The Generic Speaking Wandering Automaton is a speaking child of the Generic Wandering 
Automaton (#502).  The Generic Speaking Wandering Automaton (GSWA) will respond when 
talked to, unless it has been gagged/shut up.
         
        GSWA Commands:
         
        talk (at/to) 
             When the GSWA is spoken to, a response is given from it's .speak_msg property.
        
        shutup/gag 
             Gagging or shutting up the GSWA diables the talk command by setting the GSWA's 
.talkative property to 0 (it is, by default, 1).  Its .silent_msg and .osilent_msg 
are given when the talk command is used, and its .gagged_msg is appended to its description, 
if it is set.
        
        unshutup/ungag 
             Ungagging the GSWA resets its .talkative property to 1, removes the .gagged_msg 
from its description, and allows it to respond to the talk command with its .speak_msg. 

       
        The responses given by the GSWA to the talk command are stored in its .speak_msg 
property.  This may be set to one string, or a list of strings may created, causing 
the GSWA to give random messages from the list each time the talk command is used.
        The GSWA also has a .says_msg property, which determines how the GSWA delievers 
its .speak_msg. This also may be set to one string, such as "whispers", or made into 
a list, allowing random methods of speaking, such as "stutters", "warbles", or "howls".
        The GSWA's .silent_msg is displayed to a player who uses the talk command on a 
gagged GSWA.  At the same time, the .osilent_msg is displayed to the location of 
the player attempting to talk to the gagged GSWA.  These messages may also be made 
into single strings or lists.
        The .gagged_msg of the GSWA is appended to the description of a gagged GSWA.  
Nothing is appended if the message string is empty, and this message may also be 
a single string or a list.
        The GSWA is also able to take advantage of rooms that support object integration 
(#459).  The .look_msg property, settable as a string or a list, is appended to the 
room's description.  If the message is an empty string, the GSWA will be concealed. 
 If the room's integration is not on, the GSWA will simply appear in the room's contents.
     
        For information about the GSWA's parents, the Generic Wandering Automaton and 
the Generic Automaton, see `help #502' and `help #192'.  - Eclipse
     -------------------------------------------------------------------



VERB SOURCE CODE:

talk:
(player.location != this.location) ? player:tell("You can't talk to ", this.name, 
" from here.") | ((!this.talkative) ? {player:tell(this:silent_msg()), this.location:announce(this:osilent_msg())} 
| {this.location:announce(player.name, " ", verb, "s to ", this.name, "."), player:tell("You 
", verb, " to ", this.name, "."), this.location:announce_all(this.name, " ", this:says_msg(), 
", \"", this:speak_msg(), "\"")});
.


speak_msg silent_msg osilent_msg look_sep_msg gagged_msg:
msg = this:get_message(verb[1..length(verb) - 4]);
return $string_utils:pronoun_sub((typeof(msg) == LIST) ? msg[random(length(msg))] 
| msg);
.


shutup gag:
(player != this.owner) ? player:tell("You cannot gag any automatons not belonging 
to you.") | ((!this.talkative) ? player:tell("You've already made ", this.name, " 
shut up.") | {this:set_talkative(0), player:tell("You've made ", this.name, " shut 
up.")});
.


unshutup ungag:
(player != this.owner) ? player:tell("You cannot ungag any automatons not belonging 
to you.") | (this.talkative ? player:tell(this.name, " is already able to talk.") 
| {this:set_talkative(1), player:tell(this.name, " will now be able to talk again.")});
.


says_msg:
msg = this.(verb);
return (typeof(msg) == LIST) ? msg[random(length(msg))] | msg;
.


set_talkative:
return (caller == this) ? this.talkative = args[1] | E_PERM;
.


description:
d = pass(@args);
this.talkative || ((s = this:gagged_msg()) && (d = (typeof(d) == LIST) ? listappend(d, 
s) | ((typeof(d) == STR) ? (d + this:look_sep_msg()) + s | d)));
return d;
.


acceptable:
return !is_player(args[1]);
.



PROPERTY DATA:
      speak_msg
      talkative
      says_msg
      look_msg
      silent_msg
      osilent_msg
      look_sep_msg
      gagged_msg

CHILDREN:
Sister Devi Diogenes Trix Ho-Tei Shuffling Peon The Critic Biker Bob Dr. Sass The Pickpocket The Lady of Shalott The aging rhymester, Harry Machaut Flower KoKo Eno Generic Conversational Wandering Automaton Saul