Ok, here it is, rather clumsy code I'm afraid, if anyone neatens it up a bit then send me a copy... It works with circle2.2 code and probably with anything else similar. Obviously searching every person on the game takes time so I recommend you make it an immort skill only, not a spell, but up to you... Also, if anyone wants to add paging to it then that'd be appreciated. Free @ UnknownMud _______________________________________________________________________ void perform_immort_where(struct char_data *ch, char *arg) { register struct char_data *i; register struct obj_data *k; struct descriptor_data *d; int num = 0, found = 0; int j; if (!*arg) { send_to_char("Players\n\r-------\n\r", ch); for (d = descriptor_list; d; d = d->next) if (!d->connected) { i = (d->original ? d->original : d->character); if (i && CAN_SEE(ch, i) && (i->in_room != NOWHERE)) { if (d->original) sprintf(buf, "%-20s - [%5d] %s (in %s)\n\r", GET_NAME(i), world[d->character->in_room].number, world[d->character->in_room].name, GET_NAME(d->character)); else sprintf(buf, "%-20s - [%5d] %s\n\r", GET_NAME(i), world[i->in_room].number, world[i->in_room].name); send_to_char(buf, ch); } } } else { for (i = character_list; i; i = i->next) if (CAN_SEE(ch, i) && i->in_room != NOWHERE && isname(arg, i->player.name)) { found = 1; sprintf(buf, "%3d. %-25s - [%5d] %s\n\r", ++num, GET_NAME(i), world[i->in_room].number, world[i->in_room].name); send_to_char(buf, ch); } for ( i = character_list; i; i = i->next) for (j = 0; j < MAX_WEAR; ++j) if (i->equipment[j]) if (isname(arg, i->equipment[j]->name)) { sprintf(buf, "%3d: %s used by %s\n\r", ++num, i->equipment[j]->short_description, GET_NAME(i)); send_to_char(buf, ch); } for (k = object_list; k; k = k->next) { if (CAN_SEE_OBJ(ch, k) && isname(arg, k->name)) { if (k->carried_by) { sprintf(buf, "%3d. %s carried by %s.\n\r", ++num, k->short_description, GET_NAME(k->carried_by)); send_to_char(buf, ch); } else if (k->in_obj) { sprintf(buf, "%3d. %s in %s", ++num, k->short_description, k->in_obj->short_description); if (k->in_obj->carried_by) { sprintf(buf, "%s carried by %s\n\r", buf, GET_NAME(k->in_obj->carried_by)); } else sprintf(buf, "%s\n\r", buf); send_to_char(buf, ch); } else if (k->in_room != NOWHERE) { sprintf(buf, "%3d. %-25s - [%5d] %s\n\r", ++num, k->short_description, world[k->in_room].number, world[k->in_room].name); send_to_char(buf, ch); } found = 1; } } if (!found) send_to_char("Couldn't find any such thing.\n\r", ch); } }
This archive was generated by hypermail 2b30 : 12/07/00 PST