diff options
author | Keader <keader.android@gmail.com> | 2019-06-12 15:22:32 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-06-12 15:22:32 -0300 |
commit | 94b60ff0ef7ee908e9ab4660f6dce0dcfe3f13e8 (patch) | |
tree | e36b790d0f2769a4547302da3754a1871422fabc | |
parent | 69fd5d0d8f8449082dd7667cf496c573b3516fe5 (diff) |
Core/Misc: Implemented Icecrown Citadel buff disable (#23394)
Closes #8576
Closes #7940
6 files changed, 76 insertions, 4 deletions
diff --git a/sql/updates/world/3.3.5/2040_48_33_00_world.sql b/sql/updates/world/3.3.5/2040_48_33_00_world.sql new file mode 100644 index 00000000000..f4ca0409f28 --- /dev/null +++ b/sql/updates/world/3.3.5/2040_48_33_00_world.sql @@ -0,0 +1,8 @@ +UPDATE `creature_template` SET `ScriptName`='npc_entrance_faction_leader' WHERE `entry`IN (39371,39372); +DELETE FROM `spell_area` WHERE `spell`=73822 AND `area`=4812; +DELETE FROM `spell_area` WHERE `spell`=73828 AND `area`=4812; + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup` IN (11203, 11206); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(15,11203,0,0,13,0,45,1,0,0,0,'','King of Stormwind - Show Option if DATA_ICC_BUFF is 1'), +(15,11206,0,0,13,0,45,1,0,0,0,'','Overlord of the Warsong Offensive - Show Option if DATA_ICC_BUFF is 1'); diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp index 7ffcd0d04f3..5888120acf6 100644 --- a/src/server/game/Entities/Pet/Pet.cpp +++ b/src/server/game/Entities/Pet/Pet.cpp @@ -21,6 +21,7 @@ #include "DatabaseEnv.h" #include "Formulas.h" #include "Group.h" +#include "InstanceScript.h" #include "Log.h" #include "ObjectMgr.h" #include "Player.h" @@ -33,6 +34,7 @@ #include "Util.h" #include "WorldPacket.h" #include "WorldSession.h" +#include "ZoneScript.h" #define PET_XP_FACTOR 0.05f @@ -71,6 +73,8 @@ void Pet::AddToWorld() GetMap()->GetObjectsStore().Insert<Pet>(GetGUID(), this); Unit::AddToWorld(); AIM_Initialize(); + if (ZoneScript* zoneScript = GetZoneScript() ? GetZoneScript() : GetInstanceScript()) + zoneScript->OnCreatureCreate(this); } // Prevent stuck pets when zoning. Pets default to "follow" when added to world diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp index e50e90ebfbc..91d4b4d80a4 100644 --- a/src/server/game/Spells/Auras/SpellAuras.cpp +++ b/src/server/game/Spells/Auras/SpellAuras.cpp @@ -1153,6 +1153,8 @@ bool Aura::CanBeSaved() const case 44413: // Incanter's Absorption case 40075: // Fel Flak Fire case 55849: // Power Spark + case 73822: // Hellscream's Warsong + case 73828: // Strength of Wrynn return false; } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp index e06a1998248..443b916df98 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp @@ -282,9 +282,11 @@ enum ICCEventIds EVENT_AWAKEN_WARD_4 = 22909, }; -enum ICCMovementPoints +enum ICCMisc { - POINT_LAND = 1, + POINT_LAND = 1, + ICC_BUFF_MENUID_ALLY = 11204, + ICC_BUFF_MENUID_HORDE = 11207 }; class FrostwingVrykulSearcher @@ -1790,6 +1792,19 @@ class npc_arthas_teleport_visual : public CreatureScript } }; +struct npc_entrance_faction_leader : public ScriptedAI +{ + npc_entrance_faction_leader(Creature* creature) : ScriptedAI(creature) { } + + bool GossipSelect(Player* /*player*/, uint32 menuId, uint32 /*gossipListId*/) override + { + if (menuId == ICC_BUFF_MENUID_ALLY || menuId == ICC_BUFF_MENUID_HORDE) + if (InstanceScript* instance = me->GetInstanceScript()) + instance->SetData(DATA_ICC_BUFF, 0); + return false; + } +}; + class spell_icc_stoneform : public SpellScriptLoader { public: @@ -2261,6 +2276,7 @@ void AddSC_icecrown_citadel() new npc_frostwing_vrykul(); new npc_impaling_spear(); new npc_arthas_teleport_visual(); + RegisterCreatureAI(npc_entrance_faction_leader); new spell_icc_stoneform(); new spell_icc_sprit_alarm(); new spell_frost_giant_death_plague(); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h index 54cd56d1162..c26eb8ba86b 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h @@ -59,7 +59,11 @@ enum ICSharedSpells // Shadowmourne questline SPELL_UNSATED_CRAVING = 71168, - SPELL_SHADOWS_FATE = 71169 + SPELL_SHADOWS_FATE = 71169, + + // ICC Buffs + SPELL_HELLSCREAMS_WARSONG = 73822, + SPELL_STRENGHT_OF_WRYNN = 73828 }; enum ICTeleporterSpells @@ -122,7 +126,8 @@ enum ICDataTypes DATA_UPPERSPIRE_TELE_ACT = 41, /// also used by conditions DATA_BLOOD_QUEEN_LANA_THEL_COUNCIL = 42, DATA_BLOOD_PRINCE_COUNCIL_INTRO = 43, - DATA_SINDRAGOSA_INTRO = 44 + DATA_SINDRAGOSA_INTRO = 44, + DATA_ICC_BUFF = 45 // used by conditions }; enum ICCreaturesIds diff --git a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp index 5c148eb9e61..c5b73a733d0 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp @@ -21,6 +21,7 @@ #include "InstanceScript.h" #include "Map.h" #include "ObjectMgr.h" +#include "Pet.h" #include "Player.h" #include "PoolMgr.h" #include "ScriptMgr.h" @@ -149,6 +150,7 @@ class instance_icecrown_citadel : public InstanceMapScript BloodQuickeningMinutes = 0; BloodPrinceIntro = 1; SindragosaIntro = 1; + ICCBuffActive = 1; } // A function to help reduce the number of lines for teleporter management. @@ -182,10 +184,25 @@ class instance_icecrown_citadel : public InstanceMapScript if (GetBossState(DATA_LADY_DEATHWHISPER) == DONE && GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) != DONE) SpawnGunship(); + + if (ICCBuffActive) + { + uint32 spellId = TeamInInstance == ALLIANCE ? SPELL_STRENGHT_OF_WRYNN : SPELL_HELLSCREAMS_WARSONG; + player->CastSpell(player, spellId, true); + } } void OnCreatureCreate(Creature* creature) override { + if (creature->IsPet() && creature->GetOwnerGUID().IsPlayer()) + { + uint32 spellId = TeamInInstance == ALLIANCE ? SPELL_STRENGHT_OF_WRYNN : SPELL_HELLSCREAMS_WARSONG; + if (ICCBuffActive) + creature->CastSpell(creature, spellId, true); + else + creature->RemoveAurasDueToSpell(spellId); + } + switch (creature->GetEntry()) { case NPC_LORD_MARROWGAR: @@ -724,6 +741,8 @@ class instance_icecrown_citadel : public InstanceMapScript return BloodPrinceIntro; case DATA_SINDRAGOSA_INTRO: return SindragosaIntro; + case DATA_ICC_BUFF: + return ICCBuffActive; default: break; } @@ -1090,6 +1109,23 @@ class instance_icecrown_citadel : public InstanceMapScript case DATA_SINDRAGOSA_INTRO: SindragosaIntro = data; break; + case DATA_ICC_BUFF: + ICCBuffActive = data; + if (!ICCBuffActive) + { + uint32 spellId = TeamInInstance == ALLIANCE ? SPELL_STRENGHT_OF_WRYNN : SPELL_HELLSCREAMS_WARSONG; + Map::PlayerList const& players = instance->GetPlayers(); + for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) + { + if (Player* player = itr->GetSource()) + { + player->RemoveAurasDueToSpell(spellId); + if (Pet* pet = player->GetPet()) + pet->RemoveAurasDueToSpell(spellId); + } + } + } + break; default: break; } @@ -1506,6 +1542,7 @@ class instance_icecrown_citadel : public InstanceMapScript uint16 BloodQuickeningMinutes; uint8 BloodPrinceIntro; uint8 SindragosaIntro; + uint8 ICCBuffActive; bool IsBonedEligible; bool IsOozeDanceEligible; bool IsNauseaEligible; |