>Check the archives :) This came up a long time ago, I did mailed a patch for >when the room was placed back into the world table the pointers to people >were saved off and placed into the new room. >Chris Thanks for the help chris. Took a little searching to find it, but here it is for anyone using Oasis 2.0. http://post.queensu.ca/cgi-bin/listserv/wa?A2=ind9907&L=circle&P=R1769 and, another fix that zemial found that was crashing us every time a new room is made, the problem was first pointed out a while ago in this message: http://post.queensu.ca/cgi-bin/listserv/wa?A2=ind0005&L=circle&D=0&P=38049 but no solution was given. So this is what The Builder's Academy head coder Zemial did to fix it. This applies to those using dg scripts only. In genwld.c In function add_room: if ((i = real_room(room->number)) != NOWHERE) { tch = world[i].people; tobj = world[i].contents; copy_room(&world[i], room); world[i].people = tch; world[i].contents = tobj; add_to_save_list(zone_table[room->zone].number, SL_WLD); log("GenOLC: add_room: Updated existing room #%d.", room->number); -- assign_triggers(&world[i], WLD_TRIGGER); return i; } /* * Update world exits. ++ & Triggers */ for (i = top_of_world; i >= 0; i--) ++ { ++ // EXITS for (j = 0; j < NUM_OF_DIRS; j++) if (W_EXIT(i, j)) W_EXIT(i, j)->to_room += (W_EXIT(i, j)->to_room >= found); ++ // TRIGGERS ++ if(SCRIPT(&world[i])) { ++ extract_script(SCRIPT(&world[i])); ++ SCRIPT(&world[i]) = NULL; ++ } ++ assign_triggers(&world[i], WLD_TRIGGER); ++ } add_to_save_list(zone_table[room->zone].number, SL_WLD); If the triggers somehow should mess up, catch null reference in dg_scripts.c In function: find_replacement /* X.global() will have a NULL trig */ if (trig) for (vd = GET_TRIG_VARS(trig); vd; vd = vd->next) if (!str_cmp(vd->name, var)) break; ++ /* CRASH on new room safeguard */ ++ if (sc == NULL) { ++ mudlog("SYSERR: OLC: Error referencing script - NULL POINTER detected.", CMP, LVL_BUILDER, TRUE); ++ return; ++ } if (!vd) for (vd = sc->global_vars; vd; vd = vd->next) if (!str_cmp(vd->name, var) && (vd->context==0 || vd->context==sc->context)) break; Hope this helps some people. Second hand post by, Rumble The Builder's Academy cruelworld.dune.net Port: 9091 __________________________________________________ Do You Yahoo!? Talk to your friends online with Yahoo! Messenger. http://im.yahoo.com +------------------------------------------------------------+ | 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 : 04/11/01 PDT