--- deliantra/server/common/map.C 2007/01/01 12:28:45 1.64 +++ deliantra/server/common/map.C 2007/01/01 21:19:51 1.65 @@ -489,6 +489,8 @@ bool maptile::save_objects (object_freezer &freezer, int flags) { + static int cede_count = 0; + if (flags & IO_HEADER) save_header (freezer); @@ -497,9 +499,18 @@ for (int i = 0; i < size (); ++i) { + if (cede_count >= 500) + { + cede_count = 0; + coroapi::cede (); + } + int unique = 0; for (object *op = spaces [i].bot; op; op = op->above) { + // count per-object, but cede only when modification-safe + cede_count++; + if (op->flag [FLAG_UNIQUE] && op->flag [FLAG_IS_FLOOR]) unique = 1;