diff --git a/Source/inv.cpp b/Source/inv.cpp index 712cbbce3..458ad0683 100644 --- a/Source/inv.cpp +++ b/Source/inv.cpp @@ -1808,9 +1808,9 @@ int InvPutItem(const Player &player, Point position, const Item &item) return ii; } -int SyncPutItem(const Player &player, 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) +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 (player.isOnLevel(0)) { + if (MyPlayer->isOnLevel(0)) { if (idx == IDI_RUNEBOMB && OpensHive(position)) return -1; if (idx == IDI_MAPOFDOOM && OpensGrave(position)) @@ -1820,11 +1820,6 @@ int SyncPutItem(const Player &player, Point position, _item_indexes idx, uint16_ if (ActiveItemCount >= MAXITEMS) return -1; - return SyncDropItem(position, idx, icreateinfo, iseed, id, dur, mdur, ch, mch, ivalue, ibuff, toHit, maxDam, minStr, minMag, minDex, ac); -} - -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) -{ int ii = AllocateItem(); auto &item = Items[ii]; @@ -1856,17 +1851,11 @@ int SyncDropItem(Point position, _item_indexes idx, uint16_t icreateinfo, int is return ii; } -int SyncPutEar(const Player &player, Point position, uint16_t icreateinfo, int iseed, uint8_t cursval, string_view heroname) +int SyncDropEar(Point position, uint16_t icreateinfo, int iseed, uint8_t cursval, string_view heroname) { - std::optional itemTile = FindAdjacentPositionForItem(player.position.tile, GetDirection(player.position.tile, position)); - if (!itemTile) + if (ActiveItemCount >= MAXITEMS) return -1; - return SyncDropEar(*itemTile, icreateinfo, iseed, cursval, heroname); -} - -int SyncDropEar(Point position, uint16_t icreateinfo, int iseed, uint8_t cursval, string_view heroname) -{ int ii = AllocateItem(); auto &item = Items[ii]; diff --git a/Source/inv.h b/Source/inv.h index d26727bb7..c28676c0c 100644 --- a/Source/inv.h +++ b/Source/inv.h @@ -224,9 +224,7 @@ void SyncGetItem(Point position, int32_t iseed, _item_indexes idx, uint16_t ci); bool CanPut(Point position); int InvPutItem(const Player &player, Point position, const Item &item); -int SyncPutItem(const Player &player, 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); 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); -int SyncPutEar(const Player &player, Point position, uint16_t icreateinfo, int iseed, uint8_t cursval, string_view heroname); int SyncDropEar(Point position, uint16_t icreateinfo, int iseed, uint8_t cursval, string_view heroname); int8_t CheckInvHLight(); bool CanUseScroll(Player &player, spell_id spell); diff --git a/Source/msg.cpp b/Source/msg.cpp index 529123055..078a1c0a2 100644 --- a/Source/msg.cpp +++ b/Source/msg.cpp @@ -972,21 +972,9 @@ void RecreateItem(const Player &player, const TCmdChItem &message, Item &item) RecreateItem(player, message.item, item); } -int SyncPutEar(const TEar &ear) +int SyncDropItem(Point position, const TItem &item) { - return SyncPutEar( - *MyPlayer, - MyPlayer->position.tile, - ear.wCI, - ear.dwSeed, - ear.bCursval, - ear.heroname); -} - -int SyncPutItem(const Player &player, Point position, const TItem &item) -{ - return SyncPutItem( - player, + return SyncDropItem( position, item.wIndx, item.wCI, @@ -1006,49 +994,42 @@ int SyncPutItem(const Player &player, Point position, const TItem &item) item.bAC); } -int SyncPutItem(const Player &player, const TCmdGItem &message) +int SyncDropEar(Point position, const TEar &ear) { - if (message.def.wIndx == IDI_EAR) - return SyncPutEar(message.ear); - return SyncPutItem(player, GetItemPosition({ message.x, message.y }), message.item); + return SyncDropEar( + position, + ear.wCI, + ear.dwSeed, + ear.bCursval, + ear.heroname); } -int SyncPutItem(const Player &player, const TCmdPItem &message) +int SyncDropItem(const TCmdGItem &message) { - if (message.def.wIndx == IDI_EAR) - return SyncPutEar(message.ear); - return SyncPutItem(player, GetItemPosition({ message.x, message.y }), message.item); + Point position = GetItemPosition({ message.x, message.y }); + if (message.def.wIndx == IDI_EAR) { + return SyncDropEar( + position, + message.ear); + } + + return SyncDropItem( + position, + message.item); } -int SyncDropItem(Point position, const TCmdPItem message) +int SyncDropItem(const TCmdPItem &message) { + Point position = GetItemPosition({ message.x, message.y }); if (message.def.wIndx == IDI_EAR) { return SyncDropEar( position, - message.ear.wCI, - message.ear.dwSeed, - message.ear.bCursval, - message.ear.heroname); + message.ear); } return SyncDropItem( position, - message.item.wIndx, - message.item.wCI, - message.item.dwSeed, - message.item.bId, - message.item.bDur, - message.item.bMDur, - message.item.bCh, - message.item.bMCh, - message.item.wValue, - message.item.dwBuff, - message.item.wToHit, - message.item.wMaxDam, - message.item.bMinStr, - message.item.bMinMag, - message.item.bMinDex, - message.item.bAC); + message.item); } size_t OnRequestGetItem(const TCmd *pCmd, Player &player) @@ -1103,7 +1084,7 @@ size_t OnGetItem(const TCmd *pCmd, size_t pnum) if ((isOnActiveLevel || message.bPnum == MyPlayerId) && message.bMaster != MyPlayerId) { if (message.bPnum == MyPlayerId) { if (!isOnActiveLevel) { - int ii = SyncPutItem(*MyPlayer, message); + int ii = SyncDropItem(message); if (ii != -1) InvGetItem(*MyPlayer, ii); } else { @@ -1173,7 +1154,7 @@ size_t OnAutoGetItem(const TCmd *pCmd, size_t pnum) if (message.bPnum == MyPlayerId) { if (localLevel != message.bLevel) { Player &player = *MyPlayer; - int ii = SyncPutItem(player, message); + int ii = SyncDropItem(message); if (ii != -1) AutoGetItem(*MyPlayer, &Items[ii], ii); } else { @@ -1223,7 +1204,7 @@ size_t OnPutItem(const TCmd *pCmd, size_t pnum) if (isSelf) ii = InvPutItem(player, position, ItemLimbo); else - ii = SyncPutItem(player, message); + ii = SyncDropItem(message); if (ii != -1) { PutItemRecord(message.def.dwSeed, message.def.wCI, message.def.wIndx); DeltaPutItem(message, Items[ii].position, player); @@ -1249,10 +1230,9 @@ size_t OnSyncPutItem(const TCmd *pCmd, size_t pnum) if (gbBufferMsgs == 1) SendPacket(pnum, &message, sizeof(message)); else if (IsPItemValid(message)) { - const Point position { message.x, message.y }; Player &player = Players[pnum]; if (player.isOnActiveLevel()) { - int ii = SyncPutItem(player, message); + int ii = SyncDropItem(message); if (ii != -1) { PutItemRecord(message.def.dwSeed, message.def.wCI, message.def.wIndx); DeltaPutItem(message, Items[ii].position, player); @@ -1262,7 +1242,7 @@ size_t OnSyncPutItem(const TCmd *pCmd, size_t pnum) return sizeof(message); } else { PutItemRecord(message.def.dwSeed, message.def.wCI, message.def.wIndx); - DeltaPutItem(message, position, player); + DeltaPutItem(message, { message.x, message.y }, player); if (&player == MyPlayer) pfile_update(true); } @@ -1278,13 +1258,12 @@ size_t OnRespawnItem(const TCmd *pCmd, size_t pnum) if (gbBufferMsgs == 1) { SendPacket(pnum, &message, sizeof(message)); } else if (IsPItemValid(message)) { - const Point position { message.x, message.y }; Player &player = Players[pnum]; if (player.isOnActiveLevel() && &player != MyPlayer) { - SyncPutItem(player, message); + SyncDropItem(message); } PutItemRecord(message.def.dwSeed, message.def.wCI, message.def.wIndx); - DeltaPutItem(message, position, player); + DeltaPutItem(message, { message.x, message.y }, player); } return sizeof(message); @@ -2050,12 +2029,11 @@ size_t OnSpawnItem(const TCmd *pCmd, size_t pnum) SendPacket(pnum, &message, sizeof(message)); } else if (IsPItemValid(message)) { Player &player = Players[pnum]; - Point position = { message.x, message.y }; if (player.isOnActiveLevel() && &player != MyPlayer) { - SyncDropItem(position, message); + SyncDropItem(message); } PutItemRecord(message.def.dwSeed, message.def.wCI, message.def.wIndx); - DeltaPutItem(message, position, player); + DeltaPutItem(message, { message.x, message.y }, player); } return sizeof(message);