diff --git a/Source/inv.cpp b/Source/inv.cpp index 258d0b062..9c3e9dd41 100644 --- a/Source/inv.cpp +++ b/Source/inv.cpp @@ -1743,14 +1743,8 @@ bool CanPut(Point position) return true; } -int InvPutItem(const Player &player, Point position, const Item &item) +int PlaceItemInWorld(const Item &item, WorldTilePosition position) { - std::optional itemTile = FindAdjacentPositionForItem(player.position.tile, GetDirection(player.position.tile, position)); - if (!itemTile) - return -1; - - Point position = *itemTile; - int ii = AllocateItem(); dItem[position.x][position.y] = ii + 1; @@ -1769,6 +1763,15 @@ int InvPutItem(const Player &player, Point position, const Item &item) return ii; } +int InvPutItem(const Player &player, Point position, const Item &item) +{ + std::optional itemTile = FindAdjacentPositionForItem(player.position.tile, GetDirection(player.position.tile, position)); + if (!itemTile) + return -1; + + return PlaceItemInWorld(item, *itemTile); +} + int SyncDropItem(Point position, _item_indexes idx, uint16_t icreateinfo, int iseed, int id, int dur, int mdur, int ch, int mch, int ivalue, uint32_t ibuff, int toHit, int maxDam, int minStr, int minMag, int minDex, int ac) { if (ActiveItemCount >= MAXITEMS) @@ -1791,22 +1794,7 @@ int SyncDropItem(Point position, _item_indexes idx, uint16_t icreateinfo, int is item._iAC = ac; item.dwBuff = ibuff; - 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_; - InitQTextMsg(TEXT_CORNSTN); - Quests[Q_CORNSTN]._qlog = false; - Quests[Q_CORNSTN]._qactive = QUEST_DONE; - } - - return ii; + return PlaceItemInWorld(item, position); } int SyncDropEar(Point position, uint16_t icreateinfo, uint32_t iseed, uint8_t cursval, string_view heroname) @@ -1817,22 +1805,7 @@ int SyncDropEar(Point position, uint16_t icreateinfo, uint32_t iseed, uint8_t cu Item item; RecreateEar(item, icreateinfo, iseed, cursval, heroname); - 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_; - InitQTextMsg(TEXT_CORNSTN); - Quests[Q_CORNSTN]._qlog = false; - Quests[Q_CORNSTN]._qactive = QUEST_DONE; - } - - return ii; + return PlaceItemInWorld(item, position); } int8_t CheckInvHLight()