Merge [SD2]

r1186 Remove one hack (SPELL_EFFECT_CHARGE2 implemented in Mangos) - skip
r1187 After one boss of tomb of seven event dead (BRD), open door for progression of instance. Remove manual summon and use spell instead.
r1188 Move most handling of GO's in BT to instance script. - skip
r1189 Fix possible crash, m_pInstance must always be checked before use. - we don't have that problem
r1190 Remove old commented code no longer valid and apply code style
r1191 Update MaNGOS-8095-ScriptDev2.patch, correcting whitespace, tabs and linefeed - skip

--HG--
branch : trunk
This commit is contained in:
Kudlaty
2009-08-12 18:38:13 +02:00
parent 99eafd6a52
commit 864e179240
2 changed files with 113 additions and 101 deletions
@@ -17,16 +17,19 @@
/* ScriptData /* ScriptData
SDName: Boss_Tomb_Of_Seven SDName: Boss_Tomb_Of_Seven
SD%Complete: 50 SD%Complete: 50
SDComment: Learning Smelt Dark Iron if tribute quest rewarded. Missing event and re-spawn GO Spectral Chalice SDComment: Learning Smelt Dark Iron if tribute quest rewarded. Missing event.
SDCategory: Blackrock Depths SDCategory: Blackrock Depths
EndScriptData */ EndScriptData */
#include "precompiled.h" #include "precompiled.h"
#include "def_blackrock_depths.h" #include "def_blackrock_depths.h"
#define SPELL_SUNDERARMOR 24317 enum
#define SPELL_SHIELDBLOCK 12169 {
#define SPELL_STRIKE 15580 SPELL_SUNDERARMOR = 24317,
SPELL_SHIELDBLOCK = 12169,
SPELL_STRIKE = 15580
};
struct TRINITY_DLL_DECL boss_angerrelAI : public ScriptedAI struct TRINITY_DLL_DECL boss_angerrelAI : public ScriptedAI
{ {
@@ -102,9 +105,12 @@ CreatureAI* GetAI_boss_angerrel(Creature *_Creature)
return new boss_angerrelAI (_Creature); return new boss_angerrelAI (_Creature);
} }
#define SPELL_SINISTERSTRIKE 15581 enum
#define SPELL_BACKSTAB 15582 {
#define SPELL_GOUGE 13579 SPELL_SINISTERSTRIKE = 15581,
SPELL_BACKSTAB = 15582,
SPELL_GOUGE = 13579
};
struct TRINITY_DLL_DECL boss_doperelAI : public ScriptedAI struct TRINITY_DLL_DECL boss_doperelAI : public ScriptedAI
{ {
@@ -180,9 +186,12 @@ CreatureAI* GetAI_boss_doperel(Creature *_Creature)
return new boss_doperelAI (_Creature); return new boss_doperelAI (_Creature);
} }
#define SPELL_SHADOWBOLT 17483 //Not sure if right ID enum
#define SPELL_MANABURN 10876 {
#define SPELL_SHADOWSHIELD 22417 SPELL_SHADOWBOLT = 17483, //Not sure if right ID
SPELL_MANABURN = 10876,
SPELL_SHADOWSHIELD = 22417
};
struct TRINITY_DLL_DECL boss_haterelAI : public ScriptedAI struct TRINITY_DLL_DECL boss_haterelAI : public ScriptedAI
{ {
@@ -271,10 +280,13 @@ CreatureAI* GetAI_boss_haterel(Creature *_Creature)
return new boss_haterelAI (_Creature); return new boss_haterelAI (_Creature);
} }
#define SPELL_MINDBLAST 15587 enum
#define SPELL_HEAL 15586 {
#define SPELL_PRAYEROFHEALING 15585 SPELL_MINDBLAST = 15587,
#define SPELL_SHIELD 10901 SPELL_HEAL = 15586,
SPELL_PRAYEROFHEALING = 15585,
SPELL_SHIELD = 10901
};
struct TRINITY_DLL_DECL boss_vilerelAI : public ScriptedAI struct TRINITY_DLL_DECL boss_vilerelAI : public ScriptedAI
{ {
@@ -359,11 +371,14 @@ CreatureAI* GetAI_boss_vilerel(Creature *_Creature)
return new boss_vilerelAI (_Creature); return new boss_vilerelAI (_Creature);
} }
#define SPELL_FROSTBOLT 16799 enum
#define SPELL_FROSTARMOR 15784 //This is actually a buff he gives himself {
#define SPELL_BLIZZARD 19099 SPELL_FROSTBOLT = 16799,
#define SPELL_FROSTNOVA 15063 SPELL_FROSTARMOR = 15784, //This is actually a buff he gives himself
#define SPELL_FROSTWARD 15004 SPELL_BLIZZARD = 19099,
SPELL_FROSTNOVA = 15063,
SPELL_FROSTWARD = 15004
};
struct TRINITY_DLL_DECL boss_seethrelAI : public ScriptedAI struct TRINITY_DLL_DECL boss_seethrelAI : public ScriptedAI
{ {
@@ -461,9 +476,12 @@ CreatureAI* GetAI_boss_seethrel(Creature *_Creature)
return new boss_seethrelAI (_Creature); return new boss_seethrelAI (_Creature);
} }
#define SPELL_HAMSTRING 9080 enum
#define SPELL_CLEAVE 15579 {
#define SPELL_MORTALSTRIKE 15708 SPELL_HAMSTRING = 9080,
SPELL_CLEAVE = 15579,
SPELL_MORTALSTRIKE = 15708
};
struct TRINITY_DLL_DECL boss_gloomrelAI : public ScriptedAI struct TRINITY_DLL_DECL boss_gloomrelAI : public ScriptedAI
{ {
@@ -585,10 +603,14 @@ bool GossipSelect_boss_gloomrel(Player *player, Creature *_Creature, uint32 send
return true; return true;
} }
#define SPELL_SHADOWBOLTVOLLEY 17228 enum
#define SPELL_IMMOLATE 15505 {
#define SPELL_CURSEOFWEAKNESS 17227 SPELL_SHADOWBOLTVOLLEY = 17228,
#define SPELL_DEMONARMOR 11735 SPELL_IMMOLATE = 15505,
SPELL_CURSEOFWEAKNESS = 17227,
SPELL_DEMONARMOR = 11735,
SPELL_SUMMON_VOIDWALKERS = 15092
};
struct TRINITY_DLL_DECL boss_doomrelAI : public ScriptedAI struct TRINITY_DLL_DECL boss_doomrelAI : public ScriptedAI
{ {
@@ -614,6 +636,10 @@ struct TRINITY_DLL_DECL boss_doomrelAI : public ScriptedAI
Voidwalkers = false; Voidwalkers = false;
m_creature->setFaction(FACTION_FRIEND); m_creature->setFaction(FACTION_FRIEND);
// was set before event start, so set again
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2);
if(pInstance) if(pInstance)
if(pInstance->GetData(DATA_GHOSTKILL) >= 7) if(pInstance->GetData(DATA_GHOSTKILL) >= 7)
m_creature->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE); m_creature->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE);
@@ -644,27 +670,6 @@ struct TRINITY_DLL_DECL boss_doomrelAI : public ScriptedAI
pInstance->SetData(DATA_GHOSTKILL, 1); pInstance->SetData(DATA_GHOSTKILL, 1);
} }
void SummonVoidwalkers(Unit* victim)
{
Rand = rand()%5;
switch (rand()%2)
{
case 0: RandX = 0 - Rand; break;
case 1: RandX = 0 + Rand; break;
}
Rand = 0;
Rand = rand()%5;
switch (rand()%2)
{
case 0: RandY = 0 - Rand; break;
case 1: RandY = 0 + Rand; break;
}
Rand = 0;
Summoned = DoSpawnCreature(16119, RandX, RandY, 0, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 120000);
if(Summoned)
(Summoned->AI())->AttackStart(victim);
}
void UpdateAI(const uint32 diff) void UpdateAI(const uint32 diff)
{ {
if (!UpdateVictim() ) if (!UpdateVictim() )
@@ -703,9 +708,7 @@ struct TRINITY_DLL_DECL boss_doomrelAI : public ScriptedAI
//Summon Voidwalkers //Summon Voidwalkers
if (!Voidwalkers && m_creature->GetHealth()*100 / m_creature->GetMaxHealth() < 51 ) if (!Voidwalkers && m_creature->GetHealth()*100 / m_creature->GetMaxHealth() < 51 )
{ {
SummonVoidwalkers(m_creature->getVictim()); m_creature->CastSpell(m_creature->getVictim(), SPELL_SUMMON_VOIDWALKERS, true);
SummonVoidwalkers(m_creature->getVictim());
SummonVoidwalkers(m_creature->getVictim());
Voidwalkers = true; Voidwalkers = true;
} }
@@ -118,9 +118,6 @@ enum
POINT_ID_LAND = 200 POINT_ID_LAND = 200
}; };
//POS_SARTHARION_X = 3246.57,
//POS_SARTHARION_Y = 551.263,
struct Waypoint struct Waypoint
{ {
float m_fX, m_fY, m_fZ; float m_fX, m_fY, m_fZ;
@@ -207,41 +204,26 @@ struct TRINITY_DLL_DECL boss_sartharionAI : public ScriptedAI
m_bHasCalledShadron = false; m_bHasCalledShadron = false;
m_bHasCalledVesperon = false; m_bHasCalledVesperon = false;
if (m_pInstance)
{
if (!m_creature->isAlive())
return;
m_pInstance->SetData(TYPE_SARTHARION_EVENT, NOT_STARTED);
//do dragons actually respawn like this? Commented for now, until confirmed.
/*if (Unit* Temp1 = Unit::GetUnit((*m_creature),m_pInstance->GetData64(DATA_TENEBRON)))
if (Temp1->isDead())
((Creature*)Temp1)->Respawn();
if (Unit* Temp2 = Unit::GetUnit((*m_creature),m_pInstance->GetData64(DATA_SHADRON)))
if (Temp2->isDead())
((Creature*)Temp2)->Respawn();
if (Unit* Temp3 = Unit::GetUnit((*m_creature),m_pInstance->GetData64(DATA_VESPERON)))
if (Temp3->isDead())
((Creature*)Temp3)->Respawn();*/
}
if (m_creature->HasAura(SPELL_TWILIGHT_REVENGE)) if (m_creature->HasAura(SPELL_TWILIGHT_REVENGE))
m_creature->RemoveAurasDueToSpell(SPELL_TWILIGHT_REVENGE); m_creature->RemoveAurasDueToSpell(SPELL_TWILIGHT_REVENGE);
} }
void JustReachedHome()
{
if (m_pInstance)
m_pInstance->SetData(TYPE_SARTHARION_EVENT, NOT_STARTED);
}
void Aggro(Unit* pWho) void Aggro(Unit* pWho)
{ {
DoScriptText(SAY_SARTHARION_AGGRO,m_creature); DoScriptText(SAY_SARTHARION_AGGRO,m_creature);
DoZoneInCombat(); DoZoneInCombat();
if (m_pInstance) if (m_pInstance)
{
m_pInstance->SetData(TYPE_SARTHARION_EVENT, IN_PROGRESS); m_pInstance->SetData(TYPE_SARTHARION_EVENT, IN_PROGRESS);
FetchDragons();
FetchDragons(); }
} }
void JustDied(Unit* pKiller) void JustDied(Unit* pKiller)
@@ -355,13 +337,6 @@ struct TRINITY_DLL_DECL boss_sartharionAI : public ScriptedAI
if (!UpdateVictim()) if (!UpdateVictim())
return; return;
//reset if out of his platform, must find better/faster way to do this
//if (m_creature->GetDistance2d(POS_SARTHARION_X, POS_SARTHARION_Y) > 55)
//{
//EnterEvadeMode();
//return;
//}
if (!m_bIsBerserk && (m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) <= 10) if (!m_bIsBerserk && (m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) <= 10)
{ {
DoScriptText(SAY_SARTHARION_BERSERK,m_creature); DoScriptText(SAY_SARTHARION_BERSERK,m_creature);
@@ -376,7 +351,9 @@ struct TRINITY_DLL_DECL boss_sartharionAI : public ScriptedAI
{ {
DoCast(m_creature, SPELL_WILL_OF_SARTHARION); DoCast(m_creature, SPELL_WILL_OF_SARTHARION);
m_uiEnrageTimer = 0; m_uiEnrageTimer = 0;
}else m_uiEnrageTimer -= uiDiff; }
else
m_uiEnrageTimer -= uiDiff;
} }
// flame tsunami // flame tsunami
@@ -384,7 +361,9 @@ struct TRINITY_DLL_DECL boss_sartharionAI : public ScriptedAI
{ {
SendFlameTsunami(); SendFlameTsunami();
m_uiFlameTsunamiTimer = 30000; m_uiFlameTsunamiTimer = 30000;
}else m_uiFlameTsunamiTimer -= uiDiff; }
else
m_uiFlameTsunamiTimer -= uiDiff;
// flame breath // flame breath
if (m_uiFlameBreathTimer < uiDiff) if (m_uiFlameBreathTimer < uiDiff)
@@ -392,21 +371,27 @@ struct TRINITY_DLL_DECL boss_sartharionAI : public ScriptedAI
DoScriptText(SAY_SARTHARION_BREATH, m_creature); DoScriptText(SAY_SARTHARION_BREATH, m_creature);
DoCast(m_creature->getVictim(), m_bIsHeroic ? SPELL_FLAME_BREATH_H : SPELL_FLAME_BREATH); DoCast(m_creature->getVictim(), m_bIsHeroic ? SPELL_FLAME_BREATH_H : SPELL_FLAME_BREATH);
m_uiFlameBreathTimer = 25000 + rand()%10000; m_uiFlameBreathTimer = 25000 + rand()%10000;
}else m_uiFlameBreathTimer -= uiDiff; }
else
m_uiFlameBreathTimer -= uiDiff;
// Tail Sweep // Tail Sweep
if (m_uiTailSweepTimer < uiDiff) if (m_uiTailSweepTimer < uiDiff)
{ {
DoCast(m_creature->getVictim(), m_bIsHeroic ? SPELL_TAIL_LASH_H : SPELL_TAIL_LASH); DoCast(m_creature->getVictim(), m_bIsHeroic ? SPELL_TAIL_LASH_H : SPELL_TAIL_LASH);
m_uiTailSweepTimer = 15000 + rand()%5000; m_uiTailSweepTimer = 15000 + rand()%5000;
}else m_uiTailSweepTimer -= uiDiff; }
else
m_uiTailSweepTimer -= uiDiff;
// Cleave // Cleave
if (m_uiCleaveTimer < uiDiff) if (m_uiCleaveTimer < uiDiff)
{ {
DoCast(m_creature->getVictim(), SPELL_CLEAVE); DoCast(m_creature->getVictim(), SPELL_CLEAVE);
m_uiCleaveTimer = 7000 + rand()%3000; m_uiCleaveTimer = 7000 + rand()%3000;
}else m_uiCleaveTimer -= uiDiff; }
else
m_uiCleaveTimer -= uiDiff;
// Lavas Strike // Lavas Strike
if (m_uiLavaStrikeTimer < uiDiff) if (m_uiLavaStrikeTimer < uiDiff)
@@ -423,28 +408,36 @@ struct TRINITY_DLL_DECL boss_sartharionAI : public ScriptedAI
} }
} }
m_uiLavaStrikeTimer = 5000 + rand()%15000; m_uiLavaStrikeTimer = 5000 + rand()%15000;
}else m_uiLavaStrikeTimer -= uiDiff; }
else
m_uiLavaStrikeTimer -= uiDiff;
// call tenebron // call tenebron
if (!m_bHasCalledTenebron && m_uiTenebronTimer < uiDiff) if (!m_bHasCalledTenebron && m_uiTenebronTimer < uiDiff)
{ {
CallDragon(DATA_TENEBRON); CallDragon(DATA_TENEBRON);
m_bHasCalledTenebron = true; m_bHasCalledTenebron = true;
}else m_uiTenebronTimer -= uiDiff; }
else
m_uiTenebronTimer -= uiDiff;
// call shadron // call shadron
if (!m_bHasCalledShadron && m_uiShadronTimer < uiDiff) if (!m_bHasCalledShadron && m_uiShadronTimer < uiDiff)
{ {
CallDragon(DATA_SHADRON); CallDragon(DATA_SHADRON);
m_bHasCalledShadron = true; m_bHasCalledShadron = true;
}else m_uiShadronTimer -= uiDiff; }
else
m_uiShadronTimer -= uiDiff;
// call vesperon // call vesperon
if (!m_bHasCalledVesperon && m_uiVesperonTimer < uiDiff) if (!m_bHasCalledVesperon && m_uiVesperonTimer < uiDiff)
{ {
CallDragon(DATA_VESPERON); CallDragon(DATA_VESPERON);
m_bHasCalledVesperon = true; m_bHasCalledVesperon = true;
}else m_uiVesperonTimer -= uiDiff; }
else
m_uiVesperonTimer -= uiDiff;
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
@@ -682,7 +675,9 @@ struct TRINITY_DLL_DECL dummy_dragonAI : public ScriptedAI
debug_log("dummy_dragonAI: %s moving to point %u", m_creature->GetName(), m_uiWaypointId); debug_log("dummy_dragonAI: %s moving to point %u", m_creature->GetName(), m_uiWaypointId);
m_uiMoveNextTimer = 0; m_uiMoveNextTimer = 0;
} else m_uiMoveNextTimer -= uiDiff; }
else
m_uiMoveNextTimer -= uiDiff;
} }
} }
}; };
@@ -738,7 +733,9 @@ struct TRINITY_DLL_DECL mob_tenebronAI : public dummy_dragonAI
DoCast(pTarget, m_bIsHeroic ? SPELL_SHADOW_FISSURE_H : SPELL_SHADOW_FISSURE); DoCast(pTarget, m_bIsHeroic ? SPELL_SHADOW_FISSURE_H : SPELL_SHADOW_FISSURE);
m_uiShadowFissureTimer = 15000 + rand()%5000; m_uiShadowFissureTimer = 15000 + rand()%5000;
}else m_uiShadowFissureTimer -= uiDiff; }
else
m_uiShadowFissureTimer -= uiDiff;
// shadow breath // shadow breath
if (m_uiShadowBreathTimer < uiDiff) if (m_uiShadowBreathTimer < uiDiff)
@@ -746,7 +743,9 @@ struct TRINITY_DLL_DECL mob_tenebronAI : public dummy_dragonAI
DoScriptText(SAY_TENEBRON_BREATH, m_creature); DoScriptText(SAY_TENEBRON_BREATH, m_creature);
DoCast(m_creature->getVictim(), m_bIsHeroic ? SPELL_SHADOW_BREATH_H : SPELL_SHADOW_BREATH); DoCast(m_creature->getVictim(), m_bIsHeroic ? SPELL_SHADOW_BREATH_H : SPELL_SHADOW_BREATH);
m_uiShadowBreathTimer = 20000 + rand()%5000; m_uiShadowBreathTimer = 20000 + rand()%5000;
}else m_uiShadowBreathTimer -= uiDiff; }
else
m_uiShadowBreathTimer -= uiDiff;
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
} }
@@ -814,7 +813,9 @@ struct TRINITY_DLL_DECL mob_shadronAI : public dummy_dragonAI
DoCast(pTarget, m_bIsHeroic ? SPELL_SHADOW_FISSURE_H : SPELL_SHADOW_FISSURE); DoCast(pTarget, m_bIsHeroic ? SPELL_SHADOW_FISSURE_H : SPELL_SHADOW_FISSURE);
m_uiShadowFissureTimer = 15000 + rand()%5000; m_uiShadowFissureTimer = 15000 + rand()%5000;
}else m_uiShadowFissureTimer -= uiDiff; }
else
m_uiShadowFissureTimer -= uiDiff;
// shadow breath // shadow breath
if (m_uiShadowBreathTimer < uiDiff) if (m_uiShadowBreathTimer < uiDiff)
@@ -822,7 +823,9 @@ struct TRINITY_DLL_DECL mob_shadronAI : public dummy_dragonAI
DoScriptText(SAY_SHADRON_BREATH, m_creature); DoScriptText(SAY_SHADRON_BREATH, m_creature);
DoCast(m_creature->getVictim(), m_bIsHeroic ? SPELL_SHADOW_BREATH_H : SPELL_SHADOW_BREATH); DoCast(m_creature->getVictim(), m_bIsHeroic ? SPELL_SHADOW_BREATH_H : SPELL_SHADOW_BREATH);
m_uiShadowBreathTimer = 20000 + rand()%5000; m_uiShadowBreathTimer = 20000 + rand()%5000;
}else m_uiShadowBreathTimer -= uiDiff; }
else
m_uiShadowBreathTimer -= uiDiff;
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
} }
@@ -884,7 +887,9 @@ struct TRINITY_DLL_DECL mob_vesperonAI : public dummy_dragonAI
DoCast(pTarget, m_bIsHeroic ? SPELL_SHADOW_FISSURE_H : SPELL_SHADOW_FISSURE); DoCast(pTarget, m_bIsHeroic ? SPELL_SHADOW_FISSURE_H : SPELL_SHADOW_FISSURE);
m_uiShadowFissureTimer = 15000 + rand()%5000; m_uiShadowFissureTimer = 15000 + rand()%5000;
}else m_uiShadowFissureTimer -= uiDiff; }
else
m_uiShadowFissureTimer -= uiDiff;
// shadow breath // shadow breath
if (m_uiShadowBreathTimer < uiDiff) if (m_uiShadowBreathTimer < uiDiff)
@@ -892,7 +897,9 @@ struct TRINITY_DLL_DECL mob_vesperonAI : public dummy_dragonAI
DoScriptText(SAY_VESPERON_BREATH, m_creature); DoScriptText(SAY_VESPERON_BREATH, m_creature);
DoCast(m_creature->getVictim(), m_bIsHeroic ? SPELL_SHADOW_BREATH_H : SPELL_SHADOW_BREATH); DoCast(m_creature->getVictim(), m_bIsHeroic ? SPELL_SHADOW_BREATH_H : SPELL_SHADOW_BREATH);
m_uiShadowBreathTimer = 20000 + rand()%5000; m_uiShadowBreathTimer = 20000 + rand()%5000;
}else m_uiShadowBreathTimer -= uiDiff; }
else
m_uiShadowBreathTimer -= uiDiff;
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
} }
@@ -1061,7 +1068,9 @@ struct TRINITY_DLL_DECL mob_twilight_whelpAI : public ScriptedAI
{ {
DoCast(m_creature->getVictim(), SPELL_FADE_ARMOR); DoCast(m_creature->getVictim(), SPELL_FADE_ARMOR);
m_uiFadeArmorTimer = 5000 + rand()%5000; m_uiFadeArmorTimer = 5000 + rand()%5000;
}else m_uiFadeArmorTimer -= uiDiff; }
else
m_uiFadeArmorTimer -= uiDiff;
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
} }