--- deliantra/server/socket/item.C 2007/09/30 20:22:25 1.53 +++ deliantra/server/socket/item.C 2007/11/26 12:54:32 1.57 @@ -1,11 +1,11 @@ /* - * This file is part of Crossfire TRT, the Roguelike Realtime MORPG. + * This file is part of Deliantra, the Roguelike Realtime MMORPG. * - * Copyright (©) 2005,2006,2007 Marc Alexander Lehmann / Robin Redeker / the Crossfire TRT team + * Copyright (©) 2005,2006,2007 Marc Alexander Lehmann / Robin Redeker / the Deliantra team * Copyright (©) 2002,2007 Mark Wedel & Crossfire Development Team * Copyright (©) 1992,2007 Frank Tore Johansen * - * Crossfire TRT is free software: you can redistribute it and/or modify + * Deliantra is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. @@ -18,7 +18,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . * - * The authors can be reached via e-mail to + * The authors can be reached via e-mail to */ /** @@ -802,7 +802,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 +823,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))); } /** @@ -843,6 +843,9 @@ dynbuf_text buf; object *ob = pl->ob; + if (!pl->observe->map) + return; + mapxy pos (pl->observe); pos.move (dx, dy); @@ -924,17 +927,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) @@ -961,6 +973,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); + } }