--- deliantra/server/socket/item.C 2007/11/08 19:43:29 1.55 +++ deliantra/server/socket/item.C 2008/04/22 02:46:18 1.59 @@ -1,7 +1,7 @@ /* * This file is part of Deliantra, the Roguelike Realtime MMORPG. * - * Copyright (©) 2005,2006,2007 Marc Alexander Lehmann / Robin Redeker / the Deliantra team + * Copyright (©) 2005,2006,2007,2008 Marc Alexander Lehmann / Robin Redeker / the Deliantra team * Copyright (©) 2002,2007 Mark Wedel & Crossfire Development Team * Copyright (©) 1992,2007 Frank Tore Johansen * @@ -348,7 +348,7 @@ if (QUERY_FLAG (ob, FLAG_REMOVED) || !ob->map - || ob->map->in_memory != MAP_IN_MEMORY + || ob->map->in_memory != MAP_ACTIVE || out_of_map (ob->map, ob->x, ob->y)) return; @@ -667,8 +667,7 @@ } /** - * Tells the client to delete an item. Uses the item - * command with a -1 location. + * Tells the client to delete an item. */ void esrv_del_item (player *pl, int tag) @@ -802,7 +801,7 @@ if (!op) { - new_draw_info (NDI_UNIQUE, 0, pl->ob, "Could not find object to lock/unlock"); + pl->failmsg ("Could not find object to lock/unlock"); return; } @@ -823,12 +822,12 @@ if (!op) { - new_draw_info (NDI_UNIQUE, 0, pl->ob, "Could not find object to mark"); + pl->failmsg ("Could not find object to mark"); return; } pl->mark = op; - new_draw_info_format (NDI_UNIQUE, 0, pl->ob, "Marked item %s", query_name (op)); + pl->ob->statusmsg (format ("Marked item %s", query_name (op))); } /** @@ -927,17 +926,26 @@ { object *current, *next; + int cnt = MAX_ITEM_PER_DROP; + for (current = op->inv; current != NULL; current = next) { next = current->below; drop_object (pl, current, 0); + + if (--cnt <= 0) break; } + if (cnt <= 0) + op->failmsg ("Only dropped some items, can't drop that many items at once."); + esrv_update_item (UPD_WEIGHT, pl, op); } else drop_object (pl, op, nrof); + update_after_inventory_change (pl); + return; } else if (to == pl->count) @@ -964,6 +972,9 @@ * an make sure env is in fact a container for that matter. */ if (env->type == CONTAINER && can_pick (pl, op) && sack_can_hold (pl, env, op, nrof)) - put_object_in_sack (pl, env, op, nrof); + { + put_object_in_sack (pl, env, op, nrof); + update_after_inventory_change (pl); + } }