[CODE]Game crashes when any mob is killed

From: Aaron Throckmorton (throck@nfinity.com)
Date: 12/15/98


I am using Circle3.0bpl14, with dgscripts pl5a and olc+ 2.0
Whenever a char is fighting a mob, and the mob gets killed, the game
crashes in this function:

void hitprcnt_mtrigger(struct char_data *ch)
{
  trig_data *t;
  char buf[MAX_INPUT_LENGTH];

  if (!SCRIPT_CHECK(ch, MTRIG_HITPRCNT) || !FIGHTING(ch) ||
      AFF_FLAGGED(ch, AFF_CHARM))               <<<<< DEBUGGER POINTS TO HERE!!!!!
    return;

  for (t = TRIGGERS(SCRIPT(ch)); t; t = t->next) {
    if (TRIGGER_CHECK(t, MTRIG_HITPRCNT) && GET_MAX_HIT(ch) &&
        (((GET_HIT(ch) * 100) / GET_MAX_HIT(ch)) <= GET_TRIG_NARG(t))) {

      ADD_UID_VAR(buf, t, FIGHTING(ch), "actor", 0)
      script_driver(ch, t, MOB_TRIGGER, TRIG_NEW);
      break;
    }
  }
}

This function is called at the end of
void hit(struct char_data * ch, struct char_data * victim, int type)
{
  struct obj_data *wielded = GET_EQ(ch, WEAR_WIELD);
  int w_type, victim_ac, calc_thaco, dam, diceroll;

  /* check if the character has a fight trigger */
  fight_mtrigger(ch);

  /* Do some sanity checking, in case someone flees, etc. */
  if (ch->in_room != victim->in_room) {
<snip>
.
<snip>
    } else
      damage(ch, victim, dam, w_type);
  }

  /* check if the victim has a hitprcnt trigger */
  hitprcnt_mtrigger(victim);    <<<<< CALLED HERE
}

in fight.c.  Just before this function is called, the damage() function
is called.
If the victim dies, the damage() function calls the die() function.
The die() function calls raw_kill(), and the raw_kill() calls the
extract_char() function.
The extract_char() function removes all traces of the victim from
memory, then the hit() function calls hitprcnt_mtrigger(), passing it
the victim info, which no longer exists, causing the game to crash.

I tried putting a if (victim) statement just before the function call,
but that didn't seem to work.  Anyone got any ideas?

Thanks in advance.
Throck


     +------------------------------------------------------------+
     | Ensure that you have read the CircleMUD Mailing List FAQ:  |
     |  http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html  |
     +------------------------------------------------------------+



This archive was generated by hypermail 2b30 : 12/15/00 PST