Hey folks I need help with this function, it finds people in the room
fine, but it won't find people correctly within scanning distance. It's
for my missile weapons code.....anyway here's the function:
struct char_data *get_char_scan_vis(struct char_data * ch, char *name)
{
struct char_data *i;
int j = 0, number = 0, door;
char tmpname[MAX_INPUT_LENGTH];
char *tmp = tmpname;
/* JE 7/18/94 :-) :-) */
if (!str_cmp(name, "self") || !str_cmp(name, "me"))
return ch;
/* 0.<name> means PC with name */
strcpy(tmp, name);
if (!(number = get_number(&tmp)))
return get_player_vis(ch, tmp, 1);
/* First see if the person is in the same room */
for (i = world[ch->in_room].people; i && j <= number; i = i->next_in_room)
if (isname(tmp, i->player.name) || is_abbrev(tmp, i->player.name))
if (CAN_SEE(ch, i))
if (++j == number)
return i;
/* Now check the surrounding rooms */
for (door = 0; door < NUM_OF_DIRS; door++) {
if (EXIT(ch, door) && EXIT(ch, door)->to_room != NOWHERE &&
!IS_SET(EXIT(ch, door)->exit_info, EX_CLOSED)) {
if (world[EXIT(ch, door)->to_room].people) {
for (i = world[ch->in_room].people; i && j <= number; i = i->next_in_room)
if (isname(tmp, i->player.name) || is_abbrev(tmp, i->player.name))
if (CAN_SEE(ch, i))
if (++j == number)
return i;
} else if (_2ND_EXIT(ch, door) && _2ND_EXIT(ch, door)->to_room !=
NOWHERE && !IS_SET(_2ND_EXIT(ch, door)->exit_info, EX_CLOSED)) {
/* check the second room away */
if (world[_2ND_EXIT(ch, door)->to_room].people) {
for (i = world[_2ND_EXIT(ch, door)->to_room].people; i && j <= number; i = i->next_in_room)
if (isname(tmp, i->player.name) || is_abbrev(tmp, i->player.name))
if (CAN_SEE(ch, i))
if (++j == number)
return i;
} else if (_3RD_EXIT(ch, door) && _3RD_EXIT(ch, door)->to_room !=
NOWHERE && !IS_SET(_3RD_EXIT(ch, door)->exit_info, EX_CLOSED)) {
/* check the third room */
if (world[_3RD_EXIT(ch, door)->to_room].people) {
for (i = world[_3RD_EXIT(ch, door)->to_room].people; i && j <= number; i = i->next_in_room)
if (isname(tmp, i->player.name) || is_abbrev(tmp, i->player.name))
if (CAN_SEE(ch, i))
if (++j == number)
return i;
} else if (_4TH_EXIT(ch, door) && _4TH_EXIT(ch, door)->to_room !=
NOWHERE && !IS_SET(_4TH_EXIT(ch, door)->exit_info, EX_CLOSED)) {
/* check the third room */
if (world[_4TH_EXIT(ch, door)->to_room].people) {
for (i = world[_4TH_EXIT(ch, door)->to_room].people; i && j <= number; i = i->next_in_room)
if (isname(tmp, i->player.name) || is_abbrev(tmp, i->player.name))
if (CAN_SEE(ch, i))
if (++j == number)
return i;
} else if (_5TH_EXIT(ch, door) && _5TH_EXIT(ch, door)->to_room !=
NOWHERE && !IS_SET(_5TH_EXIT(ch, door)->exit_info, EX_CLOSED)) {
/* check the third room */
if (world[_5TH_EXIT(ch, door)->to_room].people) {
for (i = world[_5TH_EXIT(ch, door)->to_room].people; i && j <= number; i = i->next_in_room)
if (isname(tmp, i->player.name) || is_abbrev(tmp, i->player.name))
if (CAN_SEE(ch, i))
if (++j == number)
return i;
}
}
}
}
}
}
}
return NULL;
}
Thanks in advance for any help you could offer,
- Sean
Sean Mountcastle
----------------
Go climb a gravity well.
+-----------------------------------------------------------+
| Ensure that you have read the CircleMUD Mailing List FAQ: |
| http://cspo.queensu.ca/~fletcher/Circle/list_faq.html |
+-----------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/07/00 PST