Browse Source

Extract common logic for a player dropping an item

The other class of use appears to be items spawned from NPCs or being dropped on death which shouldn't consider the CornerStone. Need to sort those later
pull/6104/head
ephphatha 3 years ago committed by Anders Jenbo
parent
commit
06f6ff78f2
  1. 51
      Source/inv.cpp

51
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<Point> 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<Point> 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()

Loading…
Cancel
Save