Compare commits

...

13 Commits

Author SHA1 Message Date
郑佩茹
f87f8929ac Add optional_unobtainable_items.sql 2024-04-12 16:02:25 -06:00
郑佩茹
080fcd1f7d Optional tweak to MC runes for smaller groups 2024-04-12 15:39:37 -06:00
ZhengPeiRu21
5e21612d99 Merge pull request #251 from jellemeeus/master
fix compiler warnings
2024-04-12 13:04:03 -06:00
Jelle Meeus
19e3835761 fix: warning unused parameter 'go' [-Wunused-parameter] 2024-04-12 01:01:09 +02:00
Jelle Meeus
2594208988 fix: warning comparison of integers of different signs: 'uint32' (aka
'unsigned int') and 'int32' (aka 'int')
2024-04-12 01:00:01 +02:00
ZhengPeiRu21
48ee89b122 Merge pull request #248 from jellemeeus/missing-eye-stalk
fix: Add eye stalk
2024-04-09 13:37:22 -06:00
Jelle Meeus
d13bafb42e fix: Add eye stalk 2024-03-30 23:04:08 +01:00
郑佩茹
e814c794c7 Port several TBC raid progression improvements from mod_progression 2024-03-26 17:01:54 -06:00
郑佩茹
19727d9f0e Fix several NPCs sending players to Isle of Quel'Danas early 2024-03-04 08:36:18 -07:00
郑佩茹
a92ce5b139 Move several Zul'Aman NPCs to correct phase (thanks Grimfeather) 2024-03-04 08:27:56 -07:00
ZhengPeiRu21
e34fbacba4 Merge pull request #233 from Day36512/master
Make AQ Gate Stay Open Beyond Stage 5
2024-02-29 09:37:37 -07:00
Dinkledork
803638a767 Open Gates for players beyond Stage 5 2024-01-29 14:20:44 -07:00
Dinkledork
c9d5eefa8b Update aq_scripts.cpp
Make gate and gong automatically unseen for players beyond AQ40.
2024-01-29 14:18:58 -07:00
15 changed files with 417 additions and 38 deletions

View File

@@ -164,6 +164,25 @@ IndividualProgression.MoltenCore.ManualRuneHandling = 1
IndividualProgression.MoltenCore.AqualEssenceCooldownReduction = 0
#
# IndividualProgression.SerpentshrineCavern.RequireAllBosses
# Description: Requires all bosses being killed before accessing Vashj's console panel.
# Default: 1 - Enabled
# 0 - Disabled
#
#
IndividualProgression.SerpentshrineCavern.RequireAllBosses = 1
#
# IndividualProgression.TheEye.RequireAllBosses
# Description: Requires all bosses being killed to open the doors to Kael
# Default: 1 - Enabled
# 0 - Disabled
#
#
IndividualProgression.TheEye.RequireAllBosses = 1
#
# IndividualProgression.FishingFix
# Description: Before patch 3.1, fishing skill had progression and had to be leveled in low level zones before high level areas could add skill
# In patch 3.1, it was changed to allow leveling fishing even when catching junk in high level zones, allowing progression to be skipped

View File

@@ -0,0 +1,3 @@
UPDATE `acore_world`.`gameobject_template` SET `ScriptName`='aq_gate' WHERE `entry`=176148;
UPDATE `acore_world`.`gameobject_template` SET `ScriptName`='aq_gate' WHERE `entry`=176147;
UPDATE `acore_world`.`gameobject_template` SET `ScriptName`='aq_gate' WHERE `entry`=176146;

View File

