/**
* Basically tracks players on their birthdays, and gives them presents
* and so forth. It also ensures that they don't get presents twice.
*/
#define BIRTHDAY "having birthday"
/**
* The entry point to the handler.
* @arg who the person who might be having a birthday.
*/
void check_player(object who) {
if( !who )
return;
if( !who->query_is_birthday_today() ) {
who->remove_property(BIRTHDAY);
return;
}
event( users(), "inform", who->query_cap_name()+" is having a birthday "
"today!", "birthday");
call_out("gift_player", 5, who );
} /* check_player() */
/**
* Colours a string. Works best with no spaces.
* @arg text string to be coloured
* @return the coloured string
*/
string colourise( string text ) {
int i;
string ret, *colours;
colours = ({"%^RED%^", "%^BLUE%^", "%^GREEN%^", "%^YELLOW%^"});
i = 0;
ret = "";
while( i < strlen(text) ) {
ret += colours[i%4] + text[i..i];
i++;
}
return ret + "%^RESET%^";
} /* colourise() */
/**
* Gives the player gifts.
* Currently the only gift given is a brace of fireworks above their
* heads.
* @arg who the person receiving gifts.
*/
void gift_player( object who ) {
string year;
if( !who )
return;
if( year = who->query_property(BIRTHDAY) ) {
if( year == ctime(time())[<4..] )
return;
who->remove_property(BIRTHDAY);
}
who->add_property( BIRTHDAY, ctime(time())[<4..] );
tell_object( who, "%^YELLOW%^Happy Birthday, from all of the "+
mud_name()+" Staff!\n%^RESET%^");
FIREWORK_H->random_firework( who, "%^BOLD%^%^RED%^H%^BLUE%^A%^GREEN%^P"
"%^YELLOW%^P%^RED%^Y %^BLUE%^B%^GREEN%^I%^YELLOW%^R%^RED%^T"
"%^BLUE%^H%^GREEN%^D%^YELLOW%^A%^RED%^Y "+
colourise( who->query_cap_name()+"!") );
if( creatorp(who) ) {
tell_object( who, "A small green gnome wanders up to you and "
"hands you a large card, muttering something about a birthday "
"before wandering off again.\n");
clone_object("/obj/misc/card")->move(who);
}
} /* gift_player() */