Tested ok
This commit is contained in:
Mitch Freeman 2025-09-21 11:07:14 -03:00 committed by Vayle
parent 8175ae6187
commit a9d3e1bfe1
5 changed files with 30 additions and 24 deletions

View File

@ -6499,7 +6499,7 @@ struct PickZone_Struct {
struct EvolveItemToggle { struct EvolveItemToggle {
uint32 action; uint32 action;
uint32 unknown_004; uint32 item_id;
uint64 unique_id; uint64 unique_id;
uint32 percentage; uint32 percentage;
uint32 activated; uint32 activated;

View File

@ -6499,10 +6499,9 @@ namespace RoF2
ob.write((const char*)&hdr, sizeof(RoF2::structs::ItemSerializationHeader)); ob.write((const char*)&hdr, sizeof(RoF2::structs::ItemSerializationHeader));
if (item->EvolvingItem > 0) { if (item->EvolvingItem > 0) {
RoF2::structs::EvolvingItem_Struct evotop; RoF2::structs::EvolvingItem_Struct evotop{};
inst->CalculateEvolveProgression(); inst->CalculateEvolveProgression();
evotop.final_item_id = inst->GetEvolveFinalItemID();
evotop.evolve_level = item->EvolvingLevel; evotop.evolve_level = item->EvolvingLevel;
evotop.progress = inst->GetEvolveProgression(); evotop.progress = inst->GetEvolveProgression();
evotop.activated = inst->GetEvolveActivated(); evotop.activated = inst->GetEvolveActivated();

View File

@ -286,9 +286,9 @@ void Client::DoEvolveItemDisplayFinalResult(const EQApplicationPacket *app)
{ {
const auto in = reinterpret_cast<EvolveItemToggle *>(app->pBuffer); const auto in = reinterpret_cast<EvolveItemToggle *>(app->pBuffer);
const uint32 item_id = static_cast<uint32>(in->unique_id & 0xFFFFFFFF); const uint32 item_id = in->item_id;
if (item_id == 0) { 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; return;
} }
@ -297,19 +297,23 @@ void Client::DoEvolveItemDisplayFinalResult(const EQApplicationPacket *app)
return; return;
} }
auto final_id = EvolvingItemsManager::Instance()->GetFinalItemID(*inst);
std::unique_ptr<EQ::ItemInstance> const final_inst(database.CreateItem(final_id));
if (!final_inst) {
return;
}
LogEvolveItemDetail( LogEvolveItemDetail(
"Character ID <green>[{}] requested to view final evolve item id <yellow>[{}] for evolve item id <yellow>[{}]", "Character ID <green>[{}] requested to view final evolve item id <yellow>[{}] for evolve item id <yellow>[{}]",
CharacterID(), CharacterID(),
item_id, final_id,
EvolvingItemsManager::Instance()->GetFirstItemInLoreGroupByItemID(item_id) item_id
); );
inst->SetEvolveProgression(100);
LogEvolveItemDetail( LogEvolveItemDetail(
"Sending final result for item id <yellow>[{}] to Character ID <green>[{}]", item_id, CharacterID() "Sending final result for item id <yellow>[{}] to Character ID <green>[{}]", item_id, CharacterID()
); );
SendItemPacket(0, inst.get(), ItemPacketViewLink); SendItemPacket(0, final_inst.get(), ItemPacketViewLink);
} }
bool Client::DoEvolveCheckProgression(EQ::ItemInstance &inst) bool Client::DoEvolveCheckProgression(EQ::ItemInstance &inst)

View File

@ -14404,6 +14404,8 @@ void Client::Handle_OP_ShopPlayerSell(const EQApplicationPacket *app)
inst2->SetPrice(price); inst2->SetPrice(price);
inst2->SetMerchantSlot(freeslot); inst2->SetMerchantSlot(freeslot);
inst2->SetEvolveCurrentAmount(0);
inst2->CalculateEvolveProgression();
uint32 merchant_quantity = zone->GetTempMerchantQuantity(vendor->GetNPCTypeID(), freeslot); uint32 merchant_quantity = zone->GetTempMerchantQuantity(vendor->GetNPCTypeID(), freeslot);

View File

@ -148,6 +148,7 @@ void Client::SendParcel(Parcel_Struct &parcel_in)
p.aug_slot_6 = r.aug_slot_6; p.aug_slot_6 = r.aug_slot_6;
p.slot_id = r.slot_id; p.slot_id = r.slot_id;
p.char_id = r.char_id; p.char_id = r.char_id;
p.evolve_amount = r.evolve_amount;
auto item = database.GetItem(p.item_id); auto item = database.GetItem(p.item_id);
if (item) { if (item) {