@@ -0,0 +1,12 @@
/* SSC Bosses should only drop 2 pieces of loot - was changed to 3 pieces after WotLK release */
DELETE FROM `creature_loot_template` WHERE (`Entry` = 21215) AND (`Item` IN (34059));
INSERT INTO `creature_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES
(21215, 34059, 34059, 100, 0, 1, 0, 1, 2, 'Leotheras the Blind - (ReferenceTable)');
DELETE FROM `creature_loot_template` WHERE (`Entry` = 21214) AND (`Item` IN (34060));
INSERT INTO `creature_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES
(21214, 34060, 34060, 100, 0, 1, 0, 1, 2, 'Fathom-Lord Karathress - (ReferenceTable)');
DELETE FROM `creature_loot_template` WHERE (`Entry` = 21212) AND (`Item` IN (34062));
INSERT INTO `creature_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES
(21212, 34062, 34062, 100, 0, 1, 3, 1, 2, 'Lady Vashj - (ReferenceTable)');

View File

@@ -27,7 +27,10 @@ UPDATE `creature_template` SET `ScriptName` = 'npc_ipp_wotlk_icc' WHERE `entry`
UPDATE `gameobject_template` SET `ScriptName` = 'gobject_ipp_tbc' WHERE `entry` IN (195141);
-- Drop source for 2.3 Jewelcrafting Recipe
UPDATE `creature_template` SET `ScriptName` = 'npc_ipp_tbc_t4' WHERE `entry` = 19768;
UPDATE `creature_template` SET `ScriptName` = 'npc_ipp_tbc_t4' WHERE `entry` IN (19768, 19227, 23761);
-- Phasing for General Tiras'alan and Dathris Sunstriker - prevent early access to Isle of Quel'Danas
UPDATE `creature_template` SET `ScriptName` = 'npc_ipp_tbc_t5' WHERE `entry` IN (25167, 18594);
-- Argent Tournament
UPDATE `creature` SET `phaseMask` = @IPPPHASE WHERE `guid` IN (25, 63129, 63236, 63370, 63371, 65274, 65275, 65283, 65284, 65285, 65325, 65327, 65350, 65351, 65371, 65451,

View File

@@ -5356,3 +5356,32 @@ UPDATE `creature_template` SET `name` = 'Death Lord', `speed_run` = 1.42857, `Da
/* Mr. Bigglesworth */
UPDATE `creature_template` SET `speed_run` = 0.857143, `DamageModifier` = 400.0, `RangeAttackTime` = 1265 WHERE `entry`=16998;
/* Eye Stalk */
DELETE FROM `creature_template` WHERE (`entry` = 351090);
INSERT INTO `creature_template` (`entry`, `difficulty_entry_1`, `difficulty_entry_2`, `difficulty_entry_3`, `KillCredit1`, `KillCredit2`, `modelid1`, `modelid2`, `modelid3`, `modelid4`, `name`, `subname`, `IconName`, `gossip_menu_id`, `minlevel`, `maxlevel`, `exp`, `faction`, `npcflag`, `speed_walk`, `speed_run`, `speed_swim`, `speed_flight`, `detection_range`, `scale`, `rank`, `dmgschool`, `DamageModifier`, `BaseAttackTime`, `RangeAttackTime`, `BaseVariance`, `RangeVariance`, `unit_class`, `unit_flags`, `unit_flags2`, `dynamicflags`, `family`, `trainer_type`, `trainer_spell`, `trainer_class`, `trainer_race`, `type`, `type_flags`, `lootid`, `pickpocketloot`, `skinloot`, `PetSpellDataId`, `VehicleId`, `mingold`, `maxgold`, `AIName`, `MovementType`, `HoverHeight`, `HealthModifier`, `ManaModifier`, `ArmorModifier`, `ExperienceModifier`, `RacialLeader`, `movementId`, `RegenHealth`, `mechanic_immune_mask`, `spell_school_immune_mask`, `flags_extra`, `ScriptName`, `VerifiedBuild`) VALUES
(351090, 0, 0, 0, 0, 0, 15788, 0, 0, 0, 'Eye Stalk', '', '', 0, 61, 61, 2, 16, 0, 1, 1, 1, 1, 20, 1, 1, 0, 7.5, 1000, 2000, 1, 1, 1, 4, 2048, 8, 0, 0, 0, 0, 0, 10, 72, 0, 0, 0, 0, 0, 0, 0, 'SmartAI', 0, 1, 1, 1, 1, 1, 0, 0, 1, 1022042641, 0, 0, '', 12340);
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 351090);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `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
(351090, 0, 0, 0, 0, 0, 100, 0, 5000, 7000, 14000, 17000, 0, 0, 11, 29407, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Cast Spell IC (Naxx 40)');
DELETE FROM `creature` WHERE `guid` BETWEEN 362043 AND 362059;
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`, `CreateObject`, `Comment`) VALUES
(362043, 351090, 0, 0, 533, 0, 0, 4, 1, 0, 2798.06, -3788.95, 274.983, 1.51844, 3600, 0, 0, 13033, 0, 0, 0, 0, 0, '', 0, 0, NULL),
(362044, 351090, 0, 0, 533, 0, 0, 4, 1, 0, 2804.25, -3757.44, 274.983, 3.64774, 3600, 0, 0, 13033, 0, 0, 0, 0, 0, '', 0, 0, NULL),
(362045, 351090, 0, 0, 533, 0, 0, 4, 1, 0, 2867.35, -3778.54, 274.983, 2.47837, 3600, 0, 0, 13033, 0, 0, 0, 0, 0, '', 0, 0, NULL),
(362046, 351090, 0, 0, 533, 0, 0, 4, 1, 0, 2895.12, -3779.74, 274.983, 2.6529, 3600, 0, 0, 13033, 0, 0, 0, 0, 0, '', 0, 0, NULL),
(362047, 351090, 0, 0, 533, 0, 0, 4, 1, 0, 2830.7, -3777.03, 274.983, 2.9147, 3600, 0, 0, 13033, 0, 0, 0, 0, 0, '', 0, 0, NULL),
(362048, 351090, 0, 0, 533, 0, 0, 4, 1, 0, 2851.92, -3776.44, 274.983, 2.53073, 3600, 0, 0, 13033, 0, 0, 0, 0, 0, '', 0, 0, NULL),
(362049, 351090, 0, 0, 533, 0, 0, 4, 1, 0, 2789.62, -3752.53, 274.983, 2.61799, 3600, 0, 0, 13033, 0, 0, 0, 0, 0, '', 0, 0, NULL),
(362050, 351090, 0, 0, 533, 0, 0, 4, 1, 0, 2843.34, -3767.74, 274.983, 3.31613, 3600, 0, 0, 13033, 0, 0, 0, 0, 0, '', 0, 0, NULL),
(362051, 351090, 0, 0, 533, 0, 0, 4, 1, 0, 2797.94, -3776.81, 274.983, 2.35619, 3600, 0, 0, 13033, 0, 0, 0, 0, 0, '', 0, 0, NULL),
(362052, 351090, 0, 0, 533, 0, 0, 4, 1, 0, 2834.6, -3751.34, 274.983, 4.20624, 3600, 0, 0, 13033, 0, 0, 0, 0, 0, '', 0, 0, NULL),
(362053, 351090, 0, 0, 533, 0, 0, 4, 1, 0, 2862.27, -3758.34, 274.983, 3.36848, 3600, 0, 0, 13033, 0, 0, 0, 0, 0, '', 0, 0, NULL),
(362054, 351090, 0, 0, 533, 0, 0, 4, 1, 0, 2813.24, -3780.76, 274.983, 2.49582, 3600, 0, 0, 13033, 0, 0, 0, 0, 0, '', 0, 0, NULL),
(362055, 351090, 0, 0, 533, 0, 0, 4, 1, 0, 2881.55, -3782.26, 274.983, 2.47837, 3600, 0, 0, 13033, 0, 0, 0, 0, 0, '', 0, 0, NULL),
(362056, 351090, 0, 0, 533, 0, 0, 4, 1, 0, 2791.84, -3762.35, 274.983, 3.35103, 3600, 0, 0, 13033, 0, 0, 0, 0, 0, '', 0, 0, NULL),
(362057, 351090, 0, 0, 533, 0, 0, 4, 1, 0, 2877.97, -3761.82, 274.983, 3.64774, 3600, 0, 0, 13033, 0, 0, 0, 0, 0, '', 0, 0, NULL),
(362058, 351090, 0, 0, 533, 0, 0, 4, 1, 0, 2770.1, -3782.59, 274.983, 1.02974, 3600, 0, 0, 13033, 0, 0, 0, 0, 0, '', 0, 0, NULL),
(362059, 351090, 0, 0, 533, 0, 0, 4, 1, 0, 2846.52, -3789.07, 274.983, 2.23402, 3600, 0, 0, 13033, 0, 0, 0, 0, 0, '', 0, 0, NULL);

