> if (GET_OBJ_TYPE(j) == ITEM_PORTAL) {
> if (GET_OBJ_TIMER(j) > 0)
> GET_OBJ_TIMER(j)--;
> if (!GET_OBJ_TIMER(j)) {
> act("A glowing portal fades from existance.",
> TRUE, world[j->in_room].people, j, 0, TO_ROOM);
> act("A glowing portal fades from existance.",
> TRUE, world[j->in_room].people, j, 0, TO_CHAR);
> extract_obj(j);
you're crashing on the second act..it is totally superfluous (there isn't
any char not covered by TO_ROOM, and we sure don't want to act to the
object (not very good listeners)), and actually both calls are quite
wrong..just remove the second and change the first to:
act("A glowing portal fades from existance.", TRUE,0, j, 0, TO_ROOM);
here's the comm.c code that's relevant..with an explanation..
/* ASSUMPTION: at this point we know type must be TO_NOTVICT or TO_ROOM */
if (ch && ch->in_room != NOWHERE) /* if a char was provided */
to = world[ch->in_room].people;
else if (obj && obj->in_room != NOWHERE) /* if an obj was provided */
to = world[obj->in_room].people;
else {
log_info("SYSERR: no valid target to act()!");
return;
}
// we're just giving it an object..so it makes 'to' = to the people in the
// same room as the object..
// there's no need to check the validity of world[j].people before the
// act call because that's done in the loop below that sends it to
// everyone in the room..
for (; to; to = to->next_in_room)
if (SENDOK(to) && !(hide_invisible && ch && !CAN_SEE(to, ch)) &&
(to != ch) && (type == TO_ROOM || (to != vict_obj)))
perform_act(str, ch, obj, vict_obj, to);
siv
+------------------------------------------------------------+
| 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