aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/collision/PrecompiledHeaders/collisionPCH.h3
-rw-r--r--src/server/scripts/Northrend/dragonblight.cpp93
-rw-r--r--src/server/scripts/Spells/spell_quest.cpp32
3 files changed, 123 insertions, 5 deletions
diff --git a/src/server/collision/PrecompiledHeaders/collisionPCH.h b/src/server/collision/PrecompiledHeaders/collisionPCH.h
index 636eaa1bef8..ece2ef1b8ef 100644
--- a/src/server/collision/PrecompiledHeaders/collisionPCH.h
+++ b/src/server/collision/PrecompiledHeaders/collisionPCH.h
@@ -4,3 +4,6 @@
#include "WorldModel.h"
#include "ModelInstance.h"
#include "BoundingIntervalHierarchy.h"
+#include "RegularGrid.h"
+#include "BoundingIntervalHierarchyWrapper.h"
+#include "GameObjectModel.h"
diff --git a/src/server/scripts/Northrend/dragonblight.cpp b/src/server/scripts/Northrend/dragonblight.cpp
index 13a8370690e..698daba99e3 100644
--- a/src/server/scripts/Northrend/dragonblight.cpp
+++ b/src/server/scripts/Northrend/dragonblight.cpp
@@ -33,6 +33,8 @@ EndContentData */
#include "SpellScript.h"
#include "SpellAuraEffects.h"
#include "ScriptedEscortAI.h"
+#include "Vehicle.h"
+#include "CombatAI.h"
#include "Player.h"
enum eEnums
@@ -172,15 +174,27 @@ public:
};
/*######
-## wyrmrest_defender
+## Quest: Defending Wyrmrest Temple ID: 12372
######*/
enum WyrmDefenderEnum
{
- QUEST_DEFENDING_WYRMREST_TEMPLE = 12372,
- GOSSIP_TEXTID_DEF1 = 12899,
- GOSSIP_TEXTID_DEF2 = 12900,
- SPELL_CHARACTER_SCRIPT = 49213
+ // Quest data
+ QUEST_DEFENDING_WYRMREST_TEMPLE = 12372,
+ GOSSIP_TEXTID_DEF1 = 12899,
+
+ // Gossip data
+ GOSSIP_TEXTID_DEF2 = 12900,
+
+ // Spells data
+ SPELL_CHARACTER_SCRIPT = 49213,
+ SPELL_DEFENDER_ON_LOW_HEALTH_EMOTE = 52421, // ID - 52421 Wyrmrest Defender: On Low Health Boss Emote to Controller - Random /self/
+ SPELL_RENEW = 49263, // casted to heal drakes
+ SPELL_WYRMREST_DEFENDER_MOUNT = 49256,
+
+ // Texts data
+ WHISPER_MOUNTED = 0,
+ BOSS_EMOTE_ON_LOW_HEALTH = 2
};
#define GOSSIP_ITEM_1 "We need to get into the fight. Are you ready?"
@@ -211,10 +225,79 @@ class npc_wyrmrest_defender : public CreatureScript
player->SEND_GOSSIP_MENU(GOSSIP_TEXTID_DEF2, creature->GetGUID());
// Makes player cast trigger spell for 49207 on self
player->CastSpell(player, SPELL_CHARACTER_SCRIPT, true);
+ // The gossip should not auto close
}
return true;
}
+
+ struct npc_wyrmrest_defenderAI : public VehicleAI
+ {
+ npc_wyrmrest_defenderAI(Creature* creature) : VehicleAI(creature) { }
+
+ bool hpWarningReady;
+ bool renewRecoveryCanCheck;
+
+ uint32 RenewRecoveryChecker;
+
+ void Reset()
+ {
+ hpWarningReady = true;
+ renewRecoveryCanCheck = false;
+
+ RenewRecoveryChecker = 0;
+ }
+
+ void UpdateAI(uint32 const diff)
+ {
+ // Check system for Health Warning should happen first time whenever get under 30%,
+ // after it should be able to happen only after recovery of last renew is fully done (20 sec),
+ // next one used won't interfere
+ if (hpWarningReady && me->GetHealthPct() <= 30.0f)
+ {
+ me->CastSpell(me, SPELL_DEFENDER_ON_LOW_HEALTH_EMOTE);
+ hpWarningReady = false;
+ }
+
+ if (renewRecoveryCanCheck)
+ {
+ if (RenewRecoveryChecker <= diff)
+ {
+ renewRecoveryCanCheck = false;
+ hpWarningReady = true;
+ }
+ else RenewRecoveryChecker -= diff;
+ }
+ }
+
+ void SpellHit(Unit* /*caster*/, SpellInfo const* spell)
+ {
+ switch (spell->Id)
+ {
+ case SPELL_WYRMREST_DEFENDER_MOUNT:
+ Talk(WHISPER_MOUNTED, me->GetCharmerOrOwnerGUID());
+ me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
+ me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
+ break;
+ // Both below are for checking low hp warning
+ case SPELL_DEFENDER_ON_LOW_HEALTH_EMOTE:
+ Talk(BOSS_EMOTE_ON_LOW_HEALTH, me->GetCharmerOrOwnerGUID());
+ break;
+ case SPELL_RENEW:
+ if (!hpWarningReady && RenewRecoveryChecker <= 100)
+ {
+ RenewRecoveryChecker = 20000;
+ }
+ renewRecoveryCanCheck = true;
+ break;
+ }
+ }
+ };
+
+ CreatureAI* GetAI(Creature* creature) const
+ {
+ return new npc_wyrmrest_defenderAI(creature);
+ }
};
void AddSC_dragonblight()
diff --git a/src/server/scripts/Spells/spell_quest.cpp b/src/server/scripts/Spells/spell_quest.cpp
index 58b6fca8a81..b6497c048c8 100644
--- a/src/server/scripts/Spells/spell_quest.cpp
+++ b/src/server/scripts/Spells/spell_quest.cpp
@@ -1284,7 +1284,10 @@ class spell_q12372_cast_from_gossip_trigger : public SpellScriptLoader
// 49370 - Wyrmrest Defender: Destabilize Azure Dragonshrine Effect
enum Quest12372Data
{
+ // NPCs
NPC_WYRMREST_TEMPLE_CREDIT = 27698,
+ // Spells
+ WHISPER_ON_HIT_BY_FORCE_WHISPER = 1
};
class spell_q12372_destabilize_azure_dragonshrine_dummy : public SpellScriptLoader
@@ -1318,6 +1321,34 @@ class spell_q12372_destabilize_azure_dragonshrine_dummy : public SpellScriptLoad
}
};
+// ID - 50287 Azure Dragon: On Death Force Cast Wyrmrest Defender to Whisper to Controller - Random (casted from Azure Dragons and Azure Drakes on death)
+class spell_q12372_azure_on_death_force_whisper : public SpellScriptLoader
+{
+ public:
+ spell_q12372_azure_on_death_force_whisper() : SpellScriptLoader("spell_q12372_azure_on_death_force_whisper") { }
+
+ class spell_q12372_azure_on_death_force_whisper_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_q12372_azure_on_death_force_whisper_SpellScript);
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ if (Creature* defender = GetHitCreature())
+ defender->AI()->Talk(WHISPER_ON_HIT_BY_FORCE_WHISPER, defender->GetCharmerOrOwnerGUID());
+ }
+
+ void Register()
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_q12372_azure_on_death_force_whisper_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+ };
+
+ SpellScript* GetSpellScript() const
+ {
+ return new spell_q12372_azure_on_death_force_whisper_SpellScript();
+ }
+};
+
// "Bombing Run" and "Bomb Them Again!"
enum Quest11010_11102_11023Data
{
@@ -1522,4 +1553,5 @@ void AddSC_quest_spell_scripts()
new spell_q11010_q11102_q11023_aggro_burst();
new spell_q11010_q11102_q11023_choose_loc();
new spell_q11010_q11102_q11023_q11008_check_fly_mount();
+ new spell_q12372_azure_on_death_force_whisper();
}