View File

@@ -0,0 +1,17 @@
/* These changes are intended to be used in conjunction with autobalance, NPCBots, or other methods that allow players to complete raids with smaller groups.
Given the nature of the module, it is not uncommon for players to be in different phases and to have difficulty finding a full group, particularly for 40-man raids.
*/
/* -- Earlier access to Eternal Quintessence --
This change will cause Duke Hydraxis to give Eternal Quintessence at the time he would normally give standard Aqual Quintessence, along with removing its cooldown.
This will allow players to have the full Molten Core experience including progress through the Hydraxian Waterlords faction and all quests with appropriate rewards,
while still allowing them to douse runes. Originally, due to the standard Quintessence being unique and having a week long cooldown, accessing the end bosses of the instance
requires one player per boss to douse the runes.
One other alternative provided by the module is the disabling runes entirely, which allows players to skip the faction and quests entirely and clear the instance as soon
as they enter the first time. This is done through the module's config file (disabled by default). This optional change is a medium between the two.
*/
UPDATE `smart_scripts` SET `action_param1` = 22754 WHERE `entryorguid` = 13278 AND `id` = 1;
UPDATE `item_template` SET `spellcooldown_1` = 0, `spellcategorycooldown_1` = 0 WHERE `entry` = 22754;

View File

@@ -0,0 +1,14 @@
/* These changes add otherwise unobtainable items to appropriate places in the world, with suitable levels of challenge to obtain them.
This is in line with the module's intent to allow each player to experience all of the available content in WoW - in this case,
it removes reliance on out-of-game events, real money purchases, or cheating via GM commands.
These items are almost entirely cosmetic and were available to players through external means - debug or cheat items not intended for player use are not added.
*/
/* Tabard of Flame (WoW TCG Promotional Item) - added as a 3% drop from Ragnaros */
DELETE FROM `creature_loot_template` WHERE `Entry`=11502 AND `Item`=23705 AND `Reference`=0 AND `GroupId`=0;
INSERT INTO `creature_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES (11502, 23705, 0, 3, 0, 1, 0, 1, 1, NULL);
/* Celestial Steed (Real Money Purchase) - added as a 1% drop from Gift of the Observer */
DELETE FROM `gameobject_loot_template` WHERE `Entry`=26974 AND `Item`=54811;
INSERT INTO `gameobject_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES (26974, 54811, 0, 1, 0, 1, 0, 1, 1, 'Gift of the Observer - Celestial Steed');

