aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeader <keader.android@gmail.com>2019-06-12 15:22:32 -0300
committerGitHub <noreply@github.com>2019-06-12 15:22:32 -0300
commit94b60ff0ef7ee908e9ab4660f6dce0dcfe3f13e8 (patch)
treee36b790d0f2769a4547302da3754a1871422fabc
parent69fd5d0d8f8449082dd7667cf496c573b3516fe5 (diff)
Core/Misc: Implemented Icecrown Citadel buff disable (#23394)
Closes #8576 Closes #7940
-rw-r--r--sql/updates/world/3.3.5/2040_48_33_00_world.sql8
-rw-r--r--src/server/game/Entities/Pet/Pet.cpp4
-rw-r--r--src/server/game/Spells/Auras/SpellAuras.cpp2
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp20
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h9
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp37
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;