--- deliantra/server/common/loader.C 2007/08/01 20:07:06 1.98 +++ deliantra/server/common/loader.C 2007/08/25 22:19:26 1.99 @@ -603,6 +603,24 @@ LOG (llevError, "%s uses unknown other_arch '%s'.\n", debug_desc (), f.get_str ()); break; + case KW_owner: + if (const char *s = f.get_str ()) + { + unsigned int version; + unsigned long long seq; + char name[256]; + + if (3 == sscanf (s, "<%d.%llx>/%256s", &version, &seq, name) && version == 1) + { + UUID uuid = seq; + player *pl = player::find (name); + + if (pl && pl->ob->uuid == uuid) + owner = pl->ob; + } + } + break; + case KW_animation: { CLEAR_FLAG (this, FLAG_ANIMATE); @@ -1271,8 +1289,16 @@ f.put (KW_uuid, (const char *)uids); } -#define CMP_OUT(v) if (op->v != tmp->v) f.put (KW_ ## v, op->v) -#define CMP_OUT2(k,v) if (op->v != tmp->v) f.put (KW_ ## k, op->v) +#define CMP_OUT(v) if (expect_false (op->v != tmp->v)) f.put (KW_ ## v, op->v) +#define CMP_OUT2(k,v) if (expect_false (op->v != tmp->v)) f.put (KW_ ## k, op->v) + + if (object *pl = op->owner) + if (pl->contr) + { + char owner[256]; + snprintf (owner, sizeof (owner), "<1.%llx>/%s", (unsigned long long)pl->uuid.seq, &pl->name); + f.put (KW_owner, (const char *)owner); + } CMP_OUT (name); CMP_OUT (name_pl); @@ -1339,7 +1365,7 @@ CMP_OUT (attacktype); for (i = 0; i < NROFATTACKS; i++) - if (op->resist[i] != tmp->resist[i]) + if (expect_false (op->resist[i] != tmp->resist[i])) f.put (resist_save[i], op->resist[i]); CMP_OUT (path_attuned); @@ -1391,12 +1417,12 @@ if (op->flag != tmp->flag) for (i = 0; i <= NUM_FLAGS; i++) - if (flag_names [i] && op->flag [i] != tmp->flag [i]) + if (expect_false (flag_names [i] && op->flag [i] != tmp->flag [i])) f.put (flag_names [i], op->flag [i] ? "1" : "0"); // save body locations for (i = 0; i < NUM_BODY_LOCATIONS; i++) - if (op->slot[i].info != tmp->slot[i].info) + if (expect_false (op->slot[i].info != tmp->slot[i].info)) f.put (body_locations[i].save_name, op->slot[i].info); } @@ -1408,12 +1434,6 @@ bool object::write (object_freezer &f) { - /* Even if the object does have an owner, it would seem that we should - * still save it. - */ - if (owner) - return true; - archetype *at = arch ? (archetype *)arch : empty_archetype; f.put (KW_arch, at->archname);