View File

@@ -1,3 +1,6 @@
/* Badges of Justice were not added to raids until later patches - remove them from raid drops */
DELETE FROM `creature_loot_template` WHERE `Entry` IN (17225, 15690, 15688, 15689, 16524, 15691, 17533, 18168, 17521, 16457, 15687, 16152, 21216, 21217, 21215, 21214, 21213, 21212, 19514, 19622, 19516, 18805) AND (`Item` IN (29434));
/* Create alternate version of TBC Badge Vendor for pre-2.3 */
DELETE FROM `npc_vendor` WHERE `entry` = 30201;
INSERT INTO `npc_vendor` (`entry`, `slot`, `item`, `maxcount`, `incrtime`, `ExtendedCost`, `VerifiedBuild`) VALUES

View File

@@ -104,6 +104,32 @@ public:
}
};
class npc_ipp_tbc_t5 : public CreatureScript
{
public:
npc_ipp_tbc_t5() : CreatureScript("npc_ipp_tbc_t5") { }
struct npc_ipp_tbc_t5AI: ScriptedAI
{
explicit npc_ipp_tbc_t5AI(Creature* creature) : ScriptedAI(creature) { };
bool CanBeSeen(Player const* player) override
{
if (player->IsGameMaster() || !sIndividualProgression->enabled)
{
return true;
}
Player* target = ObjectAccessor::FindConnectedPlayer(player->GetGUID());
return sIndividualProgression->hasPassedProgression(target, PROGRESSION_TBC_TIER_4);
}
};
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_ipp_tbc_t5AI(creature);
}
};
class npc_ipp_tbc_pre_t4 : public CreatureScript
{
public:
@@ -323,6 +349,7 @@ void AddSC_mod_individual_progression_awareness()
new npc_ipp_ds2();
new npc_ipp_tbc();
new npc_ipp_tbc_t4();
new npc_ipp_tbc_t5();
new npc_ipp_tbc_pre_t4();
new npc_ipp_wotlk();
new npc_ipp_wotlk_ulduar();

View File

@@ -40,6 +40,8 @@ void AddSC_mod_individual_progression_awareness();
void AddSC_mod_individual_progression_player();
void AddSC_npc_archmage_timear();
void AddSC_karazhan_70();
void AddSC_the_eye_70();
void AddSC_serpentshrine_cavern_70();
void Addmod_individual_progressionScripts()
@@ -81,4 +83,6 @@ void Addmod_individual_progressionScripts()
AddSC_mod_individual_progression_player();
AddSC_npc_archmage_timear();
AddSC_karazhan_70();
AddSC_the_eye_70();
AddSC_serpentshrine_cavern_70();
}

