crafting-orders: fulfil achievement criteria
Build (Windows x64) / build (push) Canceled after 0s
Build (Windows x64) / linux-build (push) Canceled after 0s

This commit is contained in:
luis
2026-08-11 18:42:13 -03:00
parent d4e7fe956e
commit 99322c9e03
3 changed files with 28 additions and 2 deletions
@@ -586,6 +586,9 @@ void CriteriaHandler::UpdateCriteria(Criteria const* criteria, uint64 miscValue1
case CriteriaType::SellItemsToVendors: case CriteriaType::SellItemsToVendors:
case CriteriaType::ReachMaxLevel: case CriteriaType::ReachMaxLevel:
case CriteriaType::LearnTaxiNode: case CriteriaType::LearnTaxiNode:
// --- crafting orders
case CriteriaType::FulfillAnyCraftingOrder:
case CriteriaType::FulfillCraftingOrderType:
// --- mythic keystone: one tick per completed run // --- mythic keystone: one tick per completed run
case CriteriaType::MythicPlusCompleted: case CriteriaType::MythicPlusCompleted:
case CriteriaType::CompleteAnyChallengeMode: case CriteriaType::CompleteAnyChallengeMode:
@@ -1762,6 +1765,15 @@ bool CriteriaHandler::RequirementsSatisfied(Criteria const* criteria, uint64 mis
if (!miscValue1) if (!miscValue1)
return false; return false;
break; break;
case CriteriaType::FulfillCraftingOrderType:
// Asset = {CraftingOrderType} (0 public / 1 guild / 2 personal / 3 npc) == CraftingOrders::OrderType.
if (uint32(miscValue1) != uint32(criteria->Entry->Asset.ID))
return false;
break;
case CriteriaType::FulfillAnyCraftingOrder:
if (!miscValue1)
return false;
break;
default: default:
break; break;
} }
+2 -2
View File
@@ -784,8 +784,8 @@ enum class CriteriaType : int16
ReputationAmountGained = 243, /*NYI*/ // Gain reputation amount with {FactionID}; accumulate, not highest ReputationAmountGained = 243, /*NYI*/ // Gain reputation amount with {FactionID}; accumulate, not highest
FulfillAnyCraftingOrder = 245, /*NYI*/ FulfillAnyCraftingOrder = 245,
FulfillCraftingOrderType = 246, /*NYI*/ // {CraftingOrderType} FulfillCraftingOrderType = 246, // {CraftingOrderType}
PerksProgramMonthComplete = 249, /*NYI*/ PerksProgramMonthComplete = 249, /*NYI*/
CompleteTrackingQuest = 250, /*NYI*/ CompleteTrackingQuest = 250, /*NYI*/
@@ -246,8 +246,22 @@ void WorldSession::HandleCraftingOrderFulfill(WorldPackets::CraftingOrders::Craf
} }
} }
CraftingOrders::OrderType const orderType = order->Type;
uint32 const skillLineAbilityId = order->SkillLineAbilityID;
// Transition Claimed -> Fulfilled and release the escrowed tip to the crafter. // Transition Claimed -> Fulfilled and release the escrowed tip to the crafter.
ok = sCraftingOrderMgr.FulfillOrder(packet.OrderID, player->GetGUID()); ok = sCraftingOrderMgr.FulfillOrder(packet.OrderID, player->GetGUID());
if (ok)
{
// CriteriaType::FulfillAnyCraftingOrder (245) - plain counter ("Crafting Orders fulfilled").
// CriteriaType::FulfillCraftingOrderType (246) - Asset = {CraftingOrderType}; real Criteria rows
// carry 0/1/2/3, which is exactly CraftingOrders::OrderType (Public/Guild/Personal/Npc).
// miscValue2 carries the SkillLineAbility so ModifierTreeType::CraftingOrderSkillLineAbility (347)
// can discriminate the recipe.
player->UpdateCriteria(CriteriaType::FulfillAnyCraftingOrder, 1, skillLineAbilityId);
player->UpdateCriteria(CriteriaType::FulfillCraftingOrderType, uint32(orderType), skillLineAbilityId);
}
} }
WorldPackets::CraftingOrders::CraftingOrderFulfillResult result; WorldPackets::CraftingOrders::CraftingOrderFulfillResult result;