/* Do not remove the headers from this file! see /USAGE for more info. */ //:COMMAND // // Syntax: <say MESSAGE> // <say /last> // // This command is used to talk with others in the same room as you. // It is done in a common language that everybody can understand. // The /last and /history syntaxes will display your say history. #include <mudlib.h> inherit CMD; inherit M_GRAMMAR; #define MAX_HISTORY 20 #undef PER_BODY_sAY_HISTORY void query_history(object o); void add_history(object o, string msg); private mapping history = ([ ]); void create() { ::create(); no_redirection(); } private void main(string s) { if (!s || s == "") { out("Say what?\n"); return; } if (s == "/last") #ifdef PER_BODY_SAY_HISTORY return query_history(this_body()); #else return query_history(environment(this_body())); #endif /* PER_BODY_SAY_HISTORY */ #ifdef ZORKMUD this_body()->simple_action("$N $vsay, \"$O\"", punctuate(s)); #ifdef PER_BODY_SAY_HISTORY add_history(this_body(), sprintf("You say, \"%s\"", punctuate(s))); foreach(object ob in filter(all_inventory(environment(this_body())) - ({ this_body() }), (: $1->query_link() :))) add_history(ob, #else add_history(environment(this_body()), #endif /* PER_BODY_SAY_HISTORY */ sprintf("%s says, \"%s\"", this_body()->query_name(), punctuate(s))); #else this_body()->simple_action("%^SAY%^$N $vsay:%^RESET%^ $o", punctuate(s)); #ifdef PER_BODY_SAY_HISTORY add_history(this_body(), sprintf("%%^SAY%%^You say:%%^RESET%%^ %s", punctuate(s))); foreach(object ob in filter(all_inventory(environment(this_body())) - ({ this_body() }), (: $1->query_link() :))) add_history(ob, #else add_history(environment(this_body()), sprintf("%%^SAY%%^%s says:%%^RESET%%^ %s", this_body()->query_name(), punctuate(s))); #endif /* PER_BODY_SAY_HISTORY */ #endif /* ZORKMUD */ } private void add_history(object o, string msg) { if (!history[o]) history[o] = ({ msg }); else history[o] += ({ msg }); if (sizeof(history[o]) > MAX_HISTORY) history[o] = history[o][1..<1]; } private void query_history(string o) { string hist; if ( !history[o] ) return out("No say history.\n"); hist = implode(history[o], "\n"); if ( hist == "" ) hist = "<none>\n"; more(sprintf("History of 'says':\n%s\n", hist)); } nomask int valid_resend(string ob) { return ob == "/cmds/player/converse"; }