Core/Criteria: Implemented CompleteAnyScenario and CompleteScenario types (#29984)

(cherry picked from commit 980ca4c656)
This commit is contained in:
Antonio Martín Berti
2024-05-13 16:06:41 -03:00
committed by Ovahlord
parent 8510b58727
commit e337d3d661
3 changed files with 19 additions and 6 deletions

View File

@@ -545,6 +545,8 @@ void CriteriaHandler::UpdateCriteria(CriteriaType type, uint64 miscValue1 /*= 0*
case CriteriaType::Login:
case CriteriaType::AnyoneTriggerGameEventScenario:
case CriteriaType::DefeatDungeonEncounterWhileElegibleForLoot:
case CriteriaType::CompleteAnyScenario:
case CriteriaType::CompleteScenario:
case CriteriaType::BattlePetReachLevel:
case CriteriaType::ActivelyEarnPetLevel:
case CriteriaType::DefeatDungeonEncounter:
@@ -798,8 +800,6 @@ void CriteriaHandler::UpdateCriteria(CriteriaType type, uint64 miscValue1 /*= 0*
case CriteriaType::KickVoterInLFRDungeon:
case CriteriaType::KickTargetInLFRDungeon:
case CriteriaType::GroupedTankLeftEarlyInLFRDungeon:
case CriteriaType::CompleteAnyScenario:
case CriteriaType::CompleteScenario:
case CriteriaType::AccountObtainPetThroughBattle:
case CriteriaType::WinPetBattle:
case CriteriaType::PlayerObtainPetThroughBattle:
@@ -1202,11 +1202,13 @@ bool CriteriaHandler::IsCompletedCriteria(Criteria const* criteria, uint64 requi
case CriteriaType::CompletedLFGDungeonWithStrangers:
case CriteriaType::DeliveredKillingBlow:
case CriteriaType::CurrencyGained:
case CriteriaType::PlaceGarrisonBuilding:
case CriteriaType::CompleteAnyScenario:
case CriteriaType::CompleteScenario:
case CriteriaType::UniquePetsOwned:
case CriteriaType::BattlePetReachLevel:
case CriteriaType::ActivelyEarnPetLevel:
case CriteriaType::DefeatDungeonEncounter:
case CriteriaType::PlaceGarrisonBuilding:
case CriteriaType::LearnHeirloom:
case CriteriaType::LearnAnyHeirloom:
case CriteriaType::LearnAnyTransmogInSlot:
@@ -1388,6 +1390,7 @@ bool CriteriaHandler::RequirementsSatisfied(Criteria const* criteria, uint64 mis
case CriteriaType::SellItemsToVendors:
case CriteriaType::GainLevels:
case CriteriaType::LearnAnyTransmog:
case CriteriaType::CompleteAnyScenario:
if (!miscValue1)
return false;
break;
@@ -1654,6 +1657,10 @@ bool CriteriaHandler::RequirementsSatisfied(Criteria const* criteria, uint64 mis
if (!miscValue1 || miscValue1 != uint32(criteria->Entry->Asset.EventID))
return false;
break;
case CriteriaType::CompleteScenario:
if (miscValue1 != uint32(criteria->Entry->Asset.ScenarioID))
return false;
break;
default:
break;
}

View File

@@ -652,8 +652,8 @@ enum class CriteriaType : int16
KickVoterInLFRDungeon = 148, /*NYI*/ // Kicked in an LFR dungeon (voter)
KickTargetInLFRDungeon = 149, /*NYI*/ // Kicked in an LFR dungeon (target)
GroupedTankLeftEarlyInLFRDungeon = 150, /*NYI*/ // Grouped tank left early in an LFR dungeon
CompleteAnyScenario = 151, /*NYI*/ // Complete a Scenario
CompleteScenario = 152, /*NYI*/ // Complete scenario "{Scenario}"
CompleteAnyScenario = 151, // Complete a Scenario
CompleteScenario = 152, // Complete scenario "{Scenario}"
EnterAreaTriggerWithActionSet = 153, /*NYI*/ // Enter area trigger "{AreaTriggerActionSet}"
LeaveAreaTriggerWithActionSet = 154, /*NYI*/ // Leave area trigger "{AreaTriggerActionSet}"
LearnedNewPet = 155, // (Account Only) Learned a new pet

View File

@@ -87,7 +87,13 @@ void Scenario::CompleteStep(ScenarioStepEntry const* step)
void Scenario::CompleteScenario()
{
return SendPacket(WorldPackets::Scenario::ScenarioCompleted(_data->Entry->ID).Write());
SendPacket(WorldPackets::Scenario::ScenarioCompleted(_data->Entry->ID).Write());
DoForAllPlayers([&](Player* player)
{
player->UpdateCriteria(CriteriaType::CompleteAnyScenario, 1);
player->UpdateCriteria(CriteriaType::CompleteScenario, _data->Entry->ID);
});
}
void Scenario::SetStep(ScenarioStepEntry const* step)