--- deliantra/server/server/shop.C 2008/04/22 02:46:18 1.48 +++ deliantra/server/server/shop.C 2008/04/22 07:01:47 1.49 @@ -642,18 +642,7 @@ for (i = 0; i < NUM_COINS; i++) { if (coin_objs[i]->nrof) - { - object *tmp = insert_ob_in_ob (coin_objs[i], pouch); - - esrv_send_item (pl, tmp); - esrv_send_item (pl, pouch); - - if (pl != pouch) - esrv_update_item (UPD_WEIGHT, pl, pouch); - - if (pl->type != PLAYER) - esrv_send_item (pl, pl); - } + insert_ob_in_ob (coin_objs [i], pouch); else coin_objs[i]->destroy (); } @@ -734,23 +723,12 @@ } else { - object *tmp; - CLEAR_FLAG (op, FLAG_UNPAID); CLEAR_FLAG (op, FLAG_PLAYER_SOLD); new_draw_info_format (NDI_UNIQUE, 0, op, "You paid %s for %s.", buf, query_name (op)); - tmp = merge_ob (op, NULL); - - if (pl->type == PLAYER) - { - if (tmp) - { /* it was merged */ - esrv_del_item (pl->contr, op->count); - op = tmp; - } - esrv_send_item (pl, op); - } + if (!merge_ob (op, op->env->inv)) + esrv_update_item (UPD_FLAGS, pl, op); goto next_item; } @@ -802,26 +780,20 @@ if (pouch->weight_limit && (pouch->weight_limit - pouch->carrying) / w < n) n = (pouch->weight_limit - pouch->carrying) / w; - tmp = arch_to_object (at); + object *tmp = arch_to_object (at); tmp->nrof = n; amount -= tmp->nrof * tmp->value; - tmp = insert_ob_in_ob (tmp, pouch); - esrv_send_item (pl, tmp); - esrv_send_item (pl, pouch); - esrv_update_item (UPD_WEIGHT, pl, pouch); - esrv_send_item (pl, pl); + pouch->insert (tmp); } } } if (amount / at->value > 0) { - tmp = arch_to_object (at); + object *tmp = arch_to_object (at); tmp->nrof = amount / tmp->value; amount -= tmp->nrof * tmp->value; - tmp = insert_ob_in_ob (tmp, pl); - esrv_send_item (pl, tmp); - esrv_send_item (pl, pl); + pl->insert (tmp); } } } @@ -843,9 +815,7 @@ { object *tmp = arch_to_object (at); tmp->nrof = amount; - tmp = insert_ob_in_ob (tmp, pl); - esrv_send_item (pl, tmp); - esrv_send_item (pl, pl); + insert_ob_in_ob (tmp, pl); } return 1;