On 12/18/97 4:52 PM, Chuck Carson (chuck@DIGMO.ORG) stated: >#0 0x8073e5a in mobile_activity () at mobact.c:95 >Source file is more recent than executable. >95 for (vict = world[ch->in_room].people ; vict && !found; vict = >vict_next) { >(gdb) back >#0 0x8073e5a in mobile_activity () at mobact.c:95 >#1 0x8049e98 in heartbeat (pulse=400) at comm.c:699 >#2 0x8049e12 in game_loop (mother_desc=3) at comm.c:674 >#3 0x804949e in init_game (port=9999) at comm.c:267 >#4 0x8049430 in main (argc=2, argv=0xbffffb84) at comm.c:237 >#5 0x804915e in _start () >(gdb) quit I'm quite familiar with this. The problem is, the mob hit a DT, is therefore immediately extracted, and is sitting in NOWHERE, plus having been erased. Therefore the ch pointer is no longer valid, nor is ch->in_room, which will probably equal something like 16393. (it seems thats what ch->in_room ALWAYS is after it is extracted). My solution, which I did to fix this and other problems (mine was being cased by mobs that self-purged in mobprogs): in every "instance" where it checks if it should do something (move, assist, aggr attack, etc), always do a "continue" if it actually does something. This also makes the mob do only one thing: it will never walk into a room and then pick up an object in one "beat" if it is a wandering scavenger. - Chris Jacobson +------------------------------------------------------------+ | 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/08/00 PST