/**
* The friends command, keeps track of your
* friends.
* Feb 18th '02 by Avelan
*/
#define LIST 0
#define ADD 1
#define REMOVE 2
inherit COMMAND_BASE;
/** @ignore yes */
int cmd( string friend, int flag ) {
string *friends;
function f;
int i;
i == sizeof( friends = TP->query_property("friends") || ({ }) );
friends = filter( friends, (: PLAYER_H->test_user($1) :) );
friend = lower_case( TP->expand_nickname(friend) );
if( !sizeof(friends) )
TP->remove_property("friends");
else if( i != sizeof( friends ) )
TP->add_property("friends", friends );
if( flag == ADD ) {
if( !PLAYER_H->test_user( friend ) ) {
add_failed_mess( CAP(friend)+" doesn't appear to have a "
"character on "+mud_name()+".\n");
return 0;
}
if( friend == TP->query_name() ) {
add_failed_mess("Come on, there must be someone other than "
"yourself that you can add to your friends list.\n");
return 0;
}
if( member_array( friend, friends ) != -1 ) {
add_failed_mess( CAP(friend)+" appears to be already on your "
"friends list.\n");
return 0;
}
friends += ({ friend });
TP->add_property("friends", friends );
write( CAP(friend)+" has been added to your friends list.\n");
return 1;
}
if( flag == REMOVE ) {
if( !sizeof(friends) ) {
add_failed_mess("You don't appear to have anyone on your friends "
"list.\n");
return 0;
}
if( member_array( friend, friends ) == -1 ) {
add_failed_mess( CAP(friend)+" doesn't appear to be on your "
"friends list.\n");
return 0;
}
friends -= ({ friend });
write( CAP(friend)+" has been removed from your friends list.\n");
if( !sizeof(friends) ) {
TP->remove_property("friends");
return 1;
}
TP->add_property("friends", friends );
return 1;
}
if( !sizeof(friends) ) {
add_failed_mess("You don't appear to have anyone on your friends "
"list.\n");
return 0;
}
f = function( string name ) {
int last;
object ob;
ob = find_player(name);
last = ob ? ob->query_last_log_on() : PLAYER_H->test_last(name);
return sprintf("%-16s %-26s %-15s", CAP(name),
( ob ? "Currently Logged In" : ctime(last) ),
( ob ? ( !interactive(ob) ? "Net dead" :
"Idle: "+query_idle(ob) / 60 ) :
time_string( time() - last, 1 ) ) );
};
friends = map( friends, f );
friend = create_table( ({ "Friends", "friend" }), friends, 0 );
tell_object( TP, friend );
return 1;
} /* cmd() */
/** @ignore yes */
mixed query_patterns() {
return ({ "", (: cmd( "", LIST ) :),
"list", (: cmd( "", LIST ) :),
"add <string'player'>", (: cmd( $4[0], ADD ) :),
"remove <string'player'>", (: cmd ( $4[0], REMOVE ) :)
});
} /* query_patterns() */