aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormaximius <none@none>2009-10-06 13:16:10 -0700
committermaximius <none@none>2009-10-06 13:16:10 -0700
commitdd84dfd56da21763840491c1ff2f363d73e9d6de (patch)
tree7bf91ea4888031cc71b0b18d0d7106404dca35f3 /src
parenta3de0f7ba0dbe107fd5b66f3d3518764abb2c0f6 (diff)
*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
Diffstat (limited to 'src')
-rw-r--r--src/bindings/scripts/scripts/northrend/azjol_nerub/ahnkahet/boss_prince_taldaram.cpp115
-rw-r--r--src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/boss_maiden_of_grief.cpp22
-rw-r--r--src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/instance_halls_of_stone.cpp4
-rw-r--r--src/bindings/scripts/scripts/northrend/utgarde_keep/utgarde_pinnacle/boss_svala.cpp100
-rw-r--r--src/game/CreatureAI.cpp3
-rw-r--r--src/game/ObjectMgr.cpp9
-rw-r--r--src/game/Player.cpp7
7 files changed, 152 insertions, 108 deletions
diff --git a/src/bindings/scripts/scripts/northrend/azjol_nerub/ahnkahet/boss_prince_taldaram.cpp b/src/bindings/scripts/scripts/northrend/azjol_nerub/ahnkahet/boss_prince_taldaram.cpp
index 27b91a9a269..3b191dd7f8d 100644
--- a/src/bindings/scripts/scripts/northrend/azjol_nerub/ahnkahet/boss_prince_taldaram.cpp
+++ b/src/bindings/scripts/scripts/northrend/azjol_nerub/ahnkahet/boss_prince_taldaram.cpp
@@ -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)
- {
- 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)
+ //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)
{
- 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);
}
}
}
diff --git a/src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/boss_maiden_of_grief.cpp b/src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/boss_maiden_of_grief.cpp
index 01664ee0090..42a79698476 100644
--- a/src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/boss_maiden_of_grief.cpp
+++ b/src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/boss_maiden_of_grief.cpp
@@ -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)
{
diff --git a/src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/instance_halls_of_stone.cpp b/src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/instance_halls_of_stone.cpp
index 44872cede03..4af80a93abd 100644
--- a/src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/instance_halls_of_stone.cpp
+++ b/src/bindings/scripts/scripts/northrend/ulduar/halls_of_stone/instance_halls_of_stone.cpp
@@ -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];
}
diff --git a/src/bindings/scripts/scripts/northrend/utgarde_keep/utgarde_pinnacle/boss_svala.cpp b/src/bindings/scripts/scripts/northrend/utgarde_keep/utgarde_pinnacle/boss_svala.cpp
index 14a6793a71d..db246aa3f91 100644
--- a/src/bindings/scripts/scripts/northrend/utgarde_keep/utgarde_pinnacle/boss_svala.cpp
+++ b/src/bindings/scripts/scripts/northrend/utgarde_keep/utgarde_pinnacle/boss_svala.cpp
@@ -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;
}
diff --git a/src/game/CreatureAI.cpp b/src/game/CreatureAI.cpp
index a3a903c23a6..afa34c1d3e0 100644
--- a/src/game/CreatureAI.cpp
+++ b/src/game/CreatureAI.cpp
@@ -93,12 +93,13 @@ void CreatureAI::DoZoneInCombat(Creature* creature)
creature->AddThreat(pPlayer, 0.0f);
}
+ /* Causes certain things to never leave the threat list (Priest Lightwell, etc):
for(Unit::ControlList::const_iterator itr = pPlayer->m_Controlled.begin(); itr != pPlayer->m_Controlled.end(); ++itr)
{
creature->SetInCombatWith(*itr);
(*itr)->SetInCombatWith(creature);
creature->AddThreat(*itr, 0.0f);
- }
+ }*/
}
}
}
diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp
index 73a85e55a41..588722213cb 100644
--- a/src/game/ObjectMgr.cpp
+++ b/src/game/ObjectMgr.cpp
@@ -5284,6 +5284,15 @@ uint32 ObjectMgr::GetTaxiMountDisplayId( uint32 id, uint32 team, bool allowed_al
else
mount_entry = node->MountCreatureID[0];
+ // Fix for Alliance not being able to use Acherus taxi
+ // only one mount type for both sides
+ if (mount_entry == 0 && allowed_alt_team)
+ {
+ // Simply reverse the selection. At least one team in theory should
+ // have a valid mount ID to choose
+ mount_entry = (team == ALLIANCE) ? node->MountCreatureID[0] : node->MountCreatureID[1];
+ }
+
CreatureInfo const *mount_info = GetCreatureTemplate(mount_entry);
if (mount_info)
{
diff --git a/src/game/Player.cpp b/src/game/Player.cpp
index 7d7f9427f9e..603cf24319f 100644
--- a/src/game/Player.cpp
+++ b/src/game/Player.cpp
@@ -17965,7 +17965,12 @@ bool Player::ActivateTaxiPathTo(std::vector<uint32> const& nodes, Creature* npc
}
// get mount model (in case non taximaster (npc==NULL) allow more wide lookup)
- uint32 mount_display_id = objmgr.GetTaxiMountDisplayId(sourcenode, GetTeam(), npc == NULL);
+ //
+ // Hack-Fix for Alliance not being able to use Acherus taxi. There is
+ // only one mount ID for both sides. Probably not good to use 315 in case DBC nodes
+ // change but I couldn't find a suitable alternative. OK to use class because only DK
+ // can use this taxi.
+ uint32 mount_display_id = objmgr.GetTaxiMountDisplayId(sourcenode, GetTeam(), npc == NULL || (sourcenode == 315 && getClass() == CLASS_DEATH_KNIGHT));
// in spell case allow 0 model
if ((mount_display_id == 0 && spellid == 0) || sourcepath == 0)