diff --git a/Source/items.cpp b/Source/items.cpp index 51bc66a8d..88dcd0ffe 100644 --- a/Source/items.cpp +++ b/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) diff --git a/Source/items.h b/Source/items.h index e6e19ccfa..23d1b45b4 100644 --- a/Source/items.h +++ b/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);