diff --git a/Source/inv.cpp b/Source/inv.cpp index 656a546f2..d703c4599 100644 --- a/Source/inv.cpp +++ b/Source/inv.cpp @@ -1836,14 +1836,14 @@ bool TryInvPut() return CanPut(myPlayer.position.tile); } -int InvPutItem(Player &player, Point position) +int InvPutItem(Player &player, Point position, int 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 (player.plrlevel == 0) { - if (player.HoldItem.IDidx == IDI_RUNEBOMB && OpensHive(position)) { + if (idx == IDI_RUNEBOMB && OpensHive(position)) { OpenHive(); return -1; } - if (player.HoldItem.IDidx == IDI_MAPOFDOOM && OpensGrave(position)) { + if (idx == IDI_MAPOFDOOM && OpensGrave(position)) { OpenCrypt(); return -1; } @@ -1854,22 +1854,7 @@ int InvPutItem(Player &player, Point position) assert(CanPut(position)); - int ii = AllocateItem(); - - dItem[position.x][position.y] = ii + 1; - Items[ii] = player.HoldItem; - Items[ii].position = position; - RespawnItem(Items[ii], true); - - if (currlevel == 21 && position == CornerStone.position) { - CornerStone.item = Items[ii]; - InitQTextMsg(TEXT_CORNSTN); - Quests[Q_CORNSTN]._qlog = false; - Quests[Q_CORNSTN]._qactive = QUEST_DONE; - } - - NewCursor(CURSOR_HAND); - return ii; + return SyncDropItem(position, idx, icreateinfo, iseed, id, dur, mdur, ch, mch, ivalue, ibuff, toHit, maxDam, minStr, minMag, minDex, ac); } int SyncPutItem(Player &player, Point position, int 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) @@ -1916,10 +1901,10 @@ int SyncDropItem(Point position, int idx, uint16_t icreateinfo, int iseed, int i } item.position = position; - RespawnItem(Items[ii], true); + RespawnItem(item, true); if (currlevel == 21 && position == CornerStone.position) { - CornerStone.item = Items[ii]; + CornerStone.item = item; InitQTextMsg(TEXT_CORNSTN); Quests[Q_CORNSTN]._qlog = false; Quests[Q_CORNSTN]._qactive = QUEST_DONE; diff --git a/Source/inv.h b/Source/inv.h index 7c72cfdde..4b6ab916e 100644 --- a/Source/inv.h +++ b/Source/inv.h @@ -201,7 +201,7 @@ int FindGetItem(int32_t iseed, _item_indexes idx, uint16_t ci); void SyncGetItem(Point position, int32_t iseed, _item_indexes idx, uint16_t ci); bool CanPut(Point position); bool TryInvPut(); -int InvPutItem(Player &player, Point position); +int InvPutItem(Player &player, Point position, int 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); int SyncPutItem(Player &player, Point position, int 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); int SyncDropItem(Point position, int 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); int8_t CheckInvHLight(); diff --git a/Source/msg.cpp b/Source/msg.cpp index c941adeb4..423313fc3 100644 --- a/Source/msg.cpp +++ b/Source/msg.cpp @@ -857,7 +857,7 @@ DWORD OnPutItem(const TCmd *pCmd, int pnum) if (currlevel == Players[pnum].plrlevel) { int ii; if (pnum == MyPlayerId) - ii = InvPutItem(Players[pnum], position); + ii = InvPutItem(Players[pnum], position, message.wIndx, message.wCI, message.dwSeed, message.bId, message.bDur, message.bMDur, message.bCh, message.bMCh, message.wValue, message.dwBuff, message.wToHit, message.wMaxDam, message.bMinStr, message.bMinMag, message.bMinDex, message.bAC); else ii = SyncPutItem(Players[pnum], position, message.wIndx, message.wCI, message.dwSeed, message.bId, message.bDur, message.bMDur, message.bCh, message.bMCh, message.wValue, message.dwBuff, message.wToHit, message.wMaxDam, message.bMinStr, message.bMinMag, message.bMinDex, message.bAC); if (ii != -1) {