--- deliantra/server/common/object.C 2006/12/19 13:41:45 1.71 +++ deliantra/server/common/object.C 2006/12/20 09:14:21 1.74 @@ -354,21 +354,6 @@ } /* - * Eneq(@csd.uu.se): Since we can have items buried in a character we need - * a better check. We basically keeping traversing up until we can't - * or find a player. - */ - -object * -is_player_inv (object *op) -{ - for (; op != NULL && op->type != PLAYER; op = op->env) - if (op->env == op) - op->env = NULL; - return op; -} - -/* * Used by: Crossedit: dump. Server DM commands: dumpbelow, dump. * Some error messages. * The result of the dump is stored in the static global errmsg array. @@ -1057,7 +1042,7 @@ * made to players inventory. If set, avoiding the call * to save cpu time. */ - if ((otmp = is_player_inv (env)) != NULL && otmp->contr && !QUERY_FLAG (otmp, FLAG_NO_FIX_PLAYER)) + if ((otmp = in_player ()) && otmp->contr && !QUERY_FLAG (otmp, FLAG_NO_FIX_PLAYER)) fix_player (otmp); if (above != NULL) @@ -1146,7 +1131,7 @@ && ((move_type & tmp->move_off) && (move_type & ~tmp->move_off & ~tmp->move_block) == 0)) { - move_apply (tmp, this, 0, false); + move_apply (tmp, this, 0); if (destroyed ()) LOG (llevError, "BUG: remove_ob(): name %s, destroyed leaving object\n", tmp->debug_desc ()); @@ -1616,12 +1601,12 @@ if (QUERY_FLAG (op, FLAG_REMOVED)) op->nrof -= i; - else if (op->env != NULL) + else if (op->env) { /* is this object in the players inventory, or sub container * therein? */ - tmp = is_player_inv (op->env); + tmp = op->in_player (); /* nope. Is this a container the player has opened? * If so, set tmp to that player. * IMO, searching through all the players will mostly @@ -1632,11 +1617,10 @@ { for (pl = first_player; pl; pl = pl->next) if (pl->ob->container == op->env) - break; - if (pl) - tmp = pl->ob; - else - tmp = NULL; + { + tmp = pl->ob; + break; + } } if (i < op->nrof) @@ -1644,18 +1628,14 @@ sub_weight (op->env, op->weight * i); op->nrof -= i; if (tmp) - { - esrv_send_item (tmp, op); - } + esrv_send_item (tmp, op); } else { op->remove (); op->nrof = 0; if (tmp) - { - esrv_del_item (tmp->contr, op->count); - } + esrv_del_item (tmp->contr, op->count); } } else @@ -1671,7 +1651,7 @@ } /* Since we just removed op, op->above is null */ - for (tmp = above; tmp != NULL; tmp = tmp->above) + for (tmp = above; tmp; tmp = tmp->above) if (tmp->type == PLAYER) { if (op->nrof) @@ -1686,7 +1666,7 @@ else { op->destroy (); - return NULL; + return 0; } } @@ -1784,15 +1764,15 @@ else add_weight (this, (op->weight + op->carrying)); - otmp = is_player_inv (this); + otmp = this->in_player (); if (otmp && otmp->contr) if (!QUERY_FLAG (otmp, FLAG_NO_FIX_PLAYER)) fix_player (otmp); - op->map = NULL; + op->map = 0; op->env = this; - op->above = NULL; - op->below = NULL; + op->above = 0; + op->below = 0; op->x = 0, op->y = 0; /* reset the light list and los of the players on the map */ @@ -1920,7 +1900,7 @@ if ((!op->move_type && tmp->move_on & MOVE_WALK) || ((op->move_type & tmp->move_on) && (op->move_type & ~tmp->move_on & ~tmp->move_block) == 0)) { - move_apply (tmp, op, originator, true); + move_apply (tmp, op, originator); if (op->destroyed ()) return 1; @@ -2139,11 +2119,13 @@ * to only the spaces immediately surrounding the target area, and * won't look 2 spaces south of the target space. */ - else if ((flag & AB_NO_PASS) && maxfree[i] < stop) + else if ((flag & P_NO_PASS) && maxfree[i] < stop) stop = maxfree[i]; } + if (!index) return -1; + return altern[RANDOM () % index]; }