--- deliantra/server/socket/item.C 2010/04/11 00:34:07 1.92 +++ deliantra/server/socket/item.C 2011/04/23 04:56:58 1.96 @@ -1,7 +1,7 @@ /* * This file is part of Deliantra, the Roguelike Realtime MMORPG. * - * Copyright (©) 2005,2006,2007,2008,2009,2010 Marc Alexander Lehmann / Robin Redeker / the Deliantra team + * Copyright (©) 2005,2006,2007,2008,2009,2010,2011 Marc Alexander Lehmann / Robin Redeker / the Deliantra team * Copyright (©) 2002 Mark Wedel & Crossfire Development Team * Copyright (©) 1992 Frank Tore Johansen * @@ -195,7 +195,17 @@ return; } - pl->ns->update_look = 0; + if (pl->ns->need_delinv0) + { + pl->ns->need_delinv0 = 0; + pl->ns->send_packet ("delinv 0"); + } + + if (pl->run_on) + return; + + pl->ns->update_look = 0; + pl->ns->need_delinv0 = 1; if (ob->flag [FLAG_REMOVED] || !ob->map @@ -203,8 +213,6 @@ || out_of_map (ob->map, ob->x, ob->y)) return; - pl->ns->send_packet ("delinv 0"); - packet sl; sl.printf ("item%d ", pl->ns->itemcmd); @@ -621,15 +629,9 @@ return; } - object *op = esrv_get_ob_from_count (pl->ob, tag); - - if (!op) - { - LOG (llevDebug, "Player '%s' tried to apply the unknown object (%d)\n", &pl->ob->name, tag); - return; - } - - pl->ob->apply (op, AP_TOGGLE); + // the object might be legally gone already + if (object *op = esrv_get_ob_from_count (pl->ob, tag)) + pl->ob->apply (op, AP_TOGGLE); } /** Client wants to lock some object. Lets do so. */