My version of scan.
--- Somewhere in act.informative.c, add:
ACMD(do_scan)
{
struct char_data *i;
int is_in, dir, dis, maxdis, found = 0;
const char *distance[] = {
"right here",
"immediately ",
"nearby ",
"a ways ",
"far ",
"very far ",
"extremely far ",
"impossibly far ",
};
if (IS_AFFECTED(ch, AFF_BLIND)) {
act("You can't see anything, you're blind!", TRUE, ch, 0, 0, TO_CHAR);
return;
}
if ((GET_MOVE(ch) < 3) && (GET_LEVEL(ch) < LVL_IMMORT)) {
act("You are too exhausted.", TRUE, ch, 0, 0, TO_CHAR);
return;
}
maxdis = (1 + ((GET_SKILL(ch, SKILL_SCAN) * 5) / 100));
if (GET_LEVEL(ch) >= LVL_IMMORT)
maxdis = 7;
act("You quickly scan the area and see:", TRUE, ch, 0, 0, TO_CHAR);
act("$n quickly scans the area.", FALSE, ch, 0, 0, TO_ROOM);
if (GET_LEVEL(ch) < LVL_IMMORT)
GET_MOVE(ch) -= 3;
is_in = ch->in_room;
for (dir = 0; dir < NUM_OF_DIRS; dir++) {
ch->in_room = is_in;
for (dis = 0; dis <= maxdis; dis++) {
if (((dis == 0) && (dir == 0)) || (dis > 0)) {
for (i = world[ch->in_room].people; i; i = i->next_in_room) {
if ((!((ch == i) && (dis == 0))) && CAN_SEE(ch, i)) {
sprintf(buf, "%33s: %s%s%s%s", GET_NAME(i), distance[dis],
((dis > 0) && (dir < (NUM_OF_DIRS - 2))) ? "to the " : "",
(dis > 0) ? dirs[dir] : "",
((dis > 0) && (dir > (NUM_OF_DIRS - 3))) ? "wards" : "");
act(buf, TRUE, ch, 0, 0, TO_CHAR);
found++;
}
}
}
if (!CAN_GO(ch, dir) || (world[ch->in_room].dir_option[dir]->to_room
== is_in))
break;
else
ch->in_room = world[ch->in_room].dir_option[dir]->to_room;
}
}
if (found == 0)
act("Nobody anywhere near you.", TRUE, ch, 0, 0, TO_CHAR);
ch->in_room = is_in;
}
--- In interpreter.c, with the ACMDs, add:
ACMD(do_scan);
--- and in the commands list:
{ "scan" , POS_STANDING, do_scan , 0, 0 },
You'll also need to define the skill like normal (on our MUD thieves can
scan further)
Enjoy, and happy coding,
Havoc of Dagmarck (Mark Gerritsen)
+------------------------------------------------------------+
| Ensure that you have read the CircleMUD Mailing List FAQ: |
| http://democracy.queensu.ca/~fletcher/Circle/list-faq.html |
+------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/15/00 PST