--- deliantra/server/common/object.C 2008/12/28 03:58:36 1.274 +++ deliantra/server/common/object.C 2009/01/01 11:41:17 1.277 @@ -1496,15 +1496,15 @@ * op is the object to insert it under: supplies x and the map. */ void -replace_insert_ob_in_map (const char *arch_string, object *op) +replace_insert_ob_in_map (shstr_tmp archname, object *op) { /* first search for itself and remove any old instances */ for (object *tmp = op->ms ().bot; tmp; tmp = tmp->above) - if (!strcmp (tmp->arch->archname, arch_string)) /* same archetype */ + if (tmp->arch->archname == archname) /* same archetype */ tmp->destroy (); - object *tmp = arch_to_object (archetype::find (arch_string)); + object *tmp = arch_to_object (archetype::find (archname)); tmp->x = op->x; tmp->y = op->y; @@ -2059,13 +2059,8 @@ int find_dir (maptile *m, int x, int y, object *exclude) { - int i, max = SIZEOFFREE, mflags; - - sint16 nx, ny; - object *tmp; - maptile *mp; - - MoveType blocked, move_type; + int max = SIZEOFFREE, mflags; + MoveType move_type; if (exclude && exclude->head_ () != exclude) { @@ -2078,33 +2073,25 @@ move_type = MOVE_ALL; } - for (i = 1; i < max; i++) + for (int i = 1; i < max; i++) { - mp = m; - nx = x + freearr_x[i]; - ny = y + freearr_y[i]; - - mflags = get_map_flags (m, &mp, nx, ny, &nx, &ny); + mapxy pos (m, x, y); + pos.move (i); - if (mflags & P_OUT_OF_MAP) + if (!pos.normalise ()) max = maxfree[i]; else { - mapspace &ms = mp->at (nx, ny); - - blocked = ms.move_block; + mapspace &ms = *pos; - if ((move_type & blocked) == move_type) - max = maxfree[i]; - else if (mflags & P_IS_ALIVE) + if ((move_type & ms.move_block) == move_type) + max = maxfree [i]; + else if (ms.flags () & P_IS_ALIVE) { - for (tmp = ms.bot; tmp; tmp = tmp->above) + for (object *tmp = ms.bot; tmp; tmp = tmp->above) if ((tmp->flag [FLAG_MONSTER] || tmp->is_player ()) && (tmp != exclude || (tmp->head_ () != tmp && tmp->head_ () != exclude))) - break; - - if (tmp) - return freedir[i]; + return freedir [i]; } } } @@ -2337,18 +2324,18 @@ return 0; } -const shstr & -object::kv_get (const shstr &key) const +shstr_tmp +object::kv_get (shstr_tmp key) const { for (key_value *kv = key_values; kv; kv = kv->next) if (kv->key == key) return kv->value; - return shstr_null; + return shstr (); } void -object::kv_set (const shstr &key, const shstr &value) +object::kv_set (shstr_tmp key, shstr_tmp value) { for (key_value *kv = key_values; kv; kv = kv->next) if (kv->key == key) @@ -2367,7 +2354,7 @@ } void -object::kv_del (const shstr &key) +object::kv_del (shstr_tmp key) { for (key_value **kvp = &key_values; *kvp; kvp = &(*kvp)->next) if ((*kvp)->key == key) @@ -2546,7 +2533,7 @@ } object * -object::force_find (const shstr name) +object::force_find (shstr_tmp name) { /* cycle through his inventory to look for the MARK we want to * place @@ -2559,7 +2546,7 @@ } object * -object::force_add (const shstr name, int duration) +object::force_add (shstr_tmp name, int duration) { if (object *force = force_find (name)) force->destroy ();