Browse Source

Make functions that create and place an item in the world more similar

pull/6104/head
ephphatha 3 years ago committed by Anders Jenbo
parent
commit
eac22b935d
  1. 47
      Source/inv.cpp

47
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;
}

Loading…
Cancel
Save