From 28de6ca146225e71ff556f5ad7a167952c8ccb28 Mon Sep 17 00:00:00 2001 From: Grimfeather <88028633+Grimfeather@users.noreply.github.com> Date: Mon, 24 Nov 2025 17:37:46 +0100 Subject: [PATCH] fix AQ war issues (#880) - Chaos and Destruction quest has been changed. - Before you get the Chaos and Destruction quest you have to finish 3 quests to kill the hive lords. - after each hive lord quest you can pick up a quest in the Cenarion Hold from the researchers. - IPPhase changes are now instant, no longer only on area changes - the AQ gate opening animation now properly displays - during the AQ war you have to manually open the AQ gate. it only stays open for 16 minutes - fixed spawn of Lieutenant General Nokhor - added 3 Colossal Anubisath Warbringer spawns (more can be added later) --- data/sql/world/base/00_cleanup.sql | 10 + data/sql/world/base/aq_gate_quest.sql | 49 +- data/sql/world/base/aq_war.sql | 74 +- data/sql/world/base/aq_war_effort.sql | 7 +- src/IndividualProgression.cpp | 443 ++++++++++++ src/IndividualProgression.h | 3 + src/IndividualProgressionAwarenessScripts.cpp | 38 ++ src/IndividualProgressionPlayer.cpp | 632 +----------------- src/cs_individualProgression.cpp | 4 +- src/vanillaScripts/aq_scripts.cpp | 2 +- 10 files changed, 575 insertions(+), 687 deletions(-) diff --git a/data/sql/world/base/00_cleanup.sql b/data/sql/world/base/00_cleanup.sql index cbaecb5..041b6d6 100644 --- a/data/sql/world/base/00_cleanup.sql +++ b/data/sql/world/base/00_cleanup.sql @@ -15,6 +15,16 @@ DELETE FROM `game_event_creature` WHERE `guid` IN (208207, 208240, 208251, 20835 -- remove AzerothCore area triggers used by WotLK Scourge Invasion Event DELETE FROM `areatrigger_involvedrelation` WHERE `id` IN (4092, 4094, 4095, 4096, 4098, 4099, 4100, 4101, 4103, 4104, 4105, 5151, 5152, 5153, 5154, 5158, 5159, 5160, 5161); + +/* the following edits are temporary */ + + +-- restore AC entries that were wrongly overwritten by AQ war bosses +DELETE FROM `pool_template` WHERE `entry` IN (15813, 15818); +INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES +(15813,1,'Thousand Needles - Ore Pool - Iron Deposit / Silver Vein / Gold Vein'), +(15818,1,'Thousand Needles - Ore Pool - Iron Deposit / Silver Vein / Gold Vein'); + -- undo Shattrath phasing, now done with phasemask UPDATE `creature_template` SET `ScriptName` = '' WHERE `entry` IN (18594, 25167, 27666, 27667); diff --git a/data/sql/world/base/aq_gate_quest.sql b/data/sql/world/base/aq_gate_quest.sql index 0d026cb..30abe84 100644 --- a/data/sql/world/base/aq_gate_quest.sql +++ b/data/sql/world/base/aq_gate_quest.sql @@ -51,7 +51,7 @@ UPDATE `quest_template_locale` SET `Details` = 'Commençons par le commencement -- New 'Bang a Gong!' quest. No rewards for completing this version. No mount, no title. Currently the Mallet of Zul'Farrak is required to bang the gong. -- New 'Chaos and Destruction' quest. Kill Colossus of Zora(15740), Regal(15741) and Ashi(15742) -DELETE FROM `quest_template` WHERE `ID` IN (108743, 108744); +DELETE FROM `quest_template` WHERE `ID` IN (108743, 108744, 108745, 108746, 108747); INSERT INTO `quest_template` (`ID`, `QuestType`, `QuestLevel`, `MinLevel`, `QuestSortID`, `QuestInfoID`, `SuggestedGroupNum`, `RequiredFactionId1`, `RequiredFactionId2`, `RequiredFactionValue1`, `RequiredFactionValue2`, `RewardNextQuest`, `RewardXPDifficulty`, `RewardMoney`, `RewardMoneyDifficulty`, `RewardDisplaySpell`, `RewardSpell`, `RewardHonor`, `RewardKillHonor`, `StartItem`, `Flags`, `RequiredPlayerKills`, `RewardItem1`, `RewardAmount1`, `RewardItem2`, `RewardAmount2`, `RewardItem3`, `RewardAmount3`, `RewardItem4`, `RewardAmount4`, `ItemDrop1`, `ItemDropQuantity1`, `ItemDrop2`, `ItemDropQuantity2`, `ItemDrop3`, `ItemDropQuantity3`, `ItemDrop4`, `ItemDropQuantity4`, `RewardChoiceItemID1`, `RewardChoiceItemQuantity1`, `RewardChoiceItemID2`, `RewardChoiceItemQuantity2`, `RewardChoiceItemID3`, `RewardChoiceItemQuantity3`, `RewardChoiceItemID4`, `RewardChoiceItemQuantity4`, `RewardChoiceItemID5`, `RewardChoiceItemQuantity5`, `RewardChoiceItemID6`, `RewardChoiceItemQuantity6`, @@ -60,11 +60,37 @@ INSERT INTO `quest_template` (`ID`, `QuestType`, `QuestLevel`, `MinLevel`, `Ques `RequiredItemCount1`, `RequiredItemCount2`, `RequiredItemCount3`, `RequiredItemCount4`, `RequiredItemCount5`, `RequiredItemCount6`, `Unknown0`, `ObjectiveText1`, `ObjectiveText2`, `ObjectiveText3`, `ObjectiveText4`, `VerifiedBuild`) VALUES (108743, 0, 60, 60, 1377, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Simply Bang a Gong!', '', '', NULL, 'Return to The Scarab Gong in Silithus.', 0, 0, 0, 0, 0, 0, 0, 0, 9240, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 3, '', '', '', '', 12340), -(108744, 2, 60, 60, 1377, 82, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 910, 7, 0, 609, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172800, 0, 'Chaos and Destruction', 'Kill the Colossus of Ashi, Regal and Zora.', '', '', 'Return to Jonathan the Revelator at the Scarab Gong.', 15740, 15741, 15742, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', '', '', NULL); +(108744, 2, 60, 60, 1377, 82, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 910, 7, 0, 609, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Chaos and Destruction', 'Kill Lieutenant General Nokhor, 3 Colossal Anubisath Warbringers and 12 Supreme Anubisath Warbringers.', '', '', 'Return to Jonathan the Revelator at the Scarab Gong.', 15818, 15743, 15758, 0, 1, 3, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', '', '', NULL), +(108745, 2, 60, 60, 1377, 82, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 910, 7, 0, 609, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Colossus of Zora', 'Kill the Colossus of Zora.', '', '', 'Return to Jonathan the Revelator at the Scarab Gong.', 15740, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', '', '', NULL), +(108746, 2, 60, 60, 1377, 82, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 910, 7, 0, 609, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Colossus of Regal', 'Kill the Colossus of Regal.', '', '', 'Return to Jonathan the Revelator at the Scarab Gong.', 15741, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', '', '', NULL), +(108747, 2, 60, 60, 1377, 82, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 910, 7, 0, 609, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Colossus of Ashi', 'Kill the Colossus of Ashi.', '', '', 'Return to Jonathan the Revelator at the Scarab Gong.', 15742, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', '', '', NULL); -UPDATE `quest_template` SET `RewardNextQuest` = 108744 WHERE `ID` = 8743; +UPDATE `quest_template` SET `RewardNextQuest` = 0 WHERE `ID` = 8743; -- can be removed later --- update quest texts for the new 'Bang a Gong!' quest +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 19 AND `ConditionTypeOrReference` = 8 AND `SourceEntry` IN (8286, 8857, 8858, 8859, 108743, 108744, 108745, 108746, 108747); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, +`ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +-- +(19, 0, 8286, 0, 0, 8, 0, 108850, 0, 0, 0, 0, 0, '', 'Quest \'What Tomorrow Brings\' requires the \'Complete the War Effort\' quest to be completed'), +(19, 0, 8286, 0, 1, 8, 0, 108855, 0, 0, 0, 0, 0, '', 'Quest \'What Tomorrow Brings\' requires the \'Complete the War Effort\' quest to be completed'), +(19, 0, 8857, 0, 1, 8, 0, 108747, 0, 0, 0, 0, 0, '', 'Quest \'Secrets of the Colossus - Ashi\' requires the \'Colossus of Ashi\' quest to be completed'), +(19, 0, 8858, 0, 1, 8, 0, 108746, 0, 0, 0, 0, 0, '', 'Quest \'Secrets of the Colossus - Regal\' requires the \'Colossus of Regal\' quest to be completed'), +(19, 0, 8859, 0, 1, 8, 0, 108745, 0, 0, 0, 0, 0, '', 'Quest \'Secrets of the Colossus - Zora\' requires the \'Colossus of Zora\' quest to be completed'), +(19, 0, 108743, 0, 0, 8, 0, 8743, 0, 0, 1, 0, 0, '', 'Quest \'Simply Bang a Gong!\' requires the \'Bang a Gong!\' quest to NOT be completed'), +(19, 0, 108743, 0, 0, 8, 0, 108850, 0, 0, 0, 0, 0, '', 'Quest \'Simply Bang a Gong!\' requires the \'Complete the War Effort\' quest to be completed'), +(19, 0, 108743, 0, 1, 8, 0, 8743, 0, 0, 1, 0, 0, '', 'Quest \'Simply Bang a Gong!\' requires the \'Bang a Gong!\' quest to NOT be completed'), +(19, 0, 108743, 0, 1, 8, 0, 108855, 0, 0, 0, 0, 0, '', 'Quest \'Simply Bang a Gong!\' requires the \'Complete the War Effort\' quest to be completed'), +(19, 0, 108744, 0, 0, 8, 0, 108745, 0, 0, 0, 0, 0, '', 'Quest \'Chaos and Destruction\' requires the \'Colossus of Zora\' quest to be completed'), +(19, 0, 108744, 0, 0, 8, 0, 108746, 0, 0, 0, 0, 0, '', 'Quest \'Chaos and Destruction\' requires the \'Colossus of Regal\' quest to be completed'), +(19, 0, 108744, 0, 0, 8, 0, 108747, 0, 0, 0, 0, 0, '', 'Quest \'Chaos and Destruction\' requires the \'Colossus of Ashi\' quest to be completed'), +(19, 0, 108745, 0, 0, 8, 0, 8743, 0, 0, 0, 0, 0, '', 'Quest \'Colossus of Zora\' requires either quest 8743 or 108743 to be completed'), +(19, 0, 108745, 0, 1, 8, 0, 108743, 0, 0, 0, 0, 0, '', 'Quest \'Colossus of Zora\' requires either quest 8743 or 108743 to be completed'), +(19, 0, 108746, 0, 0, 8, 0, 8743, 0, 0, 0, 0, 0, '', 'Quest \'Colossus of Regal\' requires either quest 8743 or 108743 to be completed'), +(19, 0, 108746, 0, 1, 8, 0, 108743, 0, 0, 0, 0, 0, '', 'Quest \'Colossus of Regal\' requires either quest 8743 or 108743 to be completed'), +(19, 0, 108747, 0, 0, 8, 0, 8743, 0, 0, 0, 0, 0, '', 'Quest \'Colossus of Ashi\' requires either quest 8743 or 108743 to be completed'), +(19, 0, 108747, 0, 1, 8, 0, 108743, 0, 0, 0, 0, 0, '', 'Quest \'Colossus of Ashi\' requires either quest 8743 or 108743 to be completed'); + +-- update quest texts for the new 'Simply Bang a Gong!' quest DELETE FROM `quest_request_items` WHERE `ID` IN (108743, 108744); INSERT INTO `quest_request_items` (`ID`, `EmoteOnComplete`, `EmoteOnIncomplete`, `CompletionText`, `VerifiedBuild`) VALUES (108743, 1, 0, 'The Scarab Gong looms ominously before you. Steel yourself, $N; for once the Scarab Gong is rung, the gates of Ahn\'Qiraj will be opened.$B$BHowever, the Brood of Nozdomu and the Cenarion Circle will not reward you, unless you aid them.', 12340), @@ -82,13 +108,6 @@ INSERT INTO `quest_template_addon` (`ID`, `MaxLevel`, `AllowableClasses`, `Sourc (108743, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), (108744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); -DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 19 AND `ConditionTypeOrReference` = 8 AND `SourceEntry` IN (108744); -INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, -`ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES --- -(19, 0, 108744, 0, 0, 8, 0, 8743, 0, 0, 0, 0, 0, '', 'Quest: Chaos and Destruction is only available after the player completes either 8743 or 108743'), -(19, 0, 108744, 0, 1, 8, 0, 108743, 0, 0, 0, 0, 0, '', 'Quest: Chaos and Destruction is only available after the player completes either 8743 or 108743'); - UPDATE `quest_template` SET `QuestDescription` = '' WHERE `ID` = 108743; -- Connect new 'Bang a Gong!' quest to the Scarab Gong in Silithus @@ -98,8 +117,8 @@ INSERT INTO `gameobject_queststarter` (`id`, `quest`) VALUES (180717, 8743), (18 DELETE FROM `gameobject_questender` WHERE `id` = 180717 AND `quest` IN (8743, 108743); INSERT INTO `gameobject_questender` (`id`, `quest`) VALUES (180717, 8743), (180717, 108743); -DELETE FROM `creature_queststarter` WHERE `id` = 15693 AND `quest` = 108744; -INSERT INTO `creature_queststarter` (`id`, `quest`) VALUES (15693, 108744); +DELETE FROM `creature_queststarter` WHERE `id` = 15693 AND `quest` IN (108744, 108745, 108746, 108747); +INSERT INTO `creature_queststarter` (`id`, `quest`) VALUES (15693, 108744), (15693, 108745), (15693, 108746), (15693, 108747); -DELETE FROM `creature_questender` WHERE `id` = 15693 AND `quest` IN (8745, 108744); -INSERT INTO `creature_questender` (`id`, `quest`) VALUES (15693, 8745), (15693, 108744); +DELETE FROM `creature_questender` WHERE `id` = 15693 AND `quest` IN (8745, 108744, 108745, 108746, 108747); +INSERT INTO `creature_questender` (`id`, `quest`) VALUES (15693, 8745), (15693, 108744), (15693, 108745), (15693, 108746), (15693, 108747); diff --git a/data/sql/world/base/aq_war.sql b/data/sql/world/base/aq_war.sql index c5bf051..4ca751c 100644 --- a/data/sql/world/base/aq_war.sql +++ b/data/sql/world/base/aq_war.sql @@ -13,7 +13,7 @@ INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_ `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES -- -(15634, 0, 0, 0, 14, 0, 100, 0, 1000, 200, 50000, 60000, 0, 0, 11, 25839, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Priestess of the Moon - On Friendly Health - Cast Mass Healing'), +(15634, 0, 0, 0, 101, 0, 100, 0, 1, 20, 0, 50000, 60000, 0, 11, 25839, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Priestess of the Moon - On Near Player - Cast Mass Healing'), -- (15740, 0, 0, 0, 0, 0, 100, 0, 60000, 60000, 60000, 60000, 0, 0, 11, 26167, 64, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Colossus of Zora - In Combat - Cast Colossal Smash'), (15741, 0, 0, 0, 0, 0, 100, 0, 60000, 60000, 60000, 60000, 0, 0, 11, 26167, 64, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Colossus of Regal - In Combat - Cast Colossal Smash'), -- https://www.youtube.com/watch?v=F4aAAo_GSrw @@ -35,7 +35,7 @@ INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_ DELETE FROM `creature_text` WHERE `CreatureID` IN (15813, 15818); INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES (15813, 0, 0, 'Kneel before me, mortal! Kneel before Zod!', 12, 7, 100, 0, 0, 0, 11471, 0, 'Qiraji Officer Zod'), -(15818, 0, 0, 'Burn in hate, $r.', 12, 7, 100, 0, 0, 0, 11475, 0, 'Lieutenant General Nokhor'); +(15818, 0, 0, 'Burn in hate, $r.', 12, 7, 100, 0, 0, 0, 11475, 0, 'Lieutenant General Nokhor'); -- need to check language, set to common, currently can't understand it. DELETE FROM `creature_text` WHERE `CreatureID`= 15693; INSERT INTO `creature_text` (`CreatureID`,`GroupID`,`ID`,`Text`,`Type`,`Language`,`Probability`,`Emote`,`Duration`,`Sound`,`BroadcastTextId`, `TextRange`, `comment`) VALUES @@ -46,7 +46,7 @@ INSERT INTO `creature_text` (`CreatureID`,`GroupID`,`ID`,`Text`,`Type`,`Language (15693, 4, 0, 'Colossus of Regal hears the call to battle and rises to serve its master.', 16, 0, 100, 1, 0, 0, 0, 4, 'EMOTE_AQ_GONG_5'); -- add bosses to Silithus and Darkshore -DELETE FROM `creature` WHERE `id1` IN (15740, 15741, 15742, 15758, 15810, 15813, 15818); +DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+101 AND @CGUID+140; INSERT INTO `creature` (`guid`, `id1`, `id2`, `id3`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `VerifiedBuild`) VALUES (@CGUID+101,15810,0,0,1,0,0,1,@IPPPHASE,0,4386.996582, 550.179260, 54.762119, 0.581150,1800,5,0,0,0,1,0,0,0,'',0), @@ -71,40 +71,58 @@ INSERT INTO `creature` (`guid`, `id1`, `id2`, `id3`, `map`, `zoneId`, `areaId`, (@CGUID+117,15741,0,0,1,0,0,1,@IPPPHASE,0, -7824.52, 663.901, -34.1379, 2.20763,3600,5,0,0,0,1,0,0,0,'',0), -- Colossus of Regal (@CGUID+118,15740,0,0,1,0,0,1,@IPPPHASE,0, -7340.2, 1643.75, -34.0787, 4.01405,3600,5,0,0,0,1,0,0,0,'',0), -- Colossus of Zora -- -(@CGUID+119,15758,0,0,1,0,0,1,@IPPPHASE,0,-7623.261719, 1416.035767, 4.126772, 4.945646,1800,5,0,0,0,1,0,0,0,'',0), -(@CGUID+120,15758,0,0,1,0,0,1,@IPPPHASE,0,-7659.168457, 1392.619751, 3.995544, 3.687438,1800,5,0,0,0,1,0,0,0,'',0), -(@CGUID+121,15758,0,0,1,0,0,1,@IPPPHASE,0,-7688.503418, 1428.886963, 3.855407, 2.550966,1800,5,0,0,0,1,0,0,0,'',0), +(@CGUID+119,15758,0,0,1,0,0,1,@IPPPHASE,0, -7623.261719, 1416.035767, 4.126772, 4.945646,1800,5,0,0,0,1,0,0,0,'',0), +(@CGUID+120,15758,0,0,1,0,0,1,@IPPPHASE,0, -7659.168457, 1392.619751, 3.995544, 3.687438,1800,5,0,0,0,1,0,0,0,'',0), +(@CGUID+121,15758,0,0,1,0,0,1,@IPPPHASE,0, -7688.503418, 1428.886963, 3.855407, 2.550966,1800,5,0,0,0,1,0,0,0,'',0), (@CGUID+122,15758,0,0,1,0,0,1,@IPPPHASE,0, -7652.402344, 1464.758667, 4.526736, 0.600033,1800,5,0,0,0,1,0,0,0,'',0), -(@CGUID+123,15818,0,0,1,0,0,1,@IPPPHASE,1, -7644.985840, 1422.093628, 3.326948, 5.378395,1800,0,0,0,0,0,0,0,0,'',0), -- boss Silithus 1 +(@CGUID+123,15818,0,0,1,0,0,1,@IPPPHASE,1, -7644.985840, 1422.093628, 3.326948, 5.378395,1800,15,0,0,0,1,0,0,0,'',0), -- boss Silithus 1 -- (@CGUID+124,15758,0,0,1,0,0,1,@IPPPHASE,0, -7806.652832, 855.699951, -4.778733, 0.353429,1800,5,0,0,0,1,0,0,0,'',0), (@CGUID+125,15758,0,0,1,0,0,1,@IPPPHASE,0, -7831.444336, 808.078979, -9.832852, 4.501119,1800,5,0,0,0,1,0,0,0,'',0), (@CGUID+126,15758,0,0,1,0,0,1,@IPPPHASE,0, -7881.184082, 864.466614, -1.765002, 2.737900,1800,5,0,0,0,1,0,0,0,'',0), (@CGUID+127,15758,0,0,1,0,0,1,@IPPPHASE,0, -7832.478027, 912.945801, -2.498297, 0.817600,1800,5,0,0,0,1,0,0,0,'',0), -(@CGUID+128,15818,0,0,1,0,0,1,@IPPPHASE,1, -7830.405273, 851.316223, -4.844313, 4.929938,1800,0,0,0,0,0,0,0,0,'',0), -- boss Silithus 2 +(@CGUID+128,15818,0,0,1,0,0,1,@IPPPHASE,1, -7830.405273, 851.316223, -4.844313, 4.929938,1800,15,0,0,0,1,0,0,0,'',0), -- boss Silithus 2 -- -(@CGUID+129,15758,0,0,1,0,0,1,@IPPPHASE,0,-6290.943848, 736.276489, 11.109619, 5.837865,1800,5,0,0,0,1,0,0,0,'',0), -(@CGUID+130,15758,0,0,1,0,0,1,@IPPPHASE,0,-6303.743652, 703.045105, 11.219690, 4.562379,1800,5,0,0,0,1,0,0,0,'',0), +(@CGUID+129,15758,0,0,1,0,0,1,@IPPPHASE,0, -6290.943848, 736.276489, 11.109619, 5.837865,1800,5,0,0,0,1,0,0,0,'',0), +(@CGUID+130,15758,0,0,1,0,0,1,@IPPPHASE,0, -6303.743652, 703.045105, 11.219690, 4.562379,1800,5,0,0,0,1,0,0,0,'',0), (@CGUID+131,15758,0,0,1,0,0,1,@IPPPHASE,0, -6349.953613, 715.365662, 2.037906, 3.263330,1800,5,0,0,0,1,0,0,0,'',0), (@CGUID+132,15758,0,0,1,0,0,1,@IPPPHASE,0, -6346.292969, 777.375793, 1.782544, 1.899878,1800,5,0,0,0,1,0,0,0,'',0), -(@CGUID+133,15818,0,0,1,0,0,1,@IPPPHASE,1, -6322.091797, 738.599060, 8.332182, 2.500710,1800,0,0,0,0,0,0,0,0,'',0); -- boss Silithus 3 +(@CGUID+133,15818,0,0,1,0,0,1,@IPPPHASE,1, -6322.091797, 738.599060, 8.332182, 2.500710,1800,15,0,0,0,1,0,0,0,'',0), -- boss Silithus 3 +-- +(@CGUID+134,15743,0,0,1,0,0,1,@IPPPHASE,0, -7953.03, 1588.4, -2.4214, 0.0139782, 1800, 0, 0, 345840, 0, 0, 0, 0, 0, '', 0), +(@CGUID+135,15743,0,0,1,0,0,1,@IPPPHASE,0, -7947.04, 1538.89, 0.298302, 6.05763, 1800, 0, 0, 345840, 0, 0, 0, 0, 0, '', 0), +(@CGUID+136,15743,0,0,1,0,0,1,@IPPPHASE,0, -8107.13, 1522.33, 2.60935, 6.03569, 1800, 0, 0, 345840, 0, 0, 0, 0, 0, '', 0), +(@CGUID+137,15744,0,0,1,0,0,1,@IPPPHASE,0, -8107.33, 1536.68, 3.37718, 0.315558, 1800, 5, 0, 194250, 51360, 1, 0, 0, 0, '', 0), +-- +(@CGUID+138, 15797,0,0,1,0,0,1,1,0, -6826.11, 813.571, 51.6444, 5.49779, 300, 0, 0, 0, 0, 0, 0, 0, 0, 'npc_ipp_aqwar', 0), -- Colossus Researcher Sophia +(@CGUID+139, 15798,0,0,1,0,0,1,1,0, -6824.03, 813.17, 51.4418, 3.52557, 300, 0, 0, 0, 0, 0, 0, 0, 0, 'npc_ipp_aqwar', 0), -- Colossus Researcher Nestor +(@CGUID+140, 15799,0,0,1,0,0,1,1,0, -6825.01, 811.389, 51.8466, 1.67552, 300, 0, 0, 0, 0, 0, 0, 0, 0, 'npc_ipp_aqwar', 0); -- Colossus Researcher Eazel --- remove flags_extra = 1 for Lieutenant General Nokhor +-- nerf hive boss HP so they're doable for a raid of 40 +UPDATE `creature_template` SET `HealthModifier` = 600 WHERE entry IN (15740, 15741, 15742); + +-- remove flags_extra = 1 (CREATURE_FLAG_EXTRA_INSTANCE_BIND) for Lieutenant General Nokhor UPDATE `creature_template` SET `flags_extra` = 0 WHERE `entry` = 15818; -DELETE FROM `pool_template` WHERE `entry` IN (15813, 15818); -INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES -(15813, 1, "AQ War Event Darkshore Boss"), -(15818, 1, "AQ War Event Silithus Boss"); +-- Supreme Anubisath Warbringer +UPDATE `creature_template` SET `maxgold` = 23909 WHERE `entry` = 15758; -- previously 83909 -DELETE FROM `pool_creature` WHERE `pool_entry` = 15813; +-- General Rajaxx +UPDATE `creature_text` SET `TextRange` = 4 WHERE `CreatureID` = 15341 AND `GroupID` = 12; + +DELETE FROM `pool_template` WHERE `entry` IN (601053, 601054); +INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES +(601053, 1, "AQ War Event Darkshore Boss"), +(601054, 1, "AQ War Event Silithus Boss"); + +DELETE FROM `pool_creature` WHERE `pool_entry` IN (15813, 15818, 601053, 601054); -- 15813, 15818 need to be removed later on INSERT INTO `pool_creature` (`guid`, `pool_entry`, `chance`, `description`) VALUES -(@CGUID+105, 15813, 0, 'AQ War Event Darkshore Boss'), -(@CGUID+110, 15813, 0, 'AQ War Event Darkshore Boss'), -(@CGUID+115, 15813, 0, 'AQ War Event Darkshore Boss'), -(@CGUID+123, 15813, 0, 'AQ War Event Silithus Boss'), -(@CGUID+128, 15813, 0, 'AQ War Event Slithus Boss'), -(@CGUID+133, 15813, 0, 'AQ War Event Silithus Boss'); +(@CGUID+105, 601053, 0, 'AQ War Event Darkshore Boss'), +(@CGUID+110, 601053, 0, 'AQ War Event Darkshore Boss'), +(@CGUID+115, 601053, 0, 'AQ War Event Darkshore Boss'), +(@CGUID+123, 601054, 0, 'AQ War Event Silithus Boss'), +(@CGUID+128, 601054, 0, 'AQ War Event Silithus Boss'), +(@CGUID+133, 601054, 0, 'AQ War Event Silithus Boss'); -- add Resonating Crystal Formations to Silithus and Darkshore DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+101 AND @OGUID+106; @@ -119,10 +137,6 @@ INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, -- set Resonating Crystal Formations to 'Not selectable' UPDATE `gameobject_template_addon` SET `flags` = 16 WHERE `entry` = 180810; --- Remove Colossus pathing -DELETE FROM `waypoint_data` WHERE `id` IN (157400, 157410, 157420); -DELETE FROM `creature_template_addon` WHERE `entry` IN (15740, 15741, 15742); - -- add loot to Colossus of Zora, Regal and Ashi DELETE FROM `creature_loot_template` WHERE `entry` = 15740; INSERT INTO `creature_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES @@ -195,9 +209,3 @@ INSERT INTO `creature_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `Q -- same lootID for all 3 Colossus bosses DELETE FROM `creature_loot_template` WHERE `entry` IN (15741, 15742); UPDATE `creature_template` SET `LootId` = 15740 WHERE `entry` IN (15740, 15741, 15742); - --- General Rajaxx -UPDATE `creature_text` SET `TextRange` = 4 WHERE `CreatureID` = 15341 AND `GroupID` = 12; - --- Supreme Anubisath Warbringer -UPDATE `creature_template` SET `maxgold` = 23909 WHERE `entry` = 15758; -- previously 83909 diff --git a/data/sql/world/base/aq_war_effort.sql b/data/sql/world/base/aq_war_effort.sql index 6d6b498..ba25412 100644 --- a/data/sql/world/base/aq_war_effort.sql +++ b/data/sql/world/base/aq_war_effort.sql @@ -211,14 +211,9 @@ INSERT INTO `creature_questender` (`id`, `quest`) VALUES (15701, 108850); -- Hide 'Complete the War Effort' quests until the player has completed all collection quests at least once -DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 19 AND `ConditionTypeOrReference` = 8 AND `SourceEntry` IN (8286, 108743, 108850, 108855); +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 19 AND `ConditionTypeOrReference` = 8 AND `SourceEntry` IN (108850, 108855); INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES --- -(19, 0, 108743, 0, 0, 8, 0, 108850, 0, 0, 0, 0, 0, '', 'Quest \'Simply Bang a Gong!\' requires the \'Complete the War Effort\' quest to be completed'), -(19, 0, 108743, 0, 1, 8, 0, 108855, 0, 0, 0, 0, 0, '', 'Quest \'Simply Bang a Gong!\' requires the \'Complete the War Effort\' quest to be completed'), -(19, 0, 8286, 0, 0, 8, 0, 108850, 0, 0, 0, 0, 0, '', 'Quest \'What Tomorrow Brings\' requires the \'Complete the War Effort\' quest to be completed'), -(19, 0, 8286, 0, 1, 8, 0, 108855, 0, 0, 0, 0, 0, '', 'Quest \'What Tomorrow Brings\' requires the \'Complete the War Effort\' quest to be completed'), -- Alliance (19, 0, 108850, 0, 0, 8, 0, 8492, 0, 0, 0, 0, 0, '', 'Quest \'Complete the War Effort\' requires QUEST_COPPER_BARS_A'), (19, 0, 108850, 0, 0, 8, 0, 8494, 0, 0, 0, 0, 0, '', 'Quest \'Complete the War Effort\' requires QUEST_IRON_BARS'), diff --git a/src/IndividualProgression.cpp b/src/IndividualProgression.cpp index f61ff9f..e79844c 100644 --- a/src/IndividualProgression.cpp +++ b/src/IndividualProgression.cpp @@ -188,6 +188,449 @@ bool IndividualProgression::isExcludedFromProgression(Player* player) return (accountNameFound && std::regex_match(accountName, excludedAccountsRegex)); } +void IndividualProgression::checkIPPhasing(Player* player, uint32 newArea) +{ + player->RemoveAura(IPP_PHASE); + player->RemoveAura(IPP_PHASE_II); + player->RemoveAura(IPP_PHASE_III); + + switch (newArea) { + case AREA_DARKSHORE: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_PRE_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_AQ_WAR))) + { + 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_WAR))) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_WILDBEND_RIVER: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_PRE_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_AQ_WAR))) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_TWILIGHT_VALE: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_PRE_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_AQ_WAR))) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_SILITHUS: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_PRE_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_AQ_WAR))) + { + player->CastSpell(player, IPP_PHASE, false); + } + else if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ_WAR)) + { + player->CastSpell(player, IPP_PHASE_II, false); + } + break; + case AREA_SCARAB_WALL: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_PRE_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_AQ_WAR))) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_SCARAB_DAIS: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_PRE_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_AQ_WAR))) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_HIVE_ASHI: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_PRE_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_AQ_WAR))) + { + player->CastSpell(player, IPP_PHASE, false); + } + else if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ_WAR)) + { + player->CastSpell(player, IPP_PHASE_II, false); + } + break; + case AREA_HIVE_ZORA: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_PRE_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_AQ_WAR))) + { + player->CastSpell(player, IPP_PHASE, false); + } + else if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ_WAR)) + { + player->CastSpell(player, IPP_PHASE_II, false); + } + break; + case AREA_HIVE_REGAL: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_PRE_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_AQ_WAR))) + { + player->CastSpell(player, IPP_PHASE, false); + } + else if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ_WAR)) + { + player->CastSpell(player, IPP_PHASE_II, false); + } + break; + case AREA_BOUGH_SHADOW: + if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_ONYXIA)) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_SERADANE: + if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_ONYXIA)) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_DREAM_BOUGH: + if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_ONYXIA)) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_JADEMIR_LAKE: + if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_ONYXIA)) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_TWILIGHT_GROVE: + if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_ONYXIA)) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_DUROTAR: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_ROCKTUSK_FARM: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_TIRISFAL_GLADES: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_RUINS_OF_LORDAERON: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_MULGORE: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_VALLEY_OF_HEROES: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_ELWYNN_FOREST: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_DUN_MOROGH: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_TELDRASSIL: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_EASTERN_PLAGUELANDS: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_PESTILENT_SCAR: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_THE_MARRIS_STEAD: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_BLASTED_LANDS: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_RISE_OF_THE_DEFILER: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_DREADMAUL_HOLD: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_DREADMAUL_POST: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_THE_DARK_PORTAL: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) + { + player->CastSpell(player, IPP_PHASE, false); + } + else if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_NAXX40)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_PRE_TBC))) + { + player->CastSpell(player, IPP_PHASE_II, false); + } + break; + case AREA_SERPENTS_COIL: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_TANARIS: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_GADGETZAN: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_ABYSSAL_SANDS: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_BROKEN_PILLAR: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_WINTERSPRING: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_TIMBERMAW_POST: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_FROSTSABER_ROCK: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_ICE_THISTLE_HILLS: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_MAZTHORIL: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_AZSHARA: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_HALDARR_ENCAMPMENT: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_THE_SHATTERED_STRAND: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_SOUTHRIDGE_BEACH: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_BURNING_STEPPES: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_DRACO_DAR: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_BLACKROCK_MOUNTAIN: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_DREADMAUL_ROCK: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_RUINS_OF_THAURISSAN: + if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_PURGATION_ISLE: + if (sIndividualProgression->isBeforeProgression(player, PROGRESSION_AQ)) + { + player->CastSpell(player, IPP_PHASE, false); + } + else if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) + { + player->CastSpell(player, IPP_PHASE_II, false); + } + break; + case AREA_IRONTREE_WOOD: + if ((player->getClass() == CLASS_HUNTER) && ((player->GetQuestStatus(QUEST_THE_ANCIENT_LEAF) == QUEST_STATUS_INCOMPLETE) || (player->GetQuestStatus(QUEST_THE_ANCIENT_LEAF) == QUEST_STATUS_REWARDED))) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_TERRACE_OF_LIGHT: + if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_TBC_TIER_4)) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_FOREST_SONG: + if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_PRE_TBC)) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + case AREA_ARGENT_TOURNAMENT_GROUNDS: + case AREA_ARGENT_SUNREAVER_PAVILION: + case AREA_ARGENT_SILVER_COVENANT_PAVILION: + case AREA_THE_RING_OF_CHAMPIONS: + case AREA_THE_ASPIRANTS_RING: + case AREA_THE_ARGENT_VALIANTS_RING: + case AREA_THE_ALLIANCE_VALIANTS_RING: + case AREA_THE_HORDE_VALIANTS_RING: + case AREA_ARGENT_PAVILION: + if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_WOTLK_TIER_2)) + { + player->CastSpell(player, IPP_PHASE, false); + } + break; + default: + + uint32 mapid = player->GetMapId(); + + if (mapid == MAP_VAULT_OF_ARCHAVON) + { + if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_WOTLK_TIER_1) && sIndividualProgression->isBeforeProgression(player, PROGRESSION_WOTLK_TIER_2)) + { + player->CastSpell(player, IPP_PHASE, false); + break; + } + else if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_WOTLK_TIER_2) && sIndividualProgression->isBeforeProgression(player, PROGRESSION_WOTLK_TIER_3)) + { + player->CastSpell(player, IPP_PHASE, false); + player->CastSpell(player, IPP_PHASE_II, false); + break; + } + else if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_WOTLK_TIER_3)) + { + player->CastSpell(player, IPP_PHASE, false); + player->CastSpell(player, IPP_PHASE_II, false); + player->CastSpell(player, IPP_PHASE_III, false); + break; + } + } + if (mapid == MAP_SHADOWFANG_KEEP) + { + if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ) && sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40)) + { + player->CastSpell(player, IPP_PHASE, false); + break; + } + } + if (mapid == MAP_RAZORFEN_DOWNS) + { + if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ) && sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40)) + { + player->CastSpell(player, IPP_PHASE, false); + break; + } + } + if (mapid == MAP_SCARLET_MONASTERY) + { + if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ) && sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40)) + { + player->CastSpell(player, IPP_PHASE, false); + break; + } + } + if (mapid == MAP_STRATHOLME) + { + if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ) && sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40)) + { + player->CastSpell(player, IPP_PHASE, false); + break; + } + } + if (mapid == MAP_DIRE_MAUL) + { + if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ) && sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40)) + { + player->CastSpell(player, IPP_PHASE, false); + break; + } + } + } +} + void IndividualProgression::checkIPProgression(Player* killer) { if (!enabled || disableDefaultProgression) diff --git a/src/IndividualProgression.h b/src/IndividualProgression.h index 2eefa8c..92e4183 100644 --- a/src/IndividualProgression.h +++ b/src/IndividualProgression.h @@ -179,6 +179,8 @@ enum ProgressionAreas AREA_DRACO_DAR = 2421, AREA_RISE_OF_THE_DEFILER = 2517, AREA_PESTILENT_SCAR = 2622, + AREA_SCARAB_WALL = 2737, + AREA_SCARAB_DAIS = 2741, AREA_HIVE_ASHI = 2742, AREA_HIVE_ZORA = 2743, AREA_HIVE_REGAL = 2744, @@ -395,6 +397,7 @@ public: bool hasCustomProgressionValue(uint32 creatureEntry); bool isExcludedFromProgression(Player* player); bool isAttuned(Player* player); + void checkIPPhasing(Player* player, uint32 newArea); void checkIPProgression(Player* player); void UpdateProgressionQuests(Player* player); void UpdateProgressionAchievements(Player* player, uint16 achievementID); diff --git a/src/IndividualProgressionAwarenessScripts.cpp b/src/IndividualProgressionAwarenessScripts.cpp index da87c7c..39e45ca 100644 --- a/src/IndividualProgressionAwarenessScripts.cpp +++ b/src/IndividualProgressionAwarenessScripts.cpp @@ -386,6 +386,43 @@ public: } }; +class npc_ipp_aqwar : public CreatureScript +{ +public: + npc_ipp_aqwar() : CreatureScript("npc_ipp_aqwar") { } + + struct npc_ipp_aqwarAI: ScriptedAI + { + explicit npc_ipp_aqwarAI(Creature* creature) : ScriptedAI(creature) { }; + + bool CanBeSeen(Player const* player) override + { + if (player->IsGameMaster()) + { + return true; + } + + Player* target = ObjectAccessor::FindConnectedPlayer(player->GetGUID()); + + if (sIndividualProgression->hasPassedProgression(target, PROGRESSION_AQ_WAR)) + { + return false; + } + else if (sIndividualProgression->hasPassedProgression(target, PROGRESSION_PRE_AQ)) + { + return true; + } + + return false; + } + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return new npc_ipp_aqwarAI(creature); + } +}; + class npc_ipp_si : public CreatureScript { public: @@ -754,6 +791,7 @@ void AddSC_mod_individual_progression_awareness() new npc_ipp_preaq(); // Cenarion Hold NPCs new npc_ipp_we(); // War Effort NPCs in cities new npc_ipp_aq(); + new npc_ipp_aqwar(); // only visible during AQ war new npc_ipp_si(); // Scourge Invasion new npc_ipp_pre_naxx40(); // Scourge Invasion new npc_ipp_naxx40(); diff --git a/src/IndividualProgressionPlayer.cpp b/src/IndividualProgressionPlayer.cpp index 7f5b891..bbc77b0 100644 --- a/src/IndividualProgressionPlayer.cpp +++ b/src/IndividualProgressionPlayer.cpp @@ -523,637 +523,7 @@ public: void OnPlayerUpdateArea(Player* player, uint32 /*oldArea*/, uint32 newArea) override { - switch (newArea) { - case AREA_DARKSHORE: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_PRE_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_AQ_WAR))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - 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_WAR))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_WILDBEND_RIVER: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_PRE_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_AQ_WAR))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_TWILIGHT_VALE: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_PRE_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_AQ_WAR))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_SILITHUS: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_PRE_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_AQ_WAR))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - else if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ_WAR)) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE_II, false); - } - break; - case AREA_HIVE_ASHI: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_PRE_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_AQ_WAR))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - else if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ_WAR)) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE_II, false); - } - break; - case AREA_HIVE_ZORA: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_PRE_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_AQ_WAR))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - else if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ_WAR)) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE_II, false); - } - break; - case AREA_HIVE_REGAL: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_PRE_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_AQ_WAR))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - else if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ_WAR)) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE_II, false); - } - break; - case AREA_BOUGH_SHADOW: - if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_ONYXIA)) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_SERADANE: - if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_ONYXIA)) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_DREAM_BOUGH: - if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_ONYXIA)) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_JADEMIR_LAKE: - if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_ONYXIA)) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_TWILIGHT_GROVE: - if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_ONYXIA)) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_DUROTAR: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_ROCKTUSK_FARM: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_TIRISFAL_GLADES: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_RUINS_OF_LORDAERON: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_MULGORE: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_VALLEY_OF_HEROES: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_ELWYNN_FOREST: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_DUN_MOROGH: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_TELDRASSIL: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_EASTERN_PLAGUELANDS: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_PESTILENT_SCAR: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_THE_MARRIS_STEAD: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_BLASTED_LANDS: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_RISE_OF_THE_DEFILER: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_DREADMAUL_HOLD: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_DREADMAUL_POST: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_THE_DARK_PORTAL: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - else if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_NAXX40)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_PRE_TBC))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE_II, false); - } - break; - case AREA_SERPENTS_COIL: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_TANARIS: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_GADGETZAN: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_ABYSSAL_SANDS: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_BROKEN_PILLAR: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_WINTERSPRING: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_TIMBERMAW_POST: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_FROSTSABER_ROCK: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_ICE_THISTLE_HILLS: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_MAZTHORIL: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_AZSHARA: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_HALDARR_ENCAMPMENT: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_THE_SHATTERED_STRAND: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_SOUTHRIDGE_BEACH: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_BURNING_STEPPES: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_DRACO_DAR: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_BLACKROCK_MOUNTAIN: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_DREADMAUL_ROCK: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_RUINS_OF_THAURISSAN: - if ((sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) && (sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_PURGATION_ISLE: - if (sIndividualProgression->isBeforeProgression(player, PROGRESSION_AQ)) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - else if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ)) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE_II, false); - } - break; - case AREA_IRONTREE_WOOD: - if ((player->getClass() == CLASS_HUNTER) && ((player->GetQuestStatus(QUEST_THE_ANCIENT_LEAF) == QUEST_STATUS_INCOMPLETE) || (player->GetQuestStatus(QUEST_THE_ANCIENT_LEAF) == QUEST_STATUS_REWARDED))) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_TERRACE_OF_LIGHT: - if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_TBC_TIER_4)) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_FOREST_SONG: - if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_PRE_TBC)) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - case AREA_ARGENT_TOURNAMENT_GROUNDS: - case AREA_ARGENT_SUNREAVER_PAVILION: - case AREA_ARGENT_SILVER_COVENANT_PAVILION: - case AREA_THE_RING_OF_CHAMPIONS: - case AREA_THE_ASPIRANTS_RING: - case AREA_THE_ARGENT_VALIANTS_RING: - case AREA_THE_ALLIANCE_VALIANTS_RING: - case AREA_THE_HORDE_VALIANTS_RING: - case AREA_ARGENT_PAVILION: - if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_WOTLK_TIER_2)) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - } - break; - default: - - uint32 mapid = player->GetMapId(); - - if (mapid == MAP_VAULT_OF_ARCHAVON) - { - if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_WOTLK_TIER_1) && sIndividualProgression->isBeforeProgression(player, PROGRESSION_WOTLK_TIER_2)) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - break; - } - else if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_WOTLK_TIER_2) && sIndividualProgression->isBeforeProgression(player, PROGRESSION_WOTLK_TIER_3)) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - player->CastSpell(player, IPP_PHASE_II, false); - break; - } - else if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_WOTLK_TIER_3)) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - player->CastSpell(player, IPP_PHASE_II, false); - player->CastSpell(player, IPP_PHASE_III, false); - break; - } - } - if (mapid == MAP_SHADOWFANG_KEEP) - { - if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ) && sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40)) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - break; - } - } - if (mapid == MAP_RAZORFEN_DOWNS) - { - if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ) && sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40)) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - break; - } - } - if (mapid == MAP_SCARLET_MONASTERY) - { - if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ) && sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40)) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - break; - } - } - if (mapid == MAP_STRATHOLME) - { - if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ) && sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40)) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - break; - } - } - if (mapid == MAP_DIRE_MAUL) - { - if (sIndividualProgression->hasPassedProgression(player, PROGRESSION_AQ) && sIndividualProgression->isBeforeProgression(player, PROGRESSION_NAXX40)) - { - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - player->CastSpell(player, IPP_PHASE, false); - break; - } - } - - player->RemoveAura(IPP_PHASE); - player->RemoveAura(IPP_PHASE_II); - player->RemoveAura(IPP_PHASE_III); - } + sIndividualProgression->checkIPPhasing(player, newArea); } }; diff --git a/src/cs_individualProgression.cpp b/src/cs_individualProgression.cpp index 0234e2d..e0c253e 100644 --- a/src/cs_individualProgression.cpp +++ b/src/cs_individualProgression.cpp @@ -55,6 +55,7 @@ public: std::string playername = target->GetName(); uint16 playerGUID = target->GetGUID().GetCounter(); uint8 currentState = target->GetPlayerSetting("mod-individual-progression", SETTING_PROGRESSION_STATE).value; + uint32 currentArea = target->GetAreaId(); if (progressionLevel < currentState) { @@ -116,7 +117,8 @@ public: } sIndividualProgression->ForceUpdateProgressionState(target, static_cast(progressionLevel)); - sIndividualProgression->UpdateProgressionQuests(target); + sIndividualProgression->UpdateProgressionQuests(target); + sIndividualProgression->checkIPPhasing(target, currentArea); handler->PSendSysMessage("Updated Progression Level for |cff00ffff{}|r = |cff00ffff{}|r", playername, progressionLevel); return true; diff --git a/src/vanillaScripts/aq_scripts.cpp b/src/vanillaScripts/aq_scripts.cpp index aec18bb..4261ede 100644 --- a/src/vanillaScripts/aq_scripts.cpp +++ b/src/vanillaScripts/aq_scripts.cpp @@ -457,7 +457,7 @@ public: return false; } - return sIndividualProgression->isBeforeProgression(target, PROGRESSION_PRE_AQ); + return sIndividualProgression->isBeforeProgression(target, PROGRESSION_AQ_WAR); // gate can be opened during the AQ WAR by interacting with the Scarab Gong } };