Browse Source

Sync SpawnUnique

pull/5487/head
obligaron 3 years ago committed by Anders Jenbo
parent
commit
c18380c2e7
  1. 13
      Source/items.cpp
  2. 2
      Source/items.h

13
Source/items.cpp

@ -3027,10 +3027,10 @@ void SetupItem(Item &item)
item._iIdentified = false;
}
void SpawnUnique(_unique_items uid, Point position)
Item *SpawnUnique(_unique_items uid, Point position, bool sendmsg /*= true*/)
{
if (ActiveItemCount >= MAXITEMS)
return;
return nullptr;
int ii = AllocateItem();
auto &item = Items[ii];
@ -3044,6 +3044,11 @@ void SpawnUnique(_unique_items uid, Point position)
GetItemAttrs(item, static_cast<_item_indexes>(idx), curlv);
GetUniqueItem(*MyPlayer, item, uid);
SetupItem(item);
if (sendmsg)
NetSendCmdPItem(false, CMD_SPAWNITEM, item.position, item);
return &item;
}
void SpawnItem(Monster &monster, Point position, bool sendmsg)
@ -3054,7 +3059,9 @@ void SpawnItem(Monster &monster, Point position, bool sendmsg)
bool dropsSpecialTreasure = (monster.data().treasure & T_UNIQ) != 0;
if (dropsSpecialTreasure && !gbIsMultiplayer) {
SpawnUnique(static_cast<_unique_items>(monster.data().treasure & T_MASK), position);
Item *uniqueItem = SpawnUnique(static_cast<_unique_items>(monster.data().treasure & T_MASK), position, false);
if (uniqueItem != nullptr && sendmsg)
NetSendCmdPItem(false, CMD_DROPITEM, uniqueItem->position, *uniqueItem);
return;
} else if (monster.isUnique() || dropsSpecialTreasure) {
// Unqiue monster is killed => use better item base (for example no gold)

2
Source/items.h

@ -496,7 +496,7 @@ int AllocateItem();
Point GetSuperItemLoc(Point position);
void GetItemAttrs(Item &item, _item_indexes itemData, int lvl);
void SetupItem(Item &item);
void SpawnUnique(_unique_items uid, Point position);
Item *SpawnUnique(_unique_items uid, Point position, bool sendmsg = true);
void SpawnItem(Monster &monster, Point position, bool sendmsg);
void CreateRndItem(Point position, bool onlygood, bool sendmsg, bool delta);
void CreateRndUseful(Point position, bool sendmsg);

Loading…
Cancel
Save