Hello, I recently rebegun working on a bit of code I started way back. It's basically a mimic of the Remove Obj from Room code, but allows you to remove a mobile from the room. (this is in zedit). The zedit section was easy enough. The problem I'm having is in db.c/handler.c Believe it or not, this code does the job I want it to do, it's just that I've had to chop and change stuff, and I'm hoping I aren't making it hugely memory inefficient. The first function I made was a mimic of get_obj_in_list_num.: /* Search a given list for an mobile number, and return a ptr to that mob */ struct char_data *get_mob_in_list_num(int num, struct char_data * list) { struct char_data *i; for (i = character_list; i; i = i->next) if (GET_MOB_RNUM(i) == num) return i; return NULL; } which is called within db.c as: case 'B': /* rem mob from room */ if ((mob = get_mob_in_list_num(ZCMD.arg2, world[ZCMD.arg1].contents)) != NULL) { char_from_room(mob); extract_mob(mob); } last_cmd = 1; break; Now, once this was compiled, I attempted to boot up my mud. Sure enough, it pointed me to the fact that I could do an "extract_char(mob)" in the above section. (hence the weird "extract_mob()" function). I took that line out (extract_char(mob)) and rebooted. The mud booted, and it actually was able to remove the mobile from the room. However, I assume the mob was still lurking in memory somewhere. So I decided to write my own "extract_mob()" code...: /* Extract an mobile from the world */ void extract_mob(struct char_data * mob) { struct char_data *temp; // char_from_room(mob); REMOVE_FROM_LIST(mob, character_list, next); if (GET_MOB_RNUM(mob) >= 0) (mob_index[GET_MOB_RNUM(mob)].number)--; if (SCRIPT(mob)) extract_script(SCRIPT(mob)); free_char(mob); } The char_from_room(mob) is commented out because it too was directing me to the extracting from nowhere thing. Besides, it gets called within the db.c code. What I need to know is, does this look ok and should it (is it?) working as intended? On the mud side, it's doing it's job, but I think I've overlooked something...anyone? I also tried using the get_char_num function, but I don't know if I can change this: if ((mob = get_mob_in_list_num(ZCMD.arg2, world[ZCMD.arg1].contents)) != NULL) { to this: if ((mob = get_char_num(ZCMD.arg2)) != NULL) { Any help appreciated. --------------------------------------------------------------------- Julian Buckley, 3rd Year Computer Systems Engineering Dept. Computer Science and Electrical Engineering, Univ. of Qld E-Mail: s348266@student.uq.edu.au Web Page: http://student.uq.edu.au/~s348266/index.html ------------------------------------------------------------------- +------------------------------------------------------------+ | 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