View File

@@ -204,7 +204,7 @@ public:
{
if (zombie->IsAlive())
{
int32 reduceHp = int32(zombie->GetMaxHealth() * 0.05f);
uint32 reduceHp = uint32(zombie->GetMaxHealth() * 0.05f);
if (zombie->GetHealth() > reduceHp)
zombie->SetHealth(reduceHp); // Reduce HP to 5%
zombie->SetWalk(true); // Set to walk

View File

@@ -1363,7 +1363,7 @@ public:
return new gobject_naxx40_teleAI(object);
}
bool OnGossipHello(Player* player, GameObject* go) override
bool OnGossipHello(Player* player, GameObject* /*go*/) override
{
if ((!sIndividualProgression->requireNaxxStrath || player->GetQuestStatus(NAXX40_ENTRANCE_FLAG) == QUEST_STATUS_REWARDED) && isAttuned(player))
{

View File

@@ -0,0 +1,108 @@
/*
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license: https://github.com/azerothcore/azerothcore-wotlk/blob/master/LICENSE-AGPL3
*/
#include "Config.h"
#include "Player.h"
#include "ScriptMgr.h"
#include "SpellInfo.h"
enum SSCMisc
{
GO_LADY_VASHJ_BRIDGE_CONSOLE = 184568,
MAP_SSC = 548,
DATA_LURKER = 1,
DATA_VASHJ = 6
};
class GlobalSerpentshrineScript : public GlobalScript
{
public:
GlobalSerpentshrineScript() : GlobalScript("GlobalSerpentshrineScript") { }
bool IsAnyBossAlive(Map* map, uint32 bossId = 0, uint32 newState = 0)
{
if (InstanceMap* instanceMap = map->ToInstanceMap())
{
if (InstanceScript* instance = instanceMap->GetInstanceScript())
{
uint32 bossCount = instance->GetEncounterCount() - 3;
for (uint8 id = 0; id <= bossCount; ++id)
{
if (id == bossId && newState == DONE)
{
continue;
}
if (id == DATA_LURKER)
{
continue;
}
if (instance->GetBossState(id) != DONE)
{
return true;
}
}
}
}
return false;
}
void AfterInstanceGameObjectCreate(Map* map, GameObject* go) override
{
if (sConfigMgr->GetOption<int>("IndividualProgression.SerpentshrineCavern.RequireAllBosses", 1))
{
if (go->GetEntry() == GO_LADY_VASHJ_BRIDGE_CONSOLE)
{
if (IsAnyBossAlive(map))
{
go->SetGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
}
}
}
}
void OnLoadSpellCustomAttr(SpellInfo* spellInfo) override
{
switch (spellInfo->Id)
{
case 38236: // Caribdis - Spawn Spitfire Totem
spellInfo->Effects[EFFECT_0].BasePoints = 70000;
break;
}
}
void OnBeforeSetBossState(uint32 bossId, EncounterState newState, EncounterState /*oldState*/, Map* map) override
{
if (sConfigMgr->GetOption<int>("IndividualProgression.SerpentshrineCavern.RequireAllBosses", 1))
{
if (map->GetEntry()->MapID == MAP_SSC)
{
if (InstanceMap* instanceMap = map->ToInstanceMap())
{
if (InstanceScript* instance = instanceMap->GetInstanceScript())
{
if (!IsAnyBossAlive(map, bossId, newState))
{
if (Creature* vashj = instance->GetCreature(DATA_VASHJ))
{
if (GameObject* console = vashj->FindNearestGameObject(GO_LADY_VASHJ_BRIDGE_CONSOLE, 600.0f))
{
console->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
}
}
}
}
}
}
}
}
};
void AddSC_serpentshrine_cavern_70()
{
new GlobalSerpentshrineScript();
}

View File

@@ -0,0 +1,97 @@
/*
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license: https://github.com/azerothcore/azerothcore-wotlk/blob/master/LICENSE-AGPL3
*/
#include "Config.h"
#include "Player.h"
#include "ScriptMgr.h"
#include "SpellInfo.h"
enum SSCMisc
{
GO_RIGHT_KAEL_DOOR = 184327,
GO_LEFT_KAEL_DOOR = 184329,
MAP_TK = 550,
DATA_KAEL = 3
};
class GlobalTheEyeScript : public GlobalScript
{
public:
GlobalTheEyeScript() : GlobalScript("GlobalTheEyeScript") { }
bool IsAnyBossAlive(Map* map, uint32 bossId = 0, uint32 newState = 0)
{
if (InstanceMap* instanceMap = map->ToInstanceMap())
{
if (InstanceScript* instance = instanceMap->GetInstanceScript())
{
uint32 bossCount = instance->GetEncounterCount() - 1;
for (uint8 id = 0; id < bossCount; ++id)
{
if (id == bossId && newState == DONE)
{
continue;
}
if (instance->GetBossState(id) != DONE)
{
return true;
}
}
}
}
return false;
}
void AfterInstanceGameObjectCreate(Map* map, GameObject* go) override
{
if (sConfigMgr->GetOption<int>("IndividualProgression.TheEye.RequireAllBosses", 1))
{
if (go->GetEntry() == GO_RIGHT_KAEL_DOOR || go->GetEntry() == GO_LEFT_KAEL_DOOR)
{
if (IsAnyBossAlive(map))
{
go->SetGoState(GO_STATE_READY);
}
}
}
}
void OnBeforeSetBossState(uint32 bossId, EncounterState newState, EncounterState /*oldState*/, Map* map) override
{
if (sConfigMgr->GetOption<int>("IndividualProgression.TheEye.RequireAllBosses", 1))
{
if (map->GetEntry()->MapID == MAP_TK)
{
if (InstanceMap* instanceMap = map->ToInstanceMap())
{
if (InstanceScript* instance = instanceMap->GetInstanceScript())
{
if (!IsAnyBossAlive(map, bossId, newState))
{
if (Creature* kael = instance->GetCreature(DATA_KAEL))
{
if (GameObject* rightDoor = kael->FindNearestGameObject(GO_RIGHT_KAEL_DOOR, 600.0f))
{
if (GameObject* leftDoor = kael->FindNearestGameObject(GO_LEFT_KAEL_DOOR, 600.0f))
{
rightDoor->SetGoState(GO_STATE_ACTIVE);
leftDoor->SetGoState(GO_STATE_ACTIVE);
}
}
}
}
}
}
}
}
}
};
void AddSC_the_eye_70()
{
new GlobalTheEyeScript();
}

View File

@@ -1,3 +1,4 @@
#include "IndividualProgression.h"
#include "ScriptMgr.h"
#include "Player.h"
#include "GameObjectAI.h"
@@ -61,17 +62,32 @@ public:
{
switch (eventStage)
{
case STAGE_OPEN_GATES:
return HandleOpeningStage();
case STAGE_WAR:
return HandleWarStage();
case STAGE_RESET:
return ResetAQGates();
case STAGE_OPEN_GATES:
HandleOpeningStage();
break;
case STAGE_WAR:
HandleWarStage();
break;
case STAGE_RESET:
ResetAQGates();
break;
}
} else
}
else
eventTimer -= diff;
}
};
}
bool CanBeSeen(Player const* player) override
{
Player* target = ObjectAccessor::FindConnectedPlayer(player->GetGUID());
if (!target)
{
return false;
}
return sIndividualProgression->isBeforeProgression(target, PROGRESSION_AQ);
}
void NextStage(uint32 timeUntil = 100)
{
@@ -84,28 +100,26 @@ public:
{
switch (eventStep)
{
case 0:
go_aq_gate_roots->ResetDoorOrButton();
go_aq_gate_roots->UseDoorOrButton();
me->PlayDirectSound(SOUND_ROOTS_OPEN);
case 0:
go_aq_gate_roots->ResetDoorOrButton();
go_aq_gate_roots->UseDoorOrButton();
me->PlayDirectSound(SOUND_ROOTS_OPEN);
eventTimer = 5000;
break;
eventTimer = 5000;
break;
case 1:
go_aq_gate_runes->ResetDoorOrButton();
go_aq_gate_runes->UseDoorOrButton();
me->PlayDirectSound(SOUND_RUNES_OPEN);
eventTimer = 8000;
break;
case 1:
go_aq_gate_runes->ResetDoorOrButton();
go_aq_gate_runes->UseDoorOrButton();
me->PlayDirectSound(SOUND_RUNES_OPEN);
eventTimer = 8000;
break;
case 2:
go_aq_barrier->ResetDoorOrButton();
go_aq_barrier->UseDoorOrButton();
me->PlayDirectSound(SOUND_DOOR_OPEN);
NextStage(10000);
return;
case 2:
go_aq_barrier->ResetDoorOrButton();
go_aq_barrier->UseDoorOrButton();
me->PlayDirectSound(SOUND_DOOR_OPEN);
NextStage(10000);
return;
}
eventStep++;
@@ -117,15 +131,8 @@ public:
NextStage(5 * MINUTE * IN_MILLISECONDS);
}
void EventDone()
{
NextStage(0);
eventStage = STAGE_OPEN_GATES;
}
void ResetAQGates()
{
// go_aq_ghost_gate->SetGoState(GO_STATE_READY);
go_aq_barrier->SetGoState(GO_STATE_READY);
go_aq_gate_runes->SetGoState(GO_STATE_READY);
go_aq_gate_roots->ResetDoorOrButton();
@@ -134,6 +141,13 @@ public:
EventDone();
}
void EventDone()
{
NextStage(0);
eventStage = STAGE_OPEN_GATES; // Reset to the initial stage for potential future events
}
void OpenGate(Player *player, bool announce)
{
go_aq_barrier = GetClosestGameObjectWithEntry(me, GO_GATE_OF_AHN_QIRAJ, 150);
@@ -188,8 +202,37 @@ public:
}
};
class aq_gate : public GameObjectScript
{
public:
aq_gate() : GameObjectScript("aq_gate") {}
struct aq_gateAI : public GameObjectAI
{
explicit aq_gateAI(GameObject* go) : GameObjectAI(go) {}
bool CanBeSeen(Player const* player) override
{
Player* target = ObjectAccessor::FindConnectedPlayer(player->GetGUID());
if (!target)
{
return false;
}
return sIndividualProgression->isBeforeProgression(target, PROGRESSION_AQ);
}
};
GameObjectAI* GetAI(GameObject* go) const override
{
return new aq_gateAI(go);
}
};
void AddSC_aq_scripts()
{
new aq_gate();
new gobject_scarab_gong();
}