Files
mod-individual-progression/src/IndividualProgression.h
Grimfeather 5f5d8ffac2 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.
2025-05-21 02:45:34 +02:00

201 lines
7.0 KiB
C++

#ifndef AZEROTHCORE_INDIVIDUALPROGRESSION_H
#define AZEROTHCORE_INDIVIDUALPROGRESSION_H
#include "ScriptMgr.h"
#include "Player.h"
#include "Config.h"
#include "Chat.h"
#include "ScriptedCreature.h"
#include "GameObjectAI.h"
#include "MapMgr.h"
#include "ObjectAccessor.h"
#include "ObjectMgr.h"
#include "Group.h"
#include "Pet.h"
#include "DBCEnums.h"
#include "QuestDef.h"
#include "GameObject.h"
#include "AreaDefines.h"
#include "IWorld.h"
#include <regex>
typedef std::unordered_map<uint32, uint32> questXpMapType;
enum ProgressionBossIDs
{
RAGNAROS = 11502,
ONYXIA = 10184,
NEFARIAN = 11583,
CTHUN = 15727,
KELTHUZAD = 15990,
KELTHUZAD_40 = 351019,
MALCHEZAAR = 15690,
KAELTHAS = 19622,
ILLIDAN = 22917,
ZULJIN = 23863,
KILJAEDEN = 25315,
YOGGSARON = 33288,
ANUBARAK = 34564,
LICH_KING = 36597,
HALION = 39863
};
enum BuffSpells
{
HP_AURA_SPELL = 89501,
ABSORB_SPELL = 89505,
RANGED_HASTE_SPELL = 89507,
SPELL_RUNE_TAP = 48982,
SPELL_LIFE_STEAL = 20004,
IPP_PHASE = 89509,
IPP_PHASE_AQ = 89511
};
enum ProgressionQuestIDs
{
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
{
ZONE_AZUREMYST = 3524,
ZONE_BLOODMYST = 3525,
ZONE_GHOSTLANDS = 3433,
ZONE_EVERSONG = 3430,
ZONE_EXODAR = 3557,
ZONE_SILVERMOON = 3487,
ZONE_QUELDANAS = 4080,
ZONE_VEILED_SEA = 3479
};
enum ProgressionAreas
{
AREA_SERADANE = 356,
AREA_BOUGH_SHADOW = 438,
AREA_GROVE_OF_THE_ANCIENTS = 448,
AREA_WILDBEND_RIVER = 454,
AREA_TWILIGHT_GROVE = 856,
AREA_DREAM_BOUGH = 1111,
AREA_JADEMIR_LAKE = 1112,
AREA_TWILIGHT_VALE = 2077,
AREA_LIGHTS_HOPE = 2268,
AREA_HIVE_ASHI = 2742,
AREA_HIVE_ZORA = 2743,
AREA_HIVE_REGAL = 2744,
AREA_ARGENT_SUNREAVER_PAVILION = 4666,
AREA_ARGENT_SILVER_COVENANT_PAVILION = 4667,
AREA_ARGENT_PAVILION = 4674
};
enum ProgressionSettings
{
SETTING_PROGRESSION_STATE = 0
};
enum ProgressionState : uint8
{
PROGRESSION_START = 0,
PROGRESSION_MOLTEN_CORE = 1,
PROGRESSION_ONYXIA = 2,
PROGRESSION_BLACKWING_LAIR = 3,
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
{
// Values from LFGDungeons.dbc
RDF_CLASSIC = 258,
RDF_THE_BURNING_CRUSADE = 259,
RDF_THE_BURNING_CRUSADE_HEROIC = 260,
RDF_WRATH_OF_THE_LICH_KING = 261,
RDF_WRATH_OF_THE_LICH_KING_HEROIC = 262
};
enum PvPTitles : uint32
{
// Alliance
PRIVATE = 1,
CORPORAL = 2,
SERGEANT = 3,
MASTER_SERGEANT = 4,
SERGEANT_MAJOR = 5,
KNIGHT = 6,
KNIGHT_LIEUTENANT = 7,
KNIGHT_CAPTAIN = 8,
KNIGHT_CHAMPION = 9,
LIEUTENANT_COMMANDER = 10,
COMMANDER = 11,
MARSHAL = 12,
FIELD_MARSHAL = 13,
GRAND_MARSHAL = 14,
// Horde
SCOUT = 15,
GRUNT = 16,
SERGEANT_H = 17,
SENIOR_SERGEANT = 18,
FIRST_SERGEANT = 19,
STONE_GUARD = 20,
BLOOD_GUARD = 21,
LEGIONNAIRE = 22,
CENTURION = 23,
CHAMPION = 24,
LIEUTENANT_GENERAL = 25,
GENERAL = 26,
WARLORD = 27,
HIGH_WARLORD = 28
};
class IndividualProgression
{
public:
static IndividualProgression* instance();
std::map<uint32, uint8> customProgressionMap;
questXpMapType questXpMap;
float vanillaPowerAdjustment, vanillaHealthAdjustment, tbcPowerAdjustment, tbcHealthAdjustment, vanillaHealingAdjustment, tbcHealingAdjustment, previousGearTuning;
bool enabled, questXpFix, hunterPetLevelFix, enforceGroupRules, fishingFix, simpleConfigOverride, questMoneyAtLevelCap, repeatableVanillaQuestsXp, disableDefaultProgression, earlyDungeonSet2, requireNaxxStrath, pvpGearRequirements, excludeAccounts;
int progressionLimit, startingProgression, tbcRacesProgressionLevel, deathKnightProgressionLevel, deathKnightStartingProgression;
std::string excludedAccountsRegex;
bool hasPassedProgression(Player* player, ProgressionState state) const;
static bool isBeforeProgression(Player* player, ProgressionState state) ;
void UpdateProgressionState(Player* player, ProgressionState newState) const;
static void ForceUpdateProgressionState(Player* player, ProgressionState newState);
void CheckAdjustments(Player* player) const;
void ApplyGearStatsTuning(Player* player, float& computedAdjustment, ItemTemplate const* item) const;
void ComputeGearTuning(Player* player, float& computedAdjustment, ItemTemplate const* item) const;
void AdjustVanillaStats(Player* player) const;
void AdjustTBCStats(Player* player) const;
void AdjustWotLKStats(Player* player) const;
bool hasCustomProgressionValue(uint32 creatureEntry);
void checkKillProgression(Player* player, Creature* killed);
static void LoadCustomProgressionEntries(const std::string& customProgressionString);
static void AdjustStats(Player* player, float computedAdjustment, float computedHealingAdjustment);
static float ComputeVanillaAdjustment(uint8 playerLevel, float configAdjustmentValue);
static uint8 GetAccountProgression(uint32 accountId);
};
#define sIndividualProgression IndividualProgression::instance()
#endif //AZEROTHCORE_INDIVIDUALPROGRESSION_H