diff --git a/zone/client_evolving_items.cpp b/zone/client_evolving_items.cpp index e1259c77f..fef8fa085 100644 --- a/zone/client_evolving_items.cpp +++ b/zone/client_evolving_items.cpp @@ -337,24 +337,29 @@ bool Client::DoEvolveCheckProgression(EQ::ItemInstance &inst) !RuleB(EvolvingItems, DestroyAugmentsOnEvolve) && inst.IsAugmented() ) { - auto const augs = inst.GetAugmentIDs(); - std::vector parcels; - for (auto const &item_id: augs) { - if (!item_id) { - continue; - } + auto const augs = inst.GetAugmentIDs(); + std::vector parcels; + int32 next_slot = FindNextFreeParcelSlotUsingMemory(); + for (auto const &item_id: augs) { + if (!item_id) { + continue; + } - CharacterParcelsRepository::CharacterParcels p{}; - p.char_id = CharacterID(); - p.from_name = "Evolving Item Sub-System"; - p.note = fmt::format( - "System automatically removed from {} which recently evolved.", - inst.GetItem()->Name - ); - p.slot_id = FindNextFreeParcelSlotUsingMemory(); - p.sent_date = time(nullptr); - p.item_id = item_id; - p.quantity = 1; + if (next_slot == INVALID_INDEX) { + break; + } + + CharacterParcelsRepository::CharacterParcels p{}; + p.char_id = CharacterID(); + p.from_name = "Evolving Item Sub-System"; + p.note = fmt::format( + "System automatically removed from {} which recently evolved.", + inst.GetItem()->Name + ); + p.slot_id = next_slot; + p.sent_date = time(nullptr); + p.item_id = item_id; + p.quantity = 1; if (player_event_logs.IsEventEnabled(PlayerEvent::PARCEL_SEND)) { PlayerEvent::ParcelSend e{}; @@ -367,8 +372,10 @@ bool Client::DoEvolveCheckProgression(EQ::ItemInstance &inst) RecordPlayerEventLog(PlayerEvent::PARCEL_SEND, e); } - parcels.push_back(p); - } + parcels.push_back(p); + m_parcels.emplace(p.slot_id, p); + next_slot = FindNextFreeParcelSlotUsingMemory(); + } CharacterParcelsRepository::InsertMany(database, parcels); SendParcelStatus();