Solve AQ Event Order (#114)

Oh my, this took me a while to figure out.

- removed AQ skip options. AQ quest line is optional for everyone. No need for a config option for this. If you want to skip the war effort phase you just run to the Scarab Gong and hit it.
- After the the pre-AQ (war effort) phase you now enter the AQ war phase. The AQ gates have been opened, the gong was rung. you can still finish the AQ quest line during this phase.
New quest added to finish the AQ war, called Chaos and Destruction. objective is to kill the three Colossus bugs in the hives. 
- After the Chaos and Destruction quest has been completed the scarab gong will be gone.
- you can ignore the Chaos and Destruction quest. it's not mandatory to complete because the gates to AQ are open.
but doing so means you do not get the Field Duty quests, those are only available after the AQ war is over.
I gave the Chaos and Destruction quest a 48 hour timer, but it's symbolic really. You can pick it up again at the scarab gong.

I still need quest text for the Chaos and Destruction quest.
Maybe someone can come up with good quest text. If not, I'll try to do it myself.
This commit is contained in:
Grimfeather
2025-05-21 02:45:34 +02:00
committed by GitHub
parent a0ca3be0e1
commit 5f5d8ffac2
9 changed files with 105 additions and 88 deletions

View File

@@ -234,14 +234,7 @@ void IndividualProgression::checkKillProgression(Player* killer, Creature* kille
UpdateProgressionState(killer, PROGRESSION_ONYXIA);
break;
case NEFARIAN:
if (RequireAQWarEffort)
{
UpdateProgressionState(killer, PROGRESSION_BLACKWING_LAIR);
}
else
{
UpdateProgressionState(killer, PROGRESSION_PRE_AQ);
}
UpdateProgressionState(killer, PROGRESSION_BLACKWING_LAIR);
break;
case CTHUN:
UpdateProgressionState(killer, PROGRESSION_AQ);
@@ -298,8 +291,6 @@ private:
sIndividualProgression->tbcHealthAdjustment = sConfigMgr->GetOption<float>("IndividualProgression.TBCHealthAdjustment", 1);
sIndividualProgression->questXpFix = sConfigMgr->GetOption<bool>("IndividualProgression.QuestXPFix", true);
sIndividualProgression->hunterPetLevelFix = sConfigMgr->GetOption<bool>("IndividualProgression.HunterPetLevelFix", true);
sIndividualProgression->requirePreAQQuests = sConfigMgr->GetOption<bool>("IndividualProgression.RequirePreAQQuests", true);
sIndividualProgression->RequireAQWarEffort = sConfigMgr->GetOption<bool>("IndividualProgression.RequireAQWarEffort", true);
sIndividualProgression->requireNaxxStrath = sConfigMgr->GetOption<bool>("IndividualProgression.RequireNaxxStrathEntrance", true);
sIndividualProgression->enforceGroupRules = sConfigMgr->GetOption<bool>("IndividualProgression.EnforceGroupRules", true);
sIndividualProgression->fishingFix = sConfigMgr->GetOption<bool>("IndividualProgression.FishingFix", true);

View File

@@ -47,17 +47,19 @@ enum BuffSpells
RANGED_HASTE_SPELL = 89507,
SPELL_RUNE_TAP = 48982,
SPELL_LIFE_STEAL = 20004,
IPP_PHASE = 89509
IPP_PHASE = 89509,
IPP_PHASE_AQ = 89511
};
enum ProgressionQuestIDs
{
MIGHT_OF_KALIMDOR = 8742,
BANG_A_GONG = 108743,
QUEST_MORROWGRAIN = 3803,
QUEST_TROLL_NECKLACE = 2881,
QUEST_DEADWOOD = 6221,
QUEST_WINTERFALL = 6241
MIGHT_OF_KALIMDOR = 8742,
BANG_A_GONG = 108743,
CHAOS_AND_DESTRUCTION = 108744,
QUEST_MORROWGRAIN = 3803,
QUEST_TROLL_NECKLACE = 2881,
QUEST_DEADWOOD = 6221,
QUEST_WINTERFALL = 6241
};
enum ProgressionZones
@@ -102,19 +104,20 @@ enum ProgressionState : uint8
PROGRESSION_MOLTEN_CORE = 1,
PROGRESSION_ONYXIA = 2,
PROGRESSION_BLACKWING_LAIR = 3,
PROGRESSION_PRE_AQ = 4,
PROGRESSION_AQ = 5,
PROGRESSION_NAXX40 = 6,
PROGRESSION_TBC_TIER_1 = 7, // Karazhan, Gruul's Lair, Magtheridon's Lair
PROGRESSION_TBC_TIER_2 = 8, // Serpentshrine Cavern, Tempest Keep
PROGRESSION_TBC_TIER_3 = 9, // Hyjal Summit and Black Temple
PROGRESSION_TBC_TIER_4 = 10, // Zul'Aman
PROGRESSION_TBC_TIER_5 = 11, // Sunwell Plateau
PROGRESSION_WOTLK_TIER_1 = 12, // WotLK Naxx, EoE, OS
PROGRESSION_WOTLK_TIER_2 = 13, // Ulduar
PROGRESSION_WOTLK_TIER_3 = 14, // TotC
PROGRESSION_WOTLK_TIER_4 = 15, // ICC
PROGRESSION_WOTLK_TIER_5 = 16 // Ruby Sanctum
PROGRESSION_PRE_AQ = 4, // AQ War effort, AQ quest line
PROGRESSION_AQ_WAR = 5, // AQ outdoors war
PROGRESSION_AQ = 6, // AQ gates open, raid available
PROGRESSION_NAXX40 = 7,
PROGRESSION_TBC_TIER_1 = 8, // Karazhan, Gruul's Lair, Magtheridon's Lair
PROGRESSION_TBC_TIER_2 = 9, // Serpentshrine Cavern, Tempest Keep
PROGRESSION_TBC_TIER_3 = 10, // Hyjal Summit and Black Temple
PROGRESSION_TBC_TIER_4 = 11, // Zul'Aman
PROGRESSION_TBC_TIER_5 = 12, // Sunwell Plateau
PROGRESSION_WOTLK_TIER_1 = 13, // WotLK Naxx, EoE, OS
PROGRESSION_WOTLK_TIER_2 = 14, // Ulduar
PROGRESSION_WOTLK_TIER_3 = 15, // TotC
PROGRESSION_WOTLK_TIER_4 = 16, // ICC
PROGRESSION_WOTLK_TIER_5 = 17 // Ruby Sanctum
};
enum RandomDungeonIds : uint16
@@ -170,7 +173,7 @@ public:
std::map<uint32, uint8> customProgressionMap;
questXpMapType questXpMap;
float vanillaPowerAdjustment, vanillaHealthAdjustment, tbcPowerAdjustment, tbcHealthAdjustment, vanillaHealingAdjustment, tbcHealingAdjustment, previousGearTuning;
bool enabled, questXpFix, hunterPetLevelFix, requirePreAQQuests, RequireAQWarEffort, enforceGroupRules, fishingFix, simpleConfigOverride, questMoneyAtLevelCap, repeatableVanillaQuestsXp, disableDefaultProgression, earlyDungeonSet2, requireNaxxStrath, pvpGearRequirements, excludeAccounts;
bool enabled, questXpFix, hunterPetLevelFix, enforceGroupRules, fishingFix, simpleConfigOverride, questMoneyAtLevelCap, repeatableVanillaQuestsXp, disableDefaultProgression, earlyDungeonSet2, requireNaxxStrath, pvpGearRequirements, excludeAccounts;
int progressionLimit, startingProgression, tbcRacesProgressionLevel, deathKnightProgressionLevel, deathKnightStartingProgression;
std::string excludedAccountsRegex;

View File

@@ -80,9 +80,9 @@ public:
Player* target = ObjectAccessor::FindConnectedPlayer(player->GetGUID());
if (sIndividualProgression->hasPassedProgression(target, PROGRESSION_AQ))
if (sIndividualProgression->hasPassedProgression(target, PROGRESSION_AQ_WAR))
{
return sIndividualProgression->isBeforeProgression(target, PROGRESSION_AQ);
return sIndividualProgression->isBeforeProgression(target, PROGRESSION_AQ_WAR);
}
else
{
@@ -254,9 +254,9 @@ public:
Player* target = ObjectAccessor::FindConnectedPlayer(player->GetGUID());
if (sIndividualProgression->hasPassedProgression(target, PROGRESSION_AQ))
if (sIndividualProgression->hasPassedProgression(target, PROGRESSION_AQ_WAR))
{
return sIndividualProgression->isBeforeProgression(target, PROGRESSION_AQ);
return sIndividualProgression->isBeforeProgression(target, PROGRESSION_AQ_WAR);
}
else
{

View File

@@ -266,7 +266,13 @@ public:
{
sIndividualProgression->UpdateProgressionState(player, PROGRESSION_PRE_AQ);
}
break;
break;
case CHAOS_AND_DESTRUCTION:
if (!sIndividualProgression->disableDefaultProgression)
{
sIndividualProgression->UpdateProgressionState(player, PROGRESSION_AQ_WAR);
}
break;
case QUEST_MORROWGRAIN:
case QUEST_TROLL_NECKLACE:
case QUEST_DEADWOOD:
@@ -338,60 +344,80 @@ public:
{
switch (newArea) {
case AREA_DARKSHORE:
if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_PRE_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_AQ)))
if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_PRE_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_AQ_WAR)))
{
player->RemoveAura(IPP_PHASE);
player->CastSpell(player, IPP_PHASE, false);
}
break;
case AREA_GROVE_OF_THE_ANCIENTS:
if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_PRE_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_AQ)))
if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_PRE_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_AQ_WAR)))
{
player->RemoveAura(IPP_PHASE);
player->CastSpell(player, IPP_PHASE, false);
}
break;
case AREA_WILDBEND_RIVER:
if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_PRE_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_AQ)))
if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_PRE_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_AQ_WAR)))
{
player->RemoveAura(IPP_PHASE);
player->CastSpell(player, IPP_PHASE, false);
}
break;
case AREA_TWILIGHT_VALE:
if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_PRE_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_AQ)))
if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_PRE_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_AQ_WAR)))
{
player->RemoveAura(IPP_PHASE);
player->CastSpell(player, IPP_PHASE, false);
}
break;
case AREA_SILITHUS:
if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_PRE_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_AQ)))
if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_PRE_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_AQ_WAR)))
{
player->RemoveAura(IPP_PHASE);
player->CastSpell(player, IPP_PHASE, false);
}
else if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ_WAR))
{
player->RemoveAura(IPP_PHASE_AQ);
player->CastSpell(player, IPP_PHASE_AQ, false);
}
break;
case AREA_HIVE_ASHI:
if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_PRE_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_AQ)))
if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_PRE_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_AQ_WAR)))
{
player->RemoveAura(IPP_PHASE);
player->CastSpell(player, IPP_PHASE, false);
}
else if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ_WAR))
{
player->RemoveAura(IPP_PHASE_AQ);
player->CastSpell(player, IPP_PHASE_AQ, false);
}
break;
case AREA_HIVE_ZORA:
if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_PRE_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_AQ)))
if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_PRE_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_AQ_WAR)))
{
player->RemoveAura(IPP_PHASE);
player->CastSpell(player, IPP_PHASE, false);
}
else if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ_WAR))
{
player->RemoveAura(IPP_PHASE_AQ);
player->CastSpell(player, IPP_PHASE_AQ, false);
}
break;
case AREA_HIVE_REGAL:
if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_PRE_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_AQ)))
if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_PRE_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_AQ_WAR)))
{
player->RemoveAura(IPP_PHASE);
player->CastSpell(player, IPP_PHASE, false);
}
else if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ_WAR))
{
player->RemoveAura(IPP_PHASE_AQ);
player->CastSpell(player, IPP_PHASE_AQ, false);
}
break;
case AREA_BOUGH_SHADOW:
if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_ONYXIA))

View File

@@ -87,11 +87,8 @@ public:
return false;
}
/*
The Scarab Gong can still be seen after the AQ raid is released,
because during the original event some players could still activate it during the first 24 hours.
*/
if (sIndividualProgression->hasPassedProgression(target, PROGRESSION_AQ))
/* The Scarab Gong can still be seen after during the outdoor AQ war. */
if (sIndividualProgression->hasPassedProgression(target, PROGRESSION_AQ_WAR))
{
return sIndividualProgression->isBeforeProgression(target, PROGRESSION_PRE_AQ);
}