> > Ok, this may seem a little strange, but I'm trying to write a function that > (among other things) removes and deletes all of a player's equipment and > inventory. I looked in handler.c and act.obj.c, and have come up with the > following code: > > /* Remove & delete all objects and equipment */ > /* for (i=0; i < NUM_WEARS; i++) > if (GET_EQ(ch, i)) extract_obj(unequip_char(ch, i)); > > while(ch->carrying) { > obj = obj->next; > extract_obj(obj); > } */ > while(ch->carrying) { obj = obj->next; etxract_obj(obj); } You are moving to the next object before it's extracted. Um also... I just noticed this. What is obj? It was never set to anything. Sure the while loop will work, but obj = nothing, and obj->next is very very bad. To make this work it should be: while(ch->carrying) { obj = ch->carrying; extract_obj(obj); } That's a bit ugly though. More code but looks right is: for(obj = ch->carrying; obj; obj = tobj) { tobj = obj->next; obj_from_char(obj); extract_obj(obj); } That's the nicest way to do it.
This archive was generated by hypermail 2b30 : 12/18/00 PST