--- deliantra/server/socket/item.C 2010/04/11 00:34:07 1.92
+++ deliantra/server/socket/item.C 2012/10/29 23:55:57 1.100
@@ -1,24 +1,24 @@
/*
* 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,2012 Marc Alexander Lehmann / Robin Redeker / the Deliantra team
* Copyright (©) 2002 Mark Wedel & Crossfire Development Team
* Copyright (©) 1992 Frank Tore Johansen
- *
+ *
* Deliantra is free software: you can redistribute it and/or modify it under
* the terms of the Affero GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
- *
+ *
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
- *
+ *
* You should have received a copy of the Affero GNU General Public License
* and the GNU General Public License along with this program. If not, see
* .
- *
+ *
* The authors can be reached via e-mail to
*/
@@ -144,7 +144,7 @@
}
else
{
- int len = min (head->custom_name.length (), 127);
+ int len = min (127, head->custom_name.length ());
sl << uint8 (len * 2 + 1)
<< data (head->custom_name, len)
@@ -195,16 +195,24 @@
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
- || ob->map->in_memory != MAP_ACTIVE
+ || ob->map->state != MAP_ACTIVE
|| 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. */