mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-21 17:54:48 +01:00
*Utgarde Pinnacle: Svala fixes - Fix some crashes, complete ritual code and change defines by enums, by Tartalo
*Fix Acherus Flightmaster for Alliance, by MrSmite *Fix The Party's Over achievement (Prince Taldaram) & Implement Good Grief achievement (Maiden of Grief), by Tartalo *Fix certaint things entering the threat list and never leaving, bugging mob's HP regeneration (ie: Priest's Lightwell).. again. Thanks Gyullo. --HG-- branch : trunk
This commit is contained in:
@@ -27,48 +27,49 @@ EndScriptData */
|
||||
#include "precompiled.h"
|
||||
#include "def_ahnkahet.h"
|
||||
|
||||
#define SPELL_BLOODTHIRST 55968 //Trigger Spell + add aura
|
||||
#define SPELL_CONJURE_FLAME_SPHERE 55931
|
||||
|
||||
#define SPELL_FLAME_SPHERE_SUMMON_1 55895// 1x 30106
|
||||
#define H_SPELL_FLAME_SPHERE_SUMMON_1 59511// 1x 31686
|
||||
#define H_SPELL_FLAME_SPHERE_SUMMON_2 59512// 1x 31687
|
||||
#define SPELL_FLAME_SPHERE_SPAWN_EFFECT 55891
|
||||
#define SPELL_FLAME_SPHERE_VISUAL 55928
|
||||
#define SPELL_FLAME_SPHERE_PERIODIC 55926
|
||||
#define H_SPELL_FLAME_SPHERE_PERIODIC 59508
|
||||
#define SPELL_FLAME_SPHERE_DEATH_EFFECT 55947
|
||||
#define SPELL_BEAM_VISUAL 60342
|
||||
|
||||
#define SPELL_EMBRACE_OF_THE_VAMPYR 55959
|
||||
#define H_SPELL_EMBRACE_OF_THE_VAMPYR 59513
|
||||
|
||||
#define SPELL_VANISH 55964
|
||||
|
||||
#define CREATURE_FLAME_SPHERE 30106
|
||||
#define H_CREATURE_FLAME_SPHERE_1 31686
|
||||
#define H_CREATURE_FLAME_SPHERE_2 31687
|
||||
|
||||
#define DATA_EMBRACE_DMG 20000
|
||||
#define H_DATA_EMBRACE_DMG 40000
|
||||
|
||||
#define DATA_GROUND_POSITION_Z 11.4
|
||||
#define DATA_SPHERE_DISTANCE 20
|
||||
#define DATA_SPHERE_ANGLE_OFFSET 1
|
||||
|
||||
#define ACHIEVEMENT_THE_PARTY_IS_OVER 1861
|
||||
|
||||
//not in db
|
||||
//Yell
|
||||
#define SAY_AGGRO -1619021
|
||||
#define SAY_SLAY_1 -1619022
|
||||
#define SAY_SLAY_2 -1619023
|
||||
#define SAY_DEATH -1619024
|
||||
#define SAY_FEED_1 -1619025
|
||||
#define SAY_FEED_2 -1619026
|
||||
#define SAY_VANISH_1 -1619027
|
||||
#define SAY_VANISH_2 -1619028
|
||||
|
||||
enum Spells
|
||||
{
|
||||
SPELL_BLOODTHIRST = 55968, //Trigger Spell + add aura
|
||||
SPELL_CONJURE_FLAME_SPHERE = 55931,
|
||||
SPELL_FLAME_SPHERE_SUMMON_1 = 55895,// 1x 30106
|
||||
H_SPELL_FLAME_SPHERE_SUMMON_1 = 59511,// 1x 31686
|
||||
H_SPELL_FLAME_SPHERE_SUMMON_2 = 59512,// 1x 31687
|
||||
SPELL_FLAME_SPHERE_SPAWN_EFFECT = 55891,
|
||||
SPELL_FLAME_SPHERE_VISUAL = 55928,
|
||||
SPELL_FLAME_SPHERE_PERIODIC = 55926,
|
||||
H_SPELL_FLAME_SPHERE_PERIODIC = 59508,
|
||||
SPELL_FLAME_SPHERE_DEATH_EFFECT = 55947,
|
||||
SPELL_BEAM_VISUAL = 60342,
|
||||
SPELL_EMBRACE_OF_THE_VAMPYR = 55959,
|
||||
H_SPELL_EMBRACE_OF_THE_VAMPYR = 59513,
|
||||
SPELL_VANISH = 55964,
|
||||
CREATURE_FLAME_SPHERE = 30106,
|
||||
H_CREATURE_FLAME_SPHERE_1 = 31686,
|
||||
H_CREATURE_FLAME_SPHERE_2 = 31687
|
||||
};
|
||||
enum Misc
|
||||
{
|
||||
DATA_EMBRACE_DMG = 20000,
|
||||
H_DATA_EMBRACE_DMG = 40000,
|
||||
DATA_SPHERE_DISTANCE = 20,
|
||||
DATA_SPHERE_ANGLE_OFFSET = 1
|
||||
};
|
||||
#define DATA_GROUND_POSITION_Z 11.4
|
||||
enum Achievements
|
||||
{
|
||||
ACHIEVEMENT_THE_PARTY_IS_OVER = 1861
|
||||
};
|
||||
enum Yells
|
||||
{
|
||||
SAY_AGGRO = -1619021,
|
||||
SAY_SLAY_1 = -1619022,
|
||||
SAY_SLAY_2 = -1619023,
|
||||
SAY_DEATH = -1619024,
|
||||
SAY_FEED_1 = -1619025,
|
||||
SAY_FEED_2 = -1619026,
|
||||
SAY_VANISH_1 = -1619027,
|
||||
SAY_VANISH_2 = -1619028
|
||||
};
|
||||
enum CombatPhase
|
||||
{
|
||||
NORMAL,
|
||||
@@ -264,26 +265,18 @@ struct TRINITY_DLL_DECL boss_taldaramAI : public ScriptedAI
|
||||
{
|
||||
pInstance->SetData(DATA_PRINCE_TALDARAM_EVENT, DONE);
|
||||
|
||||
//Count players
|
||||
Unit *target = NULL;
|
||||
std::list<HostilReference *> t_list = m_creature->getThreatManager().getThreatList();
|
||||
std::vector<Unit *> target_list;
|
||||
for(std::list<HostilReference *>::iterator itr = t_list.begin(); itr!= t_list.end(); ++itr)
|
||||
//The Party's Over achievement:
|
||||
AchievementEntry const *AchievThePartyIsOver = GetAchievementStore()->LookupEntry(ACHIEVEMENT_THE_PARTY_IS_OVER);
|
||||
Map* pMap = m_creature->GetMap();
|
||||
if (pMap && pMap->IsDungeon() && HeroicMode && AchievThePartyIsOver)
|
||||
{
|
||||
target = Unit::GetUnit(*m_creature, (*itr)->getUnitGuid());
|
||||
// exclude pets & totems
|
||||
if (target && target->GetTypeId() == TYPEID_PLAYER)
|
||||
target_list.push_back(target);
|
||||
target = NULL;
|
||||
}
|
||||
if (HeroicMode && target_list.size() < 5)
|
||||
{
|
||||
AchievementEntry const *AchievThePartyIsOver = GetAchievementStore()->LookupEntry(ACHIEVEMENT_THE_PARTY_IS_OVER);
|
||||
if (AchievThePartyIsOver)
|
||||
{
|
||||
for(std::vector<Unit *>::iterator itr = target_list.begin(); itr!= target_list.end(); ++itr)
|
||||
((Player*)(*itr))->CompletedAchievement(AchievThePartyIsOver);
|
||||
}
|
||||
Map::PlayerList const &players = pMap->GetPlayers();
|
||||
uint8 count = 0;
|
||||
for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
|
||||
++count;
|
||||
if (count < 5)
|
||||
for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
|
||||
itr->getSource()->CompletedAchievement(AchievThePartyIsOver);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,6 +34,11 @@ enum Yells
|
||||
SAY_STUN = -1603006
|
||||
};
|
||||
|
||||
enum Achievements
|
||||
{
|
||||
ACHIEVEMENT_GOOD_GRIEF = 1866
|
||||
};
|
||||
|
||||
struct TRINITY_DLL_DECL boss_maiden_of_griefAI : public ScriptedAI
|
||||
{
|
||||
boss_maiden_of_griefAI(Creature *c) : ScriptedAI(c)
|
||||
@@ -49,6 +54,7 @@ struct TRINITY_DLL_DECL boss_maiden_of_griefAI : public ScriptedAI
|
||||
uint32 StormOfGriefTimer;
|
||||
uint32 ShockOfSorrowTimer;
|
||||
uint32 PillarOfWoeTimer;
|
||||
uint32 AchievTimer;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
@@ -56,6 +62,7 @@ struct TRINITY_DLL_DECL boss_maiden_of_griefAI : public ScriptedAI
|
||||
StormOfGriefTimer = 10000;
|
||||
ShockOfSorrowTimer = 20000+rand()%5000;
|
||||
PillarOfWoeTimer = 5000 + rand()%10000;
|
||||
AchievTimer = 0;
|
||||
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_MAIDEN_OF_GRIEF_EVENT, NOT_STARTED);
|
||||
@@ -74,6 +81,11 @@ struct TRINITY_DLL_DECL boss_maiden_of_griefAI : public ScriptedAI
|
||||
//Return since we have no target
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
//Achievement counter
|
||||
if (pInstance)
|
||||
if (pInstance->GetData(DATA_MAIDEN_OF_GRIEF_EVENT) == IN_PROGRESS)
|
||||
AchievTimer += diff;
|
||||
|
||||
if(IsHeroic)
|
||||
{
|
||||
@@ -122,6 +134,16 @@ struct TRINITY_DLL_DECL boss_maiden_of_griefAI : public ScriptedAI
|
||||
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_MAIDEN_OF_GRIEF_EVENT, DONE);
|
||||
|
||||
AchievementEntry const *AchievGoodGrief = GetAchievementStore()->LookupEntry(ACHIEVEMENT_GOOD_GRIEF);
|
||||
Map* pMap = m_creature->GetMap();
|
||||
|
||||
if (HeroicMode && AchievTimer < 60000 && pMap && pMap->IsDungeon() && AchievGoodGrief)
|
||||
{
|
||||
Map::PlayerList const &players = pMap->GetPlayers();
|
||||
for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
|
||||
itr->getSource()->CompletedAchievement(AchievGoodGrief);
|
||||
}
|
||||
}
|
||||
void KilledUnit(Unit *victim)
|
||||
{
|
||||
|
||||
@@ -154,8 +154,8 @@ struct TRINITY_DLL_DECL instance_halls_of_stone : public ScriptedInstance
|
||||
{
|
||||
switch(type)
|
||||
{
|
||||
case DATA_MAIDEN_OF_GRIEF_EVENT: return m_auiEncounter[0];
|
||||
case DATA_KRYSTALLUS_EVENT: return m_auiEncounter[1];
|
||||
case DATA_KRYSTALLUS_EVENT: return m_auiEncounter[0];
|
||||
case DATA_MAIDEN_OF_GRIEF_EVENT: return m_auiEncounter[1];
|
||||
case DATA_SJONNIR_EVENT: return m_auiEncounter[2];
|
||||
case DATA_BRANN_EVENT: return m_auiEncounter[3];
|
||||
}
|
||||
|
||||
@@ -12,63 +12,63 @@ update creature_template set scriptname = 'boss_svala' where entry = '';
|
||||
#include "precompiled.h"
|
||||
#include "def_pinnacle.h"
|
||||
|
||||
//Spells
|
||||
#define SPELL_CALL_FLAMES 48258
|
||||
#define SPELL_RITUAL_OF_THE_SWORD 48276 //Effect #1 Teleport, Effect #2 Dummy
|
||||
#define SPELL_SINSTER_STRIKE 15667
|
||||
#define H_SPELL_SINSTER_STRIKE 59409
|
||||
|
||||
#define SPELL_SVALA_TRANSFORMING1 54140
|
||||
#define SPELL_SVALA_TRANSFORMING2 54205
|
||||
|
||||
enum Spells
|
||||
{
|
||||
SPELL_CALL_FLAMES = 48258,
|
||||
SPELL_RITUAL_OF_THE_SWORD = 48276, //Effect #1 Teleport, Effect #2 Dummy
|
||||
SPELL_SINSTER_STRIKE = 15667,
|
||||
H_SPELL_SINSTER_STRIKE = 59409,
|
||||
SPELL_SVALA_TRANSFORMING1 = 54140,
|
||||
SPELL_SVALA_TRANSFORMING2 = 54205
|
||||
};
|
||||
//not in db
|
||||
//Yells
|
||||
#define SAY_DIALOG_WITH_ARTHAS_1 -1575015
|
||||
#define SAY_DIALOG_WITH_ARTHAS_2 -1575016
|
||||
#define SAY_DIALOG_WITH_ARTHAS_3 -1575017
|
||||
#define SAY_AGGRO -1575018
|
||||
#define SAY_SLAY_1 -1575019
|
||||
#define SAY_SLAY_2 -1575020
|
||||
#define SAY_SLAY_3 -1575021
|
||||
#define SAY_DEATH -1575022
|
||||
#define SAY_SACRIFICE_PLAYER_1 -1575023
|
||||
#define SAY_SACRIFICE_PLAYER_2 -1575024
|
||||
#define SAY_SACRIFICE_PLAYER_3 -1575025
|
||||
#define SAY_SACRIFICE_PLAYER_4 -1575026
|
||||
#define SAY_SACRIFICE_PLAYER_5 -1575027
|
||||
#define SAY_DIALOG_OF_ARTHAS_1 -1575028
|
||||
#define SAY_DIALOG_OF_ARTHAS_2 -1575029
|
||||
|
||||
//creatures
|
||||
#define CREATURE_ARTHAS 24266 // Image of Arthas
|
||||
#define CREATURE_SVALA_SORROWGRAVE 26668 // Svala after transformation
|
||||
#define CREATURE_SVALA 29281 // Svala before transformation
|
||||
#define CREATURE_RITUAL_CHANNELER 27281
|
||||
//ritual channeler's spells
|
||||
#define SPELL_PARALYZE 48278
|
||||
#define SPELL_SHADOWS_IN_THE_DARK 59407
|
||||
|
||||
//other data
|
||||
#define DATA_SVALA_DISPLAY_ID 11686
|
||||
|
||||
enum Yells
|
||||
{
|
||||
SAY_DIALOG_WITH_ARTHAS_1 = -1575015,
|
||||
SAY_DIALOG_WITH_ARTHAS_2 = -1575016,
|
||||
SAY_DIALOG_WITH_ARTHAS_3 = -1575017,
|
||||
SAY_AGGRO = -1575018,
|
||||
SAY_SLAY_1 = -1575019,
|
||||
SAY_SLAY_2 = -1575020,
|
||||
SAY_SLAY_3 = -1575021,
|
||||
SAY_DEATH = -1575022,
|
||||
SAY_SACRIFICE_PLAYER_1 = -1575023,
|
||||
SAY_SACRIFICE_PLAYER_2 = -1575024,
|
||||
SAY_SACRIFICE_PLAYER_3 = -1575025,
|
||||
SAY_SACRIFICE_PLAYER_4 = -1575026,
|
||||
SAY_SACRIFICE_PLAYER_5 = -1575027,
|
||||
SAY_DIALOG_OF_ARTHAS_1 = -1575028,
|
||||
SAY_DIALOG_OF_ARTHAS_2 = -1575029
|
||||
};
|
||||
enum Creatures
|
||||
{
|
||||
CREATURE_ARTHAS = 24266, // Image of Arthas
|
||||
CREATURE_SVALA_SORROWGRAVE = 26668, // Svala after transformation
|
||||
CREATURE_SVALA = 29281, // Svala before transformation
|
||||
CREATURE_RITUAL_CHANNELER = 27281,
|
||||
//ritual channeler's spells
|
||||
SPELL_PARALYZE = 48278,
|
||||
SPELL_SHADOWS_IN_THE_DARK = 59407
|
||||
};
|
||||
enum Misc
|
||||
{
|
||||
DATA_SVALA_DISPLAY_ID = 11686
|
||||
};
|
||||
enum IntroPhase
|
||||
{
|
||||
IDLE,
|
||||
INTRO,
|
||||
FINISHED
|
||||
};
|
||||
|
||||
enum CombatPhase
|
||||
{
|
||||
NORMAL,
|
||||
SACRIFICING
|
||||
};
|
||||
|
||||
struct Locations
|
||||
{
|
||||
float x, y, z;
|
||||
};
|
||||
|
||||
static Locations RitualChannelerLocations[]=
|
||||
{
|
||||
{296.42, -355.01, 90.94},
|
||||
@@ -107,7 +107,7 @@ struct TRINITY_DLL_DECL boss_svalaAI : public ScriptedAI
|
||||
{
|
||||
if (!pWho)
|
||||
return;
|
||||
if (pWho->isTargetableForAttack() && m_creature->IsHostileTo(pWho) && Phase == IDLE && m_creature->IsWithinDistInMap(pWho, 40))
|
||||
if (Phase == IDLE && pWho->isTargetableForAttack() && m_creature->IsHostileTo(pWho) && Phase == IDLE && m_creature->IsWithinDistInMap(pWho, 40))
|
||||
{
|
||||
Phase = INTRO;
|
||||
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
@@ -125,6 +125,8 @@ struct TRINITY_DLL_DECL boss_svalaAI : public ScriptedAI
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
if (Phase != INTRO)
|
||||
return;
|
||||
if (uiIntroTimer < diff)
|
||||
{
|
||||
if(!pArthas)
|
||||
@@ -279,7 +281,9 @@ struct TRINITY_DLL_DECL boss_svala_sorrowgraveAI : public ScriptedAI
|
||||
{
|
||||
DoScriptText(RAND(SAY_SACRIFICE_PLAYER_1,SAY_SACRIFICE_PLAYER_2,SAY_SACRIFICE_PLAYER_3,SAY_SACRIFICE_PLAYER_4,SAY_SACRIFICE_PLAYER_5),m_creature);
|
||||
DoCast(pSacrificeTarget,SPELL_RITUAL_OF_THE_SWORD);
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_FLYING);
|
||||
//Spell doesn't teleport
|
||||
DoTeleportPlayer(pSacrificeTarget, 296.632, -346.075, 90.63, 4.6);
|
||||
m_creature->SetUnitMovementFlags(MOVEMENTFLAG_FLY_MODE);
|
||||
DoTeleportTo(296.632, -346.075, 120.85);
|
||||
Phase = SACRIFICING;
|
||||
|
||||
@@ -309,6 +313,16 @@ struct TRINITY_DLL_DECL boss_svala_sorrowgraveAI : public ScriptedAI
|
||||
}
|
||||
if (bSacrificed && pSacrificeTarget && pSacrificeTarget->isAlive())
|
||||
m_creature->DealDamage(pSacrificeTarget, pSacrificeTarget->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
|
||||
|
||||
//go down
|
||||
Phase = NORMAL;
|
||||
pSacrificeTarget = NULL;
|
||||
m_creature->SetUnitMovementFlags(MOVEMENTFLAG_WALK_MODE);
|
||||
Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0);
|
||||
while (pTarget && pTarget->GetTypeId() != TYPEID_PLAYER)
|
||||
pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0);
|
||||
if (pTarget)
|
||||
m_creature->GetMotionMaster()->MoveChase(pTarget);
|
||||
|
||||
uiSacrificeTimer = 8000;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user