diff --git a/Source/inv.cpp b/Source/inv.cpp index 246891c3a..258d0b062 100644 --- a/Source/inv.cpp +++ b/Source/inv.cpp @@ -1749,15 +1749,18 @@ int InvPutItem(const Player &player, Point position, const Item &item) if (!itemTile) return -1; + Point position = *itemTile; + int ii = AllocateItem(); - dItem[itemTile->x][itemTile->y] = ii + 1; - Items[ii] = item; - Items[ii].position = *itemTile; - RespawnItem(Items[ii], true); + dItem[position.x][position.y] = ii + 1; + auto &item_ = Items[ii]; + item_ = item; + item_.position = position; + RespawnItem(item_, true); - if (CornerStone.isAvailable() && *itemTile == CornerStone.position) { - CornerStone.item = Items[ii]; + if (CornerStone.isAvailable() && position == CornerStone.position) { + CornerStone.item = item_; InitQTextMsg(TEXT_CORNSTN); Quests[Q_CORNSTN]._qlog = false; Quests[Q_CORNSTN]._qactive = QUEST_DONE; @@ -1771,10 +1774,7 @@ int SyncDropItem(Point position, _item_indexes idx, uint16_t icreateinfo, int is if (ActiveItemCount >= MAXITEMS) return -1; - int ii = AllocateItem(); - auto &item = Items[ii]; - - dItem[position.x][position.y] = ii + 1; + Item item; RecreateItem(*MyPlayer, item, idx, icreateinfo, iseed, ivalue, (ibuff & CF_HELLFIRE) != 0); if (id != 0) @@ -1790,15 +1790,22 @@ int SyncDropItem(Point position, _item_indexes idx, uint16_t icreateinfo, int is item._iMinDex = minDex; item._iAC = ac; item.dwBuff = ibuff; - item.position = position; - RespawnItem(item, true); + + int ii = AllocateItem(); + + dItem[position.x][position.y] = ii + 1; + auto &item_ = Items[ii]; + item_ = item; + item_.position = position; + RespawnItem(item_, true); if (CornerStone.isAvailable() && position == CornerStone.position) { - CornerStone.item = item; + CornerStone.item = item_; InitQTextMsg(TEXT_CORNSTN); Quests[Q_CORNSTN]._qlog = false; Quests[Q_CORNSTN]._qactive = QUEST_DONE; } + return ii; } @@ -1807,20 +1814,24 @@ int SyncDropEar(Point position, uint16_t icreateinfo, uint32_t iseed, uint8_t cu if (ActiveItemCount >= MAXITEMS) return -1; + Item item; + RecreateEar(item, icreateinfo, iseed, cursval, heroname); + int ii = AllocateItem(); - auto &item = Items[ii]; dItem[position.x][position.y] = ii + 1; - RecreateEar(item, icreateinfo, iseed, cursval, heroname); - item.position = position; - RespawnItem(item, true); + auto &item_ = Items[ii]; + item_ = item; + item_.position = position; + RespawnItem(item_, true); if (CornerStone.isAvailable() && position == CornerStone.position) { - CornerStone.item = item; + CornerStone.item = item_; InitQTextMsg(TEXT_CORNSTN); Quests[Q_CORNSTN]._qlog = false; Quests[Q_CORNSTN]._qactive = QUEST_DONE; } + return ii; }