Thus spake Ryan Gasper or Steven Arnold <dalamar@CYBERCOM.NET>:
> Could someone please tell me why the below code is not working? I have
>gone over it and put in some log checks, but cannot find out why its not
>working. I believe that after a mob vnum is equal to masters[i].master,
>it does not kick out of the loop correctly and mob is changed.
>
> for (mob = world[ch->in_room].people; mob || !found; mob = mob->next_in_room
>)
> for (i = 0; masters[i].master != -1; i++) {
> sprintf(buf, "MOB Found, VNUM = %d", GET_MOB_VNUM(mob));
> log(buf);
> if (GET_MOB_VNUM(mob) == masters[i].master)
> {
> found = TRUE;
> log("Second Step Complete");
> break;
> }
> }
>log("Beginning of Step 3");
> if (!mob) {
> send_to_char("There is no one here to train you.\r\n", ch);
> return;
> }
>
>I get the message "There is no one here to train you" even though above I
>get Second Step complete meaning mob cannot be !mob. Also, if I add in a
>Check for the mobs vnum right after Beginning of step 3 log, it crashes
>with a seg fault. Anyone have any ideas?
In your outermost loop, the loop's conditional should be mob && !found,
not mob || !found. As it is, the value of found is only checked if mob
is NULL. As a result, presumably the master is always found, so it loops
until mob is NULL. Therefore any checks of the mob's vnum after the loop
will produce a segfault, and !mob will always be true. Of course, if the
master isn't found, you get an infinite loop. Yay.
--
Kevin Doherty, kdoherty@jurai.net
"Multiple exclamation marks are a sure sign of a diseased mind."
-- Rincewind (from _Eric_)
+------------------------------------------------------------+
| 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