|
|
|
|
@ -3224,20 +3224,19 @@ Item *SpawnUnique(_unique_items uid, Point position, std::optional<int> level /*
|
|
|
|
|
while (AllItemsList[idx].iItemId != UniqueItems[uid].UIItemId) |
|
|
|
|
idx++; |
|
|
|
|
|
|
|
|
|
if (gbIsMultiplayer) { |
|
|
|
|
if (sgGameInitInfo.nDifficulty == DIFF_NORMAL) { |
|
|
|
|
GetItemAttrs(item, static_cast<_item_indexes>(idx), curlv); |
|
|
|
|
GetUniqueItem(*MyPlayer, item, uid); |
|
|
|
|
SetupItem(item); |
|
|
|
|
} else { |
|
|
|
|
if (level) |
|
|
|
|
curlv = *level; |
|
|
|
|
const ItemData &uniqueItemData = AllItemsList[idx]; |
|
|
|
|
_item_indexes idx = GetItemIndexForDroppableItem(false, [&uniqueItemData](const ItemData &item) { |
|
|
|
|
return item.itype == uniqueItemData.itype || (uniqueItemData.itype == ItemType::Amulet && item.itype == ItemType::Ring); |
|
|
|
|
return item.itype == uniqueItemData.itype; |
|
|
|
|
}); |
|
|
|
|
SetupAllItems(*MyPlayer, item, idx, AdvanceRndSeed(), curlv * 2, 15, true, false, false); |
|
|
|
|
} |
|
|
|
|
if (!gbIsMultiplayer || item._iMagical == ITEM_QUALITY_UNIQUE) { |
|
|
|
|
GetItemAttrs(item, static_cast<_item_indexes>(idx), curlv); |
|
|
|
|
GetUniqueItem(*MyPlayer, item, uid); |
|
|
|
|
SetupItem(item); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (sendmsg) |
|
|
|
|
NetSendCmdPItem(false, CMD_SPAWNITEM, item.position, item); |
|
|
|
|
|