// Reply for a local user locate request
private void locate_reply(mixed *packet) {
object user;
if (sizeof(packet) != (S_P + SIZEOF_LOCATE_REPLY)) {
packet_invalid(packet);
return;
}
if (!(user = find_player(packet[P_RECIPIENT])))
return;
tell_object(user, sprintf("%s was located at %s.\n",
packet[S_P + LOCATE_REPLY_SHORT],
packet[S_P + LOCATE_REPLY_LOCATION]));
} /* locate_reply() */
// Remote users locate request
private void locate_request(mixed *packet) {
object user;
mixed *reply;
if (sizeof(packet) != (S_P + SIZEOF_LOCATE_REQ)) {
packet_invalid(packet);
return;
}
event(users(),"inform", sprintf("IMUD locate for %s from %s@%s",
packet[S_P + LOCATE_REQ_NAME],packet[P_SENDER], packet[P_SOURCE]), "admin");
if (!(user = find_player(packet[S_P + LOCATE_REQ_NAME])))
return;
if(user->query_invis())
return;
reply = packet_allocate(LOCATE_REPLY_PACKET);
reply[P_DESTINATION] = packet[P_SOURCE];
reply[P_RECIPIENT] = packet[P_SENDER];
reply[S_P + LOCATE_REPLY_LOCATION] = MUD_NAME;
reply[S_P + LOCATE_REPLY_SHORT] = user -> query_cap_name();
reply[S_P + LOCATE_REPLY_IDLETIME] = query_idle(user);
reply[S_P + LOCATE_REPLY_STATUS] = NULL;
add_buffer(0, reply);
send_buffer(0);
} /* locate_request() */
// Initiate a locate request
int locate(string user) {
mixed *packet = packet_allocate(LOCATE_REQ_PACKET);
if (shutdown)
return 0; // Service is unavailable
packet[P_SENDER] = TU -> query_name();
packet[S_P + LOCATE_REQ_NAME] = user;
add_buffer(0, packet);
send_buffer(0);
return 1;
} /* locate() */