|
@@ -1302,14 +1302,11 @@ int map_clearflooritem_timer(int tid, unsigned int tick, int id, intptr_t data)
|
|
|
{
|
|
|
struct flooritem_data* fitem = (struct flooritem_data*)idb_get(id_db, id);
|
|
|
|
|
|
- if (fitem == NULL || fitem->bl.type != BL_ITEM || (!data && fitem->cleartimer != tid))
|
|
|
- {
|
|
|
+ if (fitem == NULL || fitem->bl.type != BL_ITEM || (fitem->cleartimer != tid)) {
|
|
|
ShowError("map_clearflooritem_timer : error\n");
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
- if (data)
|
|
|
- delete_timer(fitem->cleartimer,map_clearflooritem_timer);
|
|
|
|
|
|
if (search_petDB_index(fitem->item_data.nameid, PET_EGG) >= 0)
|
|
|
intif_delete_petdata(MakeDWord(fitem->item_data.card[1], fitem->item_data.card[2]));
|
|
@@ -1321,6 +1318,21 @@ int map_clearflooritem_timer(int tid, unsigned int tick, int id, intptr_t data)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+ * clears a single bl item out of the bazooonga.
|
|
|
+ */
|
|
|
+void map_clearflooritem(struct block_list *bl) {
|
|
|
+ struct flooritem_data* fitem = (struct flooritem_data*)bl;
|
|
|
+
|
|
|
+ if( fitem->cleartimer )
|
|
|
+ delete_timer(fitem->cleartimer,map_clearflooritem_timer);
|
|
|
+
|
|
|
+ clif_clearflooritem(fitem, 0);
|
|
|
+ map_deliddb(&fitem->bl);
|
|
|
+ map_delblock(&fitem->bl);
|
|
|
+ map_freeblock(&fitem->bl);
|
|
|
+}
|
|
|
+
|
|
|
/*==========================================
|
|
|
* (m,x,y) locates a random available free cell around the given coordinates
|
|
|
* to place an BL_ITEM object. Scan area is 9x9, returns 1 on success.
|
|
@@ -3550,7 +3562,7 @@ int cleanup_sub(struct block_list *bl, va_list ap)
|
|
|
//There is no need for this, the pet is removed together with the player. [Skotlex]
|
|
|
break;
|
|
|
case BL_ITEM:
|
|
|
- map_clearflooritem(bl->id);
|
|
|
+ map_clearflooritem(bl);
|
|
|
break;
|
|
|
case BL_SKILL:
|
|
|
skill_delunit((struct skill_unit *) bl);
|