/*    /daemon/services/locate.c
 *    From the Dead Souls V Object Library
 *    performs player lookups
 *    Created by Descartes of Borg 950624
 *    Version: @(#) locate.c 1.2@(#)
 *    Last modified: 96/12/09
 */
#define SERVICE_LOCATE
#include <daemons.h>
#include <rooms.h>
#include <message_class.h>
void eventReceiveLocateRequest(mixed array packet) {
    string status;
    int idl = 0;
    object ob;
    if( file_name(previous_object()) != INTERMUD_D ) return;
    tell_room(ROOM_ARCH,"The Arch Room loudspeaker announces: \"%^BOLD%^CYAN%^"+capitalize(packet[3])+" at "+packet[2]+" has issued a locate request for %^BOLD%^YELLOW%^"+capitalize(packet[6])+".%^RESET%^\"");
    tn("Locate request received: "+identify(packet),"white");
    if( !(ob = find_player(packet[6])) || ob->GetInvis()) return;
    if( interactive(ob) ) {
	string array tmp = ({ });
	if( in_input(ob) || in_edit(ob) )
	    tmp += ({ "editing" });
	if( (idl = query_idle(ob)) > 60 )
	    tmp += ({ "inactive" });
	if( sizeof(tmp) ) status = implode(tmp, ", ");
	else status = 0;
    }
    else status = "link-dead";
    INTERMUD_D->eventWrite( ({ "locate-reply", 5, mud_name(), 0, packet[2], 
	packet[3], mud_name(),
	(string)ob->GetName(), idl, status }) );
}
void eventReceiveLocateReply(mixed array packet) {
    object ob;
    string m;
    int idl;
    if( file_name(previous_object()) != INTERMUD_D ) return;
    if( !stringp(packet[5]) || !(ob = find_player(convert_name(packet[5]))) ) 
	return;
    tn("Locate reply received: "+identify(packet),"white");
    m = packet[7] + " was just located on " + packet[6] + ".";
    if( (idl = (int)packet[8]) > 60 )
	m += sprintf(" (idle %02d:%02d:%02d)", idl/3600, (idl/60)%60, idl%60);
    if( stringp(packet[9]) )
	m += " [status: " + packet[9] + "]";
    ob->eventPrint(m, MSG_SYSTEM);
}
void eventSendLocateRequest(string who) {
    string pl;
    mixed *locate_request = ({ "locate-req", 5, mud_name(), pl, 0, 0, who });
    if( !(pl = (string)this_player(1)->GetKeyName()) ) return;
    INTERMUD_D->eventWrite( ({ "locate-req", 5, mud_name(), pl, 0, 0, who }) );
    tn("Locate request being sent: "+identify(locate_request),"white");
}