/**
* This is the gossip effect shadow for gossiping children, etc.
*/
#include <gossip.h>
#define MAX_BUFFER 4
inherit "/std/effect_shadow";
private class gossip_data *gossip = ({ });
private int last;
/** @ignore yes */
void event_person_say( object ob, string start, string mess, string lang ) {
class gossip_data data;
player->event_person_say( ob, start, mess, lang );
// We only want players' gossip, which is somewhat meaningful...
if( !interactive(ob) || !stringp(mess) || sizeof(mess) > 100 ||
sizeof( explode( mess, " ") ) < 3 || creatorp(ob) ||
strsrch( mess, "fuck") != -1 ||
strsrch( mess, "cunt") != -1 ||
strsrch( mess, "bitch") != -1 ||
strsrch( mess, "shit") != -1 )
return;
data = new( class gossip_data,
who : ob->query_cap_name(),
what : mess );
if( !sizeof(gossip) || gossip[<1]->who != data->who ||
gossip[<1]->what != data->what ) {
int i;
gossip += ({ data });
if( ( i = sizeof(gossip) ) > MAX_BUFFER )
gossip = gossip[i-MAX_BUFFER..];
}
if( !random(32) )
GOSSIP_H->add_gossip( data );
} /* event_person_say() */
/** @ignore yes */
void do_gossip_say( string str ) {
class gossip_data data;
int i, chance;
if( !str )
str = "$name$ said: $mess$";
if( !intp( chance = arg() ) )
chance = 4;
i = sizeof(gossip);
if( !random(chance) || !i || ( i == 1 && !last ) )
data = GOSSIP_H->query_random_gossip();
if( data ) {
last = -1;
} else if( !data && i ) {
chance = random( i );
if( chance == last )
chance = ( chance + 1 ) % i;
last = chance;
data = gossip[chance];
}
if( !data )
return;
str = replace( str, ({ "$name$", data->who,
"$mess$", data->what }) );
player->do_command("'"+str);
} /* do_gossip_say() */
/** @ignore yes */
class gossip_data *query_gossip_says() { return gossip; }