aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormaximius <none@none>2009-09-23 19:50:02 -0700
committermaximius <none@none>2009-09-23 19:50:02 -0700
commit8102372a67098e1af65888b0b411eb3b47814bf0 (patch)
tree34015699313a740b51b53f80c6dc62969c04c889 /src
parent3fce346a522780b92ad8902ce4ce141e86a08959 (diff)
*Krik'thir the Gatewatcher partial script by Manuel and Gyullo
*Ahn'Kahet: Fixes for Prince Taldaram & code Achievement by Tartalo --HG-- branch : trunk
Diffstat (limited to 'src')
-rw-r--r--src/bindings/scripts/scripts/northrend/azjol_nerub/ahnkahet/boss_prince_taldaram.cpp75
-rw-r--r--src/bindings/scripts/scripts/northrend/azjol_nerub/ahnkahet/instance_ahnkahet.cpp7
-rw-r--r--src/bindings/scripts/scripts/northrend/azjol_nerub/azjol_nerub/boss_krikthir_the_gatewatcher.cpp159
-rw-r--r--src/bindings/scripts/system/ScriptLoader.cpp2
4 files changed, 186 insertions, 57 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 605219e59e1..b6da4f87fcf 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
@@ -53,7 +53,10 @@ EndScriptData */
#define H_DATA_EMBRACE_DMG 40000
#define DATA_GROUND_POSITION_Z 11.4
-#define DATA_SPHERE_DISTANCE 100.0
+#define DATA_SPHERE_DISTANCE 20
+#define DATA_SPHERE_ANGLE_OFFSET 1
+
+#define ACHIEVEMENT_THE_PARTY_IS_OVER 1861
//not in db
//Yell
@@ -95,6 +98,9 @@ struct TRINITY_DLL_DECL boss_taldaramAI : public ScriptedAI
uint64 uiSphereGuids[2];
Unit *pEmbraceTarget;
+ Unit *pSphereTarget;
+
+ Creature* pSpheres[3];
CombatPhase Phase;
@@ -131,14 +137,38 @@ struct TRINITY_DLL_DECL boss_taldaramAI : public ScriptedAI
{
case CASTING_FLAME_SPHERES:
//DoCast(m_creature, SPELL_FLAME_SPHERE_SUMMON_1);
- DoSpawnCreature(CREATURE_FLAME_SPHERE, 0, 0, 5, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 10000);
+ pSpheres[0] = DoSpawnCreature(CREATURE_FLAME_SPHERE, 0, 0, 5, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 10000);
+ pSphereTarget = SelectUnit(SELECT_TARGET_RANDOM, 0);
+ while (pSphereTarget && pSphereTarget->GetTypeId() != TYPEID_PLAYER)
+ pSphereTarget = SelectUnit(SELECT_TARGET_RANDOM,0);
+ if (pSphereTarget)
+ {
+ float angle,x,y;
+ angle = pSpheres[0]->GetAngle(pSphereTarget);
+ x = pSpheres[0]->GetPositionX() + DATA_SPHERE_DISTANCE * cos(angle);
+ y = pSpheres[0]->GetPositionY() + DATA_SPHERE_DISTANCE * sin(angle);
+ pSpheres[0]->GetMotionMaster()->MovePoint(0, x, y, pSpheres[0]->GetPositionZ());
+ }
if (HeroicMode)
{
//DoCast(m_creature, H_SPELL_FLAME_SPHERE_SUMMON_1);
- DoSpawnCreature(H_CREATURE_FLAME_SPHERE_1, 0, 0, 5, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 10000);
+ pSpheres[1] = DoSpawnCreature(H_CREATURE_FLAME_SPHERE_1, 0, 0, 5, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 10000);
//DoCast(m_creature, H_SPELL_FLAME_SPHERE_SUMMON_2);
- DoSpawnCreature(H_CREATURE_FLAME_SPHERE_2, 0, 0, 5, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 10000);
+ pSpheres[2] = DoSpawnCreature(H_CREATURE_FLAME_SPHERE_2, 0, 0, 5, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 10000);
+ if (pSphereTarget)
+ {
+ float angle,x,y;
+ angle = pSpheres[1]->GetAngle(pSphereTarget) + DATA_SPHERE_ANGLE_OFFSET;
+ x = pSpheres[1]->GetPositionX() + DATA_SPHERE_DISTANCE/2 * cos(angle);
+ y = pSpheres[1]->GetPositionY() + DATA_SPHERE_DISTANCE/2 * sin(angle);
+ pSpheres[1]->GetMotionMaster()->MovePoint(0, x, y, pSpheres[1]->GetPositionZ());
+ angle = pSpheres[2]->GetAngle(pSphereTarget) - DATA_SPHERE_ANGLE_OFFSET;
+ x = pSpheres[2]->GetPositionX() + DATA_SPHERE_DISTANCE/2 * cos(angle);
+ y = pSpheres[2]->GetPositionY() + DATA_SPHERE_DISTANCE/2 * sin(angle);
+ pSpheres[2]->GetMotionMaster()->MovePoint(0, x, y, pSpheres[2]->GetPositionZ());
+ }
}
+
Phase = NORMAL;
uiPhaseTimer = 0;
break;
@@ -227,7 +257,31 @@ struct TRINITY_DLL_DECL boss_taldaramAI : public ScriptedAI
DoScriptText(SAY_DEATH, m_creature);
if (pInstance)
+ {
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)
+ {
+ 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);
+ }
+ }
+ }
}
void KilledUnit(Unit *victim)
@@ -268,6 +322,7 @@ struct TRINITY_DLL_DECL boss_taldaramAI : public ScriptedAI
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
m_creature->RemoveAurasDueToSpell(SPELL_BEAM_VISUAL);
+ m_creature->SetUnitMovementFlags(MOVEMENTFLAG_WALK_MODE);
m_creature->SetHomePosition(m_creature->GetPositionX(), m_creature->GetPositionY(), DATA_GROUND_POSITION_Z, m_creature->GetOrientation());
uint64 prison_GUID = pInstance->GetData64(DATA_PRINCE_TALDARAM_PLATFORM);
pInstance->HandleGameObject(prison_GUID,true);
@@ -287,21 +342,13 @@ struct TRINITY_DLL_DECL mob_taldaram_flamesphereAI : public ScriptedAI
void Reset()
{
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- m_creature->AddUnitMovementFlag(MOVEMENTFLAG_FLYING + MOVEMENTFLAG_HOVER);
+ m_creature->AddUnitMovementFlag(MOVEMENTFLAG_FLYING);
m_creature->setFaction(16);
+ m_creature->SetFloatValue(OBJECT_FIELD_SCALE_X, 1.0f);
DoCast(m_creature, SPELL_FLAME_SPHERE_VISUAL);
DoCast(m_creature, SPELL_FLAME_SPHERE_SPAWN_EFFECT);
DoCast(m_creature, HeroicMode ? H_SPELL_FLAME_SPHERE_PERIODIC : SPELL_FLAME_SPHERE_PERIODIC);
uiDespawnTimer = 10000;
- Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0);
- if (pTarget)
- {
- float angle,x,y;
- angle = m_creature->GetAngle(pTarget);
- x = m_creature->GetPositionX() + DATA_SPHERE_DISTANCE * cos(angle);
- y = m_creature->GetPositionY() + DATA_SPHERE_DISTANCE * sin(angle);
- m_creature->GetMotionMaster()->MovePoint(0, x, y, m_creature->GetPositionZ());
- }
}
void EnterCombat(Unit *who) {}
diff --git a/src/bindings/scripts/scripts/northrend/azjol_nerub/ahnkahet/instance_ahnkahet.cpp b/src/bindings/scripts/scripts/northrend/azjol_nerub/ahnkahet/instance_ahnkahet.cpp
index a1516f06dd5..d74fce9e47c 100644
--- a/src/bindings/scripts/scripts/northrend/azjol_nerub/ahnkahet/instance_ahnkahet.cpp
+++ b/src/bindings/scripts/scripts/northrend/azjol_nerub/ahnkahet/instance_ahnkahet.cpp
@@ -92,13 +92,15 @@ struct TRINITY_DLL_DECL instance_ahnkahet : public ScriptedInstance
{
switch(pGo->GetEntry())
{
- case 193564: Prince_TaldaramPlatform = pGo->GetGUID();break;
+ case 193564: Prince_TaldaramPlatform = pGo->GetGUID();
+ if (m_auiEncounter[1] == DONE) HandleGameObject(NULL,true,pGo); break;
case 193093: Prince_TaldaramSpheres[0] = pGo->GetGUID();
if (spheres[0] == IN_PROGRESS)
{
pGo->SetGoState(GO_STATE_ACTIVE);
pGo->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_UNK1);
}
+ else pGo->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_UNK1);
break;
case 193094: Prince_TaldaramSpheres[1] = pGo->GetGUID();
if (spheres[1] == IN_PROGRESS)
@@ -106,6 +108,7 @@ struct TRINITY_DLL_DECL instance_ahnkahet : public ScriptedInstance
pGo->SetGoState(GO_STATE_ACTIVE);
pGo->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_UNK1);
}
+ else pGo->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_UNK1);
break;
case 192236: Prince_TaldaramGate = pGo->GetGUID(); // Web gate past Prince Taldaram
if (m_auiEncounter[1] == DONE)HandleGameObject(NULL,true,pGo);break;
@@ -121,7 +124,7 @@ struct TRINITY_DLL_DECL instance_ahnkahet : public ScriptedInstance
case DATA_JEDOGA_SHADOWSEEKER: return Jedoga_Shadowseeker;
case DATA_HERALD_VOLAZJ: return Herald_Volazj;
case DATA_AMANITAR: return Amanitar;
- case DATA_SPHERE1: return Prince_TaldaramSpheres[0];
+ case DATA_SPHERE1: return Prince_TaldaramSpheres[0];
case DATA_SPHERE2: return Prince_TaldaramSpheres[1];
case DATA_PRINCE_TALDARAM_PLATFORM: return Prince_TaldaramPlatform;
}
diff --git a/src/bindings/scripts/scripts/northrend/azjol_nerub/azjol_nerub/boss_krikthir_the_gatewatcher.cpp b/src/bindings/scripts/scripts/northrend/azjol_nerub/azjol_nerub/boss_krikthir_the_gatewatcher.cpp
index f73f8818228..938cba19cf7 100644
--- a/src/bindings/scripts/scripts/northrend/azjol_nerub/azjol_nerub/boss_krikthir_the_gatewatcher.cpp
+++ b/src/bindings/scripts/scripts/northrend/azjol_nerub/azjol_nerub/boss_krikthir_the_gatewatcher.cpp
@@ -18,9 +18,8 @@
/* ScriptData
SDName: boss_krikthir_the_gatewatcher
-SDAuthor: LordVanMartin
-SD%Complete: 0
-SDComment: Placeholder
+SD%Complete: 80 %
+SDComment: Find in the future best timers and the event is not implemented.
SDCategory: Azjol Nerub
EndScriptData */
@@ -31,53 +30,128 @@ update creature_template set scriptname = 'boss_krik_thir' where entry = '';
#include "precompiled.h"
#include "def_azjol_nerub.h"
-#define SPELL_MIND_FLAY 52586
-#define H_SPELL_MIND_FLAY 59367
-#define SPELL_CURSE_OF_FATIGUE 52592
-#define H_SPELL_CURSE_OF_FATIGUE 59368
-#define SPELL_FRENZY 28747 // maybe 53361
-
-#define MOB_SKITTERING_SWARMER 28735
-#define MOB_SKITTERING_SWARMER_CONTROLLER 32593
-
-#define SPELL_SUMMON_SKITTERING_SWARMER 52438//AOE Effekt 140, maybe 52439
-#define SPELL_SUMMON_SKITTERING_SWARMER 52439//Summon 3x 28735
-
-// not in db
-//Yell
-#define SAY_AGGRO -1601011
-#define SAY_SLAY_1 -1601012
-#define SAY_SLAY_2 -1601013
-#define SAY_SLAY_3 -1601014
-#define SAY_DEATH -1601015
-#define SAY_SEND_GROUP_1 -1601018
-#define SAY_SEND_GROUP_2 -1601019
-#define SAY_SEND_GROUP_3 -1601020
-#define SAY_SWARM_1 -1601016
-#define SAY_SWARM_2 -1601017
-#define SAY_PREFIGHT_1 -1601021
-#define SAY_PREFIGHT_2 -1601022
-#define SAY_PREFIGHT_3 -1601023
+enum
+{
+ SPELL_MIND_FLAY = 52586,
+ H_SPELL_MIND_FLAY = 59367,
+ SPELL_CURSE_OF_FATIGUE = 52592,
+ H_SPELL_CURSE_OF_FATIGUE = 59368,
+ SPELL_FRENZY = 28747, //maybe 53361
+
+ MOB_SKITTERING_SWARMER = 28735,
+ MOB_SKITTERING_SWARMER_CONTROLLER = 32593,
+ MOB_SKITTERING_INFECTIOR = 28736,
+
+ SPELL_SUMMON_SKITTERING_SWARMER = 52438, //AOE Effect 140, maybe 52439
+ SPELL_SUMMON_SKITTERING_SWARMER_1 = 52439, //Summon 3x 28735
+
+ SAY_AGGRO = -1601000,
+ SAY_SLAY_1 = -1601001,
+ SAY_SLAY_2 = -1601002,
+ SAY_DEATH = -1601003,
+
+ //Not in db
+ SAY_SEND_GROUP_1 = -1601004,
+ SAY_SEND_GROUP_2 = -1601005,
+ SAY_SEND_GROUP_3 = -1601006,
+ SAY_SWARM_1 = -1601007,
+ SAY_SWARM_2 = -1601008,
+ SAY_PREFIGHT_1 = -1601009,
+ SAY_PREFIGHT_2 = -1601010,
+ SAY_PREFIGHT_3 = -1601011
+
+};
struct TRINITY_DLL_DECL boss_krik_thirAI : public ScriptedAI
{
- boss_krik_thirAI(Creature *c) : ScriptedAI(c) {}
+ boss_krik_thirAI(Creature *c) : ScriptedAI(c)
+ {
+ pInstance = c->GetInstanceData();
+ HeroicMode = c->GetMap()->IsHeroic();
+ }
+
+ ScriptedInstance* pInstance;
+ bool HeroicMode;
- void Reset() {}
+ uint32 MindFlayTimer;
+ uint32 CurseFatigueTimer;
+ uint32 SummonTimer;
+
+ void Reset()
+ {
+ MindFlayTimer = 15000;
+ CurseFatigueTimer = 12000;
+
+ if (pInstance)
+ pInstance->SetData(DATA_KRIKTHIR_THE_GATEWATCHER_EVENT, NOT_STARTED);
+ }
void EnterCombat(Unit* who)
{
DoScriptText(SAY_AGGRO, m_creature);
+ Summon();
+ SummonTimer = 15000;
+
+ if (pInstance)
+ pInstance->SetData(DATA_KRIKTHIR_THE_GATEWATCHER_EVENT, IN_PROGRESS);
+ }
+
+ void Summon()
+ {
+ m_creature->SummonCreature(MOB_SKITTERING_SWARMER,566.164,682.087,769.079,2.21657,TEMPSUMMON_TIMED_DESPAWN,25000);
+ m_creature->SummonCreature(MOB_SKITTERING_SWARMER,566.164,682.087,769.079,2.21657,TEMPSUMMON_TIMED_DESPAWN,25000);
+ m_creature->SummonCreature(MOB_SKITTERING_SWARMER,529.042,706.941,777.298,1.0821,TEMPSUMMON_TIMED_DESPAWN,25000);
+ m_creature->SummonCreature(MOB_SKITTERING_SWARMER,529.042,706.941,777.298,1.0821,TEMPSUMMON_TIMED_DESPAWN,25000);
+ m_creature->SummonCreature(MOB_SKITTERING_SWARMER,489.975,671.239,772.131,0.261799,TEMPSUMMON_TIMED_DESPAWN,25000);
+ m_creature->SummonCreature(MOB_SKITTERING_SWARMER,489.975,671.239,772.131,0.261799,TEMPSUMMON_TIMED_DESPAWN,25000);
+ m_creature->SummonCreature(MOB_SKITTERING_SWARMER,488.556,692.95,771.764,4.88692,TEMPSUMMON_TIMED_DESPAWN,25000);
+ m_creature->SummonCreature(MOB_SKITTERING_SWARMER,488.556,692.95,771.764,4.88692,TEMPSUMMON_TIMED_DESPAWN,25000);
+ m_creature->SummonCreature(MOB_SKITTERING_INFECTIOR,553.34,640.387,777.419,1.20428,TEMPSUMMON_TIMED_DESPAWN,25000);
+ m_creature->SummonCreature(MOB_SKITTERING_SWARMER,553.34,640.387,777.419,1.20428,TEMPSUMMON_TIMED_DESPAWN,25000);
+ m_creature->SummonCreature(MOB_SKITTERING_INFECTIOR,517.486,706.398,777.335,5.35816,TEMPSUMMON_TIMED_DESPAWN,25000);
+ m_creature->SummonCreature(MOB_SKITTERING_SWARMER,517.486,706.398,777.335,5.35816,TEMPSUMMON_TIMED_DESPAWN,25000);
+ m_creature->SummonCreature(MOB_SKITTERING_INFECTIOR,504.01,637.693,777.479,0.506145,TEMPSUMMON_TIMED_DESPAWN,25000);
+ m_creature->SummonCreature(MOB_SKITTERING_SWARMER,504.01,637.693,777.479,0.506145,TEMPSUMMON_TIMED_DESPAWN,25000);
+ m_creature->SummonCreature(MOB_SKITTERING_SWARMER,552.625,706.408,777.177,3.4383,TEMPSUMMON_TIMED_DESPAWN,25000);
+ m_creature->SummonCreature(MOB_SKITTERING_SWARMER,552.625,706.408,777.177,3.4383,TEMPSUMMON_TIMED_DESPAWN,25000);
+
+
}
void UpdateAI(const uint32 diff)
{
if (!UpdateVictim())
return;
+
+
+ if(SummonTimer < diff)
+ {
+ Summon();
+ SummonTimer = 15000;
+ }else SummonTimer -= diff;
+
+ if (MindFlayTimer < diff)
+ {
+ DoCast(m_creature->getVictim(), HeroicMode ? H_SPELL_MIND_FLAY : SPELL_MIND_FLAY);
+
+ MindFlayTimer = 15000;
+ }else MindFlayTimer -= diff;
+
+ if (CurseFatigueTimer < diff)
+ {
+ //WowWiki say "Curse of Fatigue-Kirk'thir will cast Curse of Fatigue on 2-3 targets periodically. "
+ Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0);
+ Unit* target_1 = SelectUnit(SELECT_TARGET_RANDOM, 1);
+
+ DoCast(target, HeroicMode ? H_SPELL_CURSE_OF_FATIGUE : SPELL_CURSE_OF_FATIGUE);
+ DoCast(target_1, HeroicMode ? H_SPELL_CURSE_OF_FATIGUE : SPELL_CURSE_OF_FATIGUE);
+
+ CurseFatigueTimer = 10000;
+ }else CurseFatigueTimer -= diff;
- if ((m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) >= 10)
+ if (!m_creature->HasAura(SPELL_FRENZY) && m_creature->GetHealth()*100 / m_creature->GetMaxHealth() <= 10)
{
- //Frenzy
+ m_creature->CastSpell(m_creature,SPELL_FRENZY,true);
}
DoMeleeAttackIfReady();
@@ -85,18 +159,22 @@ struct TRINITY_DLL_DECL boss_krik_thirAI : public ScriptedAI
void JustDied(Unit* killer)
{
DoScriptText(SAY_DEATH, m_creature);
+
+ if (pInstance)
+ pInstance->SetData(DATA_KRIKTHIR_THE_GATEWATCHER_EVENT, DONE);
}
void KilledUnit(Unit *victim)
{
if (victim == m_creature)
return;
- switch(rand()%3)
- {
- case 0: DoScriptText(SAY_SLAY_1, m_creature);break;
- case 1: DoScriptText(SAY_SLAY_2, m_creature);break;
- case 2: DoScriptText(SAY_SLAY_3, m_creature);break;
- }
+ DoScriptText(RAND(SAY_SLAY_1,SAY_SLAY_2), m_creature);
+ }
+
+ void JustSummoned(Creature* summoned)
+ {
+ summoned->GetMotionMaster()->MovePoint(m_creature->GetEntry(),m_creature->GetPositionX(),m_creature->GetPositionY(),m_creature->GetPositionZ());
+
}
};
@@ -113,5 +191,4 @@ void AddSC_boss_krik_thir()
newscript->Name="boss_krik_thir";
newscript->GetAI = &GetAI_boss_krik_thir;
newscript->RegisterSelf();
-
}
diff --git a/src/bindings/scripts/system/ScriptLoader.cpp b/src/bindings/scripts/system/ScriptLoader.cpp
index fd5abfa09d4..432ad24ce33 100644
--- a/src/bindings/scripts/system/ScriptLoader.cpp
+++ b/src/bindings/scripts/system/ScriptLoader.cpp
@@ -262,6 +262,7 @@ extern void AddSC_winterspring();
//northrend
extern void AddSC_instance_ahnkahet(); //Azjol-Nerub Ahn'kahet
+extern void AddSC_boss_krik_thir();
extern void AddSC_boss_taldaram();
extern void AddSC_boss_elder_nadox();
extern void AddSC_boss_volazj();
@@ -669,6 +670,7 @@ void AddScripts()
//northrend
AddSC_instance_ahnkahet(); //Azjol-Nerub Ahn'kahet
+ AddSC_boss_krik_thir();
AddSC_boss_taldaram();
AddSC_boss_elder_nadox();
AddSC_boss_volazj();