Ok, this is my case for open in do_doorcmd in act.movement.c
now, the problem is that the code which removes the entry in spec_door_list
seems to crash the mud. even when i used the code which Dak suggested,
which i agree is better. I'm really at a loss here. Any help is
appreciated.
The goal is to make it so that if a door is affected by EX_FIRETRAP and if
the person opening the door is not the caster of the spell (*owner) then do
the
damage, and remove the affect. Removing the affect also entails removing
the
spec_door entry for that door in the spec_door_list linked list.
Hope this clairifys things a bit, and thanks in advance.
-Veritus
case SCMD_OPEN:
if(obj) {
if(IS_OBJ_STAT(obj, ITEM_FIRETRAP) && !is_firetrap_owner(obj, door,
ch)) {
REMOVE_BIT(obj->obj_flags.extra_flags, ITEM_FIRETRAP);
damage(ch, ch, dice(2, 600), SKILL_EXPLOSIVE, DAMAGE_HEAT);
}
}
else {
if(IS_SET(EXITN(ch->in_room, door)->exit_info, EX_FIRETRAP) &&
!is_firetrap_owner(obj, door, ch)) {
send_to_room("A glowing sigil appears in the air, and then bursts
into flames!\r\n", ch->in_room);
damage(ch, ch, dice(2, 600), SKILL_EXPLOSIVE, DAMAGE_HEAT);
REMOVE_BIT(EXITN(ch->in_room, door)->exit_info, EX_FIRETRAP);
for (kPrev = NULL, k = spec_door_list; k; kPrev = k, k = k->next)
if (k->door == EXITN(ch->in_room, door))
break;
if (k) {
if (kPrev) {
kPrev->next = k->next;
} else {
spec_door_list = spec_door_list->next;
}
}
free(k);
if(back) {
send_to_room("You hear a small explosion!\r\n", other_room);
REMOVE_BIT(back->exit_info, EX_FIRETRAP);
for (kPrev = NULL, kk = spec_door_list; kk; kPrev = kk, kk =
kk->next)
if (k->door == EXITN(ch->in_room, door))
break;
if (kk) {
if (kPrev) {
kPrev->next = kk->next;
} else {
spec_door_list = spec_door_list->next;
}
}
free(kk);
}
}
}
+------------------------------------------------------------+
| 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