From a9d3e1bfe12e9afa4048f86a192bd94df6fdb7c3 Mon Sep 17 00:00:00 2001 From: Mitch Freeman <65987027+neckkola@users.noreply.github.com> Date: Sun, 21 Sep 2025 11:07:14 -0300 Subject: [PATCH] Updates Tested ok --- common/eq_packet_structs.h | 2 +- common/patches/rof2.cpp | 3 +-- zone/client_evolving_items.cpp | 18 +++++++++++------- zone/client_packet.cpp | 2 ++ zone/parcels.cpp | 29 +++++++++++++++-------------- 5 files changed, 30 insertions(+), 24 deletions(-) diff --git a/common/eq_packet_structs.h b/common/eq_packet_structs.h index 0a1349254..e0b3803e9 100644 --- a/common/eq_packet_structs.h +++ b/common/eq_packet_structs.h @@ -6499,7 +6499,7 @@ struct PickZone_Struct { struct EvolveItemToggle { uint32 action; - uint32 unknown_004; + uint32 item_id; uint64 unique_id; uint32 percentage; uint32 activated; diff --git a/common/patches/rof2.cpp b/common/patches/rof2.cpp index b250a5de6..193fed92d 100644 --- a/common/patches/rof2.cpp +++ b/common/patches/rof2.cpp @@ -6499,10 +6499,9 @@ namespace RoF2 ob.write((const char*)&hdr, sizeof(RoF2::structs::ItemSerializationHeader)); if (item->EvolvingItem > 0) { - RoF2::structs::EvolvingItem_Struct evotop; + RoF2::structs::EvolvingItem_Struct evotop{}; inst->CalculateEvolveProgression(); - evotop.final_item_id = inst->GetEvolveFinalItemID(); evotop.evolve_level = item->EvolvingLevel; evotop.progress = inst->GetEvolveProgression(); evotop.activated = inst->GetEvolveActivated(); diff --git a/zone/client_evolving_items.cpp b/zone/client_evolving_items.cpp index 77c29a45e..dbc906f7b 100644 --- a/zone/client_evolving_items.cpp +++ b/zone/client_evolving_items.cpp @@ -286,9 +286,9 @@ void Client::DoEvolveItemDisplayFinalResult(const EQApplicationPacket *app) { const auto in = reinterpret_cast(app->pBuffer); - const uint32 item_id = static_cast(in->unique_id & 0xFFFFFFFF); + const uint32 item_id = in->item_id; if (item_id == 0) { - LogEvolveItem("Error - Item ID of final evolve item is blank."); + LogEvolveItem("Error - Item ID of evolve item display final request is blank."); return; } @@ -297,19 +297,23 @@ void Client::DoEvolveItemDisplayFinalResult(const EQApplicationPacket *app) return; } + auto final_id = EvolvingItemsManager::Instance()->GetFinalItemID(*inst); + std::unique_ptr const final_inst(database.CreateItem(final_id)); + if (!final_inst) { + return; + } + LogEvolveItemDetail( "Character ID [{}] requested to view final evolve item id [{}] for evolve item id [{}]", CharacterID(), - item_id, - EvolvingItemsManager::Instance()->GetFirstItemInLoreGroupByItemID(item_id) + final_id, + item_id ); - inst->SetEvolveProgression(100); - LogEvolveItemDetail( "Sending final result for item id [{}] to Character ID [{}]", item_id, CharacterID() ); - SendItemPacket(0, inst.get(), ItemPacketViewLink); + SendItemPacket(0, final_inst.get(), ItemPacketViewLink); } bool Client::DoEvolveCheckProgression(EQ::ItemInstance &inst) diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index a059bef65..3cf7cd6b3 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -14404,6 +14404,8 @@ void Client::Handle_OP_ShopPlayerSell(const EQApplicationPacket *app) inst2->SetPrice(price); inst2->SetMerchantSlot(freeslot); + inst2->SetEvolveCurrentAmount(0); + inst2->CalculateEvolveProgression(); uint32 merchant_quantity = zone->GetTempMerchantQuantity(vendor->GetNPCTypeID(), freeslot); diff --git a/zone/parcels.cpp b/zone/parcels.cpp index f1dc874c1..9f23fff1e 100644 --- a/zone/parcels.cpp +++ b/zone/parcels.cpp @@ -134,20 +134,21 @@ void Client::SendParcel(Parcel_Struct &parcel_in) CharacterParcelsRepository::CharacterParcels p{}; - p.from_name = r.from_name; - p.id = r.id; - p.note = r.note; - p.quantity = r.quantity; - p.sent_date = r.sent_date; - p.item_id = r.item_id; - p.aug_slot_1 = r.aug_slot_1; - p.aug_slot_2 = r.aug_slot_2; - p.aug_slot_3 = r.aug_slot_3; - p.aug_slot_4 = r.aug_slot_4; - p.aug_slot_5 = r.aug_slot_5; - p.aug_slot_6 = r.aug_slot_6; - p.slot_id = r.slot_id; - p.char_id = r.char_id; + p.from_name = r.from_name; + p.id = r.id; + p.note = r.note; + p.quantity = r.quantity; + p.sent_date = r.sent_date; + p.item_id = r.item_id; + p.aug_slot_1 = r.aug_slot_1; + p.aug_slot_2 = r.aug_slot_2; + p.aug_slot_3 = r.aug_slot_3; + p.aug_slot_4 = r.aug_slot_4; + p.aug_slot_5 = r.aug_slot_5; + p.aug_slot_6 = r.aug_slot_6; + p.slot_id = r.slot_id; + p.char_id = r.char_id; + p.evolve_amount = r.evolve_amount; auto item = database.GetItem(p.item_id); if (item) {