aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bindings/scripts/scripts/npc/npc_escortAI.cpp6
-rw-r--r--src/bindings/scripts/scripts/zone/azuremyst_isle/azuremyst_isle.cpp2
-rw-r--r--src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjalAI.cpp3
-rw-r--r--src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/instance_steam_vault.cpp38
-rw-r--r--src/bindings/scripts/scripts/zone/karazhan/boss_moroes.cpp5
-rw-r--r--src/bindings/scripts/scripts/zone/karazhan/boss_nightbane.cpp11
-rw-r--r--src/bindings/scripts/scripts/zone/naxxramas/boss_sapphiron.cpp69
-rw-r--r--src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_astromancer.cpp148
-rw-r--r--src/bindings/scripts/scripts/zone/zulaman/boss_janalai.cpp10
-rw-r--r--src/game/SpellAuras.cpp6
-rw-r--r--src/game/SpellEffects.cpp37
11 files changed, 189 insertions, 146 deletions
diff --git a/src/bindings/scripts/scripts/npc/npc_escortAI.cpp b/src/bindings/scripts/scripts/npc/npc_escortAI.cpp
index 16064bdd295..fefe9278322 100644
--- a/src/bindings/scripts/scripts/npc/npc_escortAI.cpp
+++ b/src/bindings/scripts/scripts/npc/npc_escortAI.cpp
@@ -73,8 +73,7 @@ void npc_escortAI::JustRespawned()
IsBeingEscorted = false;
IsOnHold = false;
- //Re-Enable gossip
- m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ //Re-Enable questgiver flag
m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
Reset();
@@ -298,7 +297,6 @@ void npc_escortAI::Start(bool bAttack, bool bDefend, bool bRun, uint64 pGUID)
Returning = false;
IsOnHold = false;
- //Disable gossip
- m_creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ //Disable questgiver flag
m_creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
}
diff --git a/src/bindings/scripts/scripts/zone/azuremyst_isle/azuremyst_isle.cpp b/src/bindings/scripts/scripts/zone/azuremyst_isle/azuremyst_isle.cpp
index 90bbaac9705..87fcfaf0130 100644
--- a/src/bindings/scripts/scripts/zone/azuremyst_isle/azuremyst_isle.cpp
+++ b/src/bindings/scripts/scripts/zone/azuremyst_isle/azuremyst_isle.cpp
@@ -483,7 +483,7 @@ bool GossipSelect_npc_susurrus(Player *player, Creature *_Creature, uint32 sende
#define MOB_SPARK 17243
#define GO_NAGA_FLAG 181694
-static float SparkPos[4] = {-5030.95, -11291.99, 7.97};
+static float SparkPos[3] = {-5030.95, -11291.99, 7.97};
struct TRINITY_DLL_DECL npc_geezleAI : public ScriptedAI
{
diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjalAI.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjalAI.cpp
index 6e1e028cc70..356baf01a60 100644
--- a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjalAI.cpp
+++ b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjalAI.cpp
@@ -158,7 +158,7 @@ void hyjalAI::SummonCreature(uint32 entry, float Base[4][3])
AttackLoc[i] = AttackArea[Faction][i];
}
- Creature* pCreature = m_creature->SummonCreature(entry, SpawnLoc[0], SpawnLoc[1], SpawnLoc[2], 0, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 120000);
+ Creature* pCreature = m_creature->SummonCreature(entry, SpawnLoc[0], SpawnLoc[1], SpawnLoc[2], 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 120000);
if(pCreature)
{
// Increment Enemy Count to be used in World States and instance script
@@ -167,6 +167,7 @@ void hyjalAI::SummonCreature(uint32 entry, float Base[4][3])
pCreature->RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
pCreature->GetMotionMaster()->MovePoint(0, AttackLoc[0],AttackLoc[1],AttackLoc[2]);
pCreature->AddThreat(m_creature, 0.0f);
+ pCreature->setActive(true);
DoZoneInCombat(pCreature);
// Check if creature is a boss.
diff --git a/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/instance_steam_vault.cpp b/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/instance_steam_vault.cpp
index a0063a4eef9..8771cf2abdd 100644
--- a/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/instance_steam_vault.cpp
+++ b/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/instance_steam_vault.cpp
@@ -43,10 +43,10 @@ bool GOHello_go_main_chambers_access_panel(Player *player, GameObject* _GO)
if (!pInstance)
return false;
- if (_GO->GetEntry() == ACCESS_PANEL_HYDRO && pInstance->GetData(TYPE_HYDROMANCER_THESPIA) == DONE)
+ if (_GO->GetEntry() == ACCESS_PANEL_HYDRO && (pInstance->GetData(TYPE_HYDROMANCER_THESPIA) == DONE || pInstance->GetData(TYPE_HYDROMANCER_THESPIA) == SPECIAL))
pInstance->SetData(TYPE_HYDROMANCER_THESPIA,SPECIAL);
- if (_GO->GetEntry() == ACCESS_PANEL_MEK && pInstance->GetData(TYPE_MEKGINEER_STEAMRIGGER) == DONE)
+ if (_GO->GetEntry() == ACCESS_PANEL_MEK && (pInstance->GetData(TYPE_MEKGINEER_STEAMRIGGER) == DONE || pInstance->GetData(TYPE_MEKGINEER_STEAMRIGGER) == SPECIAL))
pInstance->SetData(TYPE_MEKGINEER_STEAMRIGGER,SPECIAL);
return true;
@@ -174,6 +174,9 @@ struct TRINITY_DLL_DECL instance_steam_vault : public ScriptedInstance
Encounter[3] = data;
break;
}
+
+ if(data == DONE || data == SPECIAL)
+ SaveToDB();
}
uint32 GetData(uint32 type)
@@ -205,6 +208,37 @@ struct TRINITY_DLL_DECL instance_steam_vault : public ScriptedInstance
}
return 0;
}
+
+ const char* Save()
+ {
+ OUT_SAVE_INST_DATA;
+ std::ostringstream stream;
+ stream << Encounter[0] << " " << Encounter[1] << " " << Encounter[2] << " " << Encounter[3];
+ char* out = new char[stream.str().length() + 1];
+ strcpy(out, stream.str().c_str());
+ if(out)
+ {
+ OUT_SAVE_INST_DATA_COMPLETE;
+ return out;
+ }
+ return NULL;
+ }
+
+ void Load(const char* in)
+ {
+ if(!in)
+ {
+ OUT_LOAD_INST_DATA_FAIL;
+ return;
+ }
+ OUT_LOAD_INST_DATA(in);
+ std::istringstream stream(in);
+ stream >> Encounter[0] >> Encounter[1] >> Encounter[2] >> Encounter[3];
+ for(uint8 i = 0; i < ENCOUNTERS; ++i)
+ if(Encounter[i] == IN_PROGRESS)
+ Encounter[i] = NOT_STARTED;
+ OUT_LOAD_INST_DATA_COMPLETE;
+ }
};
InstanceData* GetInstanceData_instance_steam_vault(Map* map)
diff --git a/src/bindings/scripts/scripts/zone/karazhan/boss_moroes.cpp b/src/bindings/scripts/scripts/zone/karazhan/boss_moroes.cpp
index 5055d7ca0ed..170d6dfa3a8 100644
--- a/src/bindings/scripts/scripts/zone/karazhan/boss_moroes.cpp
+++ b/src/bindings/scripts/scripts/zone/karazhan/boss_moroes.cpp
@@ -118,6 +118,7 @@ struct TRINITY_DLL_DECL boss_moroesAI : public ScriptedAI
DoScriptText(SAY_AGGRO, m_creature);
AddsAttack();
+ DoZoneInCombat();
}
void KilledUnit(Unit* victim)
@@ -251,8 +252,10 @@ struct TRINITY_DLL_DECL boss_moroesAI : public ScriptedAI
{
Temp = Unit::GetUnit((*m_creature),AddGUID[i]);
if (Temp && Temp->isAlive())
+ {
((Creature*)Temp)->AI()->AttackStart(m_creature->getVictim());
- else
+ DoZoneInCombat(Temp);
+ }else
EnterEvadeMode();
}
}
diff --git a/src/bindings/scripts/scripts/zone/karazhan/boss_nightbane.cpp b/src/bindings/scripts/scripts/zone/karazhan/boss_nightbane.cpp
index cc0645ce47d..f595cebff5e 100644
--- a/src/bindings/scripts/scripts/zone/karazhan/boss_nightbane.cpp
+++ b/src/bindings/scripts/scripts/zone/karazhan/boss_nightbane.cpp
@@ -17,7 +17,7 @@
/* ScriptData
SDName: Boss_Nightbane
SD%Complete: 80
-SDComment: SDComment: skelleton adds need 2 more, timers,
+SDComment: SDComment: Timers may incorrect
SDCategory: Karazhan
EndScriptData */
@@ -353,10 +353,11 @@ struct TRINITY_DLL_DECL boss_nightbaneAI : public ScriptedAI
{
if (!Skeletons)
{
- DoCast(m_creature->getVictim(), SPELL_SUMMON_SKELETON);
- DoCast(m_creature->getVictim(), SPELL_SUMMON_SKELETON);
- DoCast(m_creature->getVictim(), SPELL_SUMMON_SKELETON);
- Skeletons = true;
+ for (uint8 i = 0; i <= 3; ++i)
+ {
+ DoCast(m_creature->getVictim(), SPELL_SUMMON_SKELETON);
+ Skeletons = true;
+ }
}
if (RainofBonesTimer < diff && !RainBones) // only once at the beginning of phase 2
diff --git a/src/bindings/scripts/scripts/zone/naxxramas/boss_sapphiron.cpp b/src/bindings/scripts/scripts/zone/naxxramas/boss_sapphiron.cpp
index 8529ba85a77..db30c4c7593 100644
--- a/src/bindings/scripts/scripts/zone/naxxramas/boss_sapphiron.cpp
+++ b/src/bindings/scripts/scripts/zone/naxxramas/boss_sapphiron.cpp
@@ -50,7 +50,7 @@ struct TRINITY_DLL_DECL boss_sapphironAI : public ScriptedAI
uint32 Fly2_Timer;
uint32 Beserk_Timer;
uint32 phase;
- bool landoff;
+ bool IsInFly;
uint32 land_Timer;
void Reset()
@@ -60,13 +60,13 @@ struct TRINITY_DLL_DECL boss_sapphironAI : public ScriptedAI
Blizzard_Timer = 20000;
Fly_Timer = 45000;
Icebolt_Timer = 4000;
- land_Timer = 2000;
+ land_Timer = 0;
Beserk_Timer = 0;
phase = 1;
Icebolt_Count = 0;
- landoff = false;
+ IsInFly = false;
- //m_creature->ApplySpellMod(SPELL_FROST_AURA, SPELLMOD_DURATION, -1);
+ m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING + MOVEMENTFLAG_ONTRANSPORT);
}
void Aggro(Unit *who)
@@ -105,16 +105,14 @@ struct TRINITY_DLL_DECL boss_sapphironAI : public ScriptedAI
if(Fly_Timer < diff)
{
phase = 2;
- m_creature->InterruptNonMeleeSpells(false);
m_creature->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF);
- (*m_creature).GetMotionMaster()->Clear(false);
- (*m_creature).GetMotionMaster()->MoveIdle();
- DoCast(m_creature,11010);
+ m_creature->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING + MOVEMENTFLAG_ONTRANSPORT);
+ m_creature->GetMotionMaster()->Clear(false);
+ m_creature->GetMotionMaster()->MoveIdle();
m_creature->SetHover(true);
- DoCast(m_creature,18430);
Icebolt_Timer = 4000;
Icebolt_Count = 0;
- landoff = false;
+ IsInFly = true;
}else Fly_Timer -= diff;
}
}
@@ -124,36 +122,35 @@ struct TRINITY_DLL_DECL boss_sapphironAI : public ScriptedAI
if(Icebolt_Timer < diff && Icebolt_Count < 5)
{
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0))
+ {
DoCast(target,SPELL_ICEBOLT);
- Icebolt_Count ++;
+ ++Icebolt_Count;
+ error_log("Count incremented");
+ }
+ FrostBreath_Timer = 6000;
Icebolt_Timer = 4000;
}else Icebolt_Timer -= diff;
- if(Icebolt_Count == 5 && !landoff)
- {
- if(FrostBreath_Timer < diff )
- {
- DoScriptText(EMOTE_BREATH, m_creature);
- DoCast(m_creature->getVictim(),SPELL_FROST_BREATH);
- land_Timer = 2000;
- landoff = true;
- FrostBreath_Timer = 6000;
- }else FrostBreath_Timer -= diff;
- }
-
- if(landoff)
- {
- if(land_Timer < diff)
- {
- phase = 1;
- m_creature->HandleEmoteCommand(EMOTE_ONESHOT_LAND);
- m_creature->SetHover(false);
- (*m_creature).GetMotionMaster()->Clear(false);
- (*m_creature).GetMotionMaster()->MoveChase(m_creature->getVictim());
- Fly_Timer = 67000;
- }else land_Timer -= diff;
- }
-
+ if(Icebolt_Count == 5 && IsInFly && FrostBreath_Timer < diff )
+ {
+ DoScriptText(EMOTE_BREATH, m_creature);
+ DoCast(m_creature->getVictim(),SPELL_FROST_BREATH);
+ land_Timer = 2000;
+ IsInFly = false;
+ FrostBreath_Timer = 6000;
+ }else FrostBreath_Timer -= diff;
+
+ if(!IsInFly && land_Timer < diff)
+ {
+ phase = 1;
+ m_creature->HandleEmoteCommand(EMOTE_ONESHOT_LAND);
+ m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING + MOVEMENTFLAG_ONTRANSPORT);
+ m_creature->GetMotionMaster()->Clear(false);
+ m_creature->GetMotionMaster()->MoveChase(m_creature->getVictim());
+ m_creature->SetHover(true);
+ land_Timer = 0;
+ Fly_Timer = 67000;
+ }else land_Timer -= diff;
}
if ((m_creature->GetHealth()*100) / m_creature->GetMaxHealth() <= 10)
diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_astromancer.cpp b/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_astromancer.cpp
index ea5e8ca9f58..496a4bd705c 100644
--- a/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_astromancer.cpp
+++ b/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_astromancer.cpp
@@ -40,7 +40,8 @@ EndScriptData */
#define SPELL_BLINDING_LIGHT 33009
#define SPELL_FEAR 29321
#define SPELL_VOID_BOLT 39329
-
+#define SPELL_SPOTLIGHT 25824
+
#define CENTER_X 432.909f
#define CENTER_Y -373.424f
#define CENTER_Z 17.9608f
@@ -52,7 +53,7 @@ EndScriptData */
#define SOLARIUM_AGENT 18925
#define SOLARIUM_PRIEST 18806
#define ASTROMANCER_SOLARIAN_SPOTLIGHT 18928
-#define SPELL_SPOTLIGHT 25824
+
#define MODEL_HUMAN 18239
#define MODEL_VOIDWALKER 18988
@@ -63,18 +64,24 @@ EndScriptData */
#define WV_ARMOR 31000
#define MIN_RANGE_FOR_DOT_JUMP 20.0f
+ // x, y, z, o
+static float SolarianPos[4] = {432.909, -373.424, 17.9608, 1.06421};
+
struct TRINITY_DLL_DECL boss_high_astromancer_solarianAI : public ScriptedAI
{
- boss_high_astromancer_solarianAI(Creature *c) : ScriptedAI(c)
+ boss_high_astromancer_solarianAI(Creature *c) : ScriptedAI(c), Summons(m_creature)
{
pInstance = ((ScriptedInstance*)c->GetInstanceData());
- defaultarmor=m_creature->GetArmor();
- defaultsize=m_creature->GetFloatValue(OBJECT_FIELD_SCALE_X);
+ defaultarmor = m_creature->GetArmor();
+ defaultsize = m_creature->GetFloatValue(OBJECT_FIELD_SCALE_X);
Reset();
}
ScriptedInstance *pInstance;
+ SummonList Summons;
+
+ uint8 Phase;
uint32 ArcaneMissiles_Timer;
uint32 MarkOfTheAstromancer_Timer;
@@ -90,18 +97,13 @@ struct TRINITY_DLL_DECL boss_high_astromancer_solarianAI : public ScriptedAI
uint32 defaultarmor;
float defaultsize;
+ float Portals[3][3];
bool AppearDelay;
-
- uint8 Phase;
-
- uint64 WrathTarget;
-
- float Portals[3][3];
+ bool BlindingLight;
void Reset()
{
- WrathTarget=0;
ArcaneMissiles_Timer = 2000;
MarkOfTheAstromancer_Timer = 15000;
BlindingLight_Timer = 41000;
@@ -111,6 +113,7 @@ struct TRINITY_DLL_DECL boss_high_astromancer_solarianAI : public ScriptedAI
Phase2_Timer = 10000;
Phase3_Timer = 15000;
AppearDelay_Timer = 2000;
+ BlindingLight = false;
AppearDelay = false;
MarkOfTheSolarian_Timer=45000;
Jump_Timer=8000;
@@ -124,12 +127,14 @@ struct TRINITY_DLL_DECL boss_high_astromancer_solarianAI : public ScriptedAI
m_creature->SetVisibility(VISIBILITY_ON);
m_creature->SetFloatValue(OBJECT_FIELD_SCALE_X, defaultsize);
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_HUMAN);
+
+ Summons.DespawnAll();
}
void StartEvent()
{
DoScriptText(SAY_AGGRO, m_creature);
-
+
if(pInstance)
pInstance->SetData(DATA_HIGHASTROMANCERSOLARIANEVENT, IN_PROGRESS);
}
@@ -166,6 +171,8 @@ struct TRINITY_DLL_DECL boss_high_astromancer_solarianAI : public ScriptedAI
{
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0))
Summoned->AI()->AttackStart(target);
+
+ Summons.Summon(Summoned);
}
}
@@ -206,90 +213,49 @@ struct TRINITY_DLL_DECL boss_high_astromancer_solarianAI : public ScriptedAI
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
m_creature->SetVisibility(VISIBILITY_OFF);
}
-
AppearDelay_Timer = 2000;
}else AppearDelay_Timer -= diff;
- }
-
- //the jumping of the dot part of the wrath of the astromancer
- if(WrathTarget)
- {
- if(Jump_Timer< diff)
- {
- std::list<HostilReference*>& m_threatlist = m_creature->getThreatManager().getThreatList();
- bool hasJumped = false;
-
- Unit* target = Unit::GetUnit((*m_creature),WrathTarget);
- if(target && target->isAlive())
- {
- for(std::list<HostilReference*>::iterator iter = m_threatlist.begin();iter!=m_threatlist.end();++iter)
- {
- Unit* currentUnit=Unit::GetUnit((*m_creature),(*iter)->getUnitGuid());
- if(currentUnit)
- {
- if(currentUnit->IsWithinDistInMap(target,MIN_RANGE_FOR_DOT_JUMP)&&currentUnit->isAlive()&&currentUnit!=target)
- {
- m_creature->CastSpell(currentUnit,SPELL_MARK_OF_THE_ASTROMANCER, false,0,0,m_creature->GetGUID());
-
- Jump_Timer=8000;
- WrathTarget=currentUnit->GetGUID();
- hasJumped = true;
- break;
- }
- }
- }
- }
-
- if(!hasJumped)
- WrathTarget = 0;
- }else Jump_Timer -= diff;
- }
+ }
if (Phase == 1)
{
- //ArcaneMissiles_Timer
- if (ArcaneMissiles_Timer < diff)
- {
- //Solarian casts Arcane Missiles on on random targets in the raid.
- Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0);
- if (!m_creature->HasInArc(2.5f, target))
- target = m_creature->getVictim();
- if (target)
- DoCast(target, SPELL_ARCANE_MISSILES);
-
- ArcaneMissiles_Timer = 3000;
- }else ArcaneMissiles_Timer -= diff;
-
- //MarkOfTheSolarian_Timer
- if (MarkOfTheSolarian_Timer < diff)
- {
- DoCast(m_creature->getVictim(), MARK_OF_SOLARIAN);
- MarkOfTheSolarian_Timer = 45000;
- }else MarkOfTheSolarian_Timer -= diff;
-
- //MarkOfTheAstromancer_Timer
- if (MarkOfTheAstromancer_Timer < diff)
- {
- //A debuff that lasts for 5 seconds, cast several times each phase on a random raid member, but not the main tank
- if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 1))
- {
- DoCast(target, SPELL_MARK_OF_THE_ASTROMANCER);
-
- WrathTarget=target->GetGUID();
- Jump_Timer=8000;
- }
+ if (BlindingLight_Timer < diff){
+ BlindingLight = true;
+ BlindingLight_Timer = 45000;
+ }else BlindingLight_Timer -= diff;
- MarkOfTheAstromancer_Timer = 15000;
- }else MarkOfTheAstromancer_Timer -= diff;
+ if (ArcaneMissiles_Timer < diff)
+ {
+ if(BlindingLight)
+ {
+ DoCast(m_creature->getVictim(), SPELL_BLINDING_LIGHT);
+ BlindingLight = false;
+ }else{
+ Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0);
- //BlindingLight_Timer
- if (BlindingLight_Timer < diff)
- {
- //She casts this spell every 45 seconds. It is a kind of Moonfire spell, which she strikes down on the whole raid simultaneously. It hits everyone in the raid for 2280 to 2520 arcane damage.
- DoCast(m_creature->getVictim(), SPELL_BLINDING_LIGHT);
+ if(!m_creature->HasInArc(2.5f, target))
+ target = m_creature->getVictim();
- BlindingLight_Timer = 45000;
- }else BlindingLight_Timer -= diff;
+ if(target)
+ DoCast(target, SPELL_ARCANE_MISSILES);
+ }
+ ArcaneMissiles_Timer = 3000;
+ }else ArcaneMissiles_Timer -= diff;
+
+ if (MarkOfTheSolarian_Timer < diff)
+ {
+ DoCast(m_creature->getVictim(), MARK_OF_SOLARIAN);
+ MarkOfTheSolarian_Timer = 45000;
+ }else MarkOfTheSolarian_Timer -= diff;
+
+ if (MarkOfTheAstromancer_Timer < diff) //A debuff that lasts for 5 seconds, cast several times each phase on a random raid member, but not the main tank
+ {
+ Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 1, 100, true);
+ if(target)
+ DoCast(target, SPELL_MARK_OF_THE_ASTROMANCER);
+ else DoCast(m_creature->getVictim(), SPELL_MARK_OF_THE_ASTROMANCER);
+ MarkOfTheAstromancer_Timer = 15000;
+ }else MarkOfTheAstromancer_Timer -= diff;
//Phase1_Timer
if (Phase1_Timer < diff)
@@ -298,8 +264,8 @@ struct TRINITY_DLL_DECL boss_high_astromancer_solarianAI : public ScriptedAI
Phase1_Timer = 50000;
//After these 50 seconds she portals to the middle of the room and disappears, leaving 3 light portals behind.
m_creature->GetMotionMaster()->Clear();
- m_creature->Relocate(CENTER_X, CENTER_Y, CENTER_Z, CENTER_O);
- for(int i=0; i<=2; i++)
+ m_creature->Relocate(SolarianPos[0], SolarianPos[1], SolarianPos[2], SolarianPos[3]);
+ for(int i=0; i<=2; ++i)
{
if (!i)
{
diff --git a/src/bindings/scripts/scripts/zone/zulaman/boss_janalai.cpp b/src/bindings/scripts/scripts/zone/zulaman/boss_janalai.cpp
index b6792278127..9ae5cd74210 100644
--- a/src/bindings/scripts/scripts/zone/zulaman/boss_janalai.cpp
+++ b/src/bindings/scripts/scripts/zone/zulaman/boss_janalai.cpp
@@ -451,9 +451,9 @@ CreatureAI* GetAI_boss_janalaiAI(Creature *_Creature)
return new boss_janalaiAI(_Creature);
}
-struct TRINITY_DLL_DECL mob_jandalai_firebombAI : public ScriptedAI
+struct TRINITY_DLL_DECL mob_janalai_firebombAI : public ScriptedAI
{
- mob_jandalai_firebombAI(Creature *c) : ScriptedAI(c){Reset();}
+ mob_janalai_firebombAI(Creature *c) : ScriptedAI(c){Reset();}
void Reset() {}
@@ -472,9 +472,9 @@ struct TRINITY_DLL_DECL mob_jandalai_firebombAI : public ScriptedAI
void UpdateAI(const uint32 diff) {}
};
-CreatureAI* GetAI_mob_jandalai_firebombAI(Creature *_Creature)
+CreatureAI* GetAI_mob_janalai_firebombAI(Creature *_Creature)
{
- return new mob_jandalai_firebombAI(_Creature);
+ return new mob_janalai_firebombAI(_Creature);
}
struct TRINITY_DLL_DECL mob_amanishi_hatcherAI : public ScriptedAI
@@ -694,7 +694,7 @@ void AddSC_boss_janalai()
newscript = new Script;
newscript->Name="mob_janalai_firebomb";
- newscript->GetAI = &GetAI_mob_jandalai_firebombAI;
+ newscript->GetAI = &GetAI_mob_janalai_firebombAI;
newscript->RegisterSelf();
newscript = new Script;
diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp
index 0896ba99a59..bc5af583625 100644
--- a/src/game/SpellAuras.cpp
+++ b/src/game/SpellAuras.cpp
@@ -3878,6 +3878,12 @@ void Aura::HandlePeriodicTriggerSpell(bool apply, bool Real)
void Aura::HandlePeriodicTriggerSpellWithValue(bool apply, bool Real)
{
m_isPeriodic = apply;
+
+ // Wrath of the Astromancer
+ if(!apply && m_spellProto->Id == 42783)
+ {
+ m_target->CastSpell(m_target, 42787, true, 0, this);
+ }
}
void Aura::HandlePeriodicEnergize(bool apply, bool Real)
diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp
index 545d03ee76e..e0a6dbe351d 100644
--- a/src/game/SpellEffects.cpp
+++ b/src/game/SpellEffects.cpp
@@ -682,6 +682,28 @@ void Spell::EffectDummy(uint32 i)
{
switch(m_spellInfo->Id )
{
+ // Wrath of the Astromancer
+ case 42784:
+ {
+ uint32 count = 0;
+ for(std::list<TargetInfo>::iterator ihit= m_UniqueTargetInfo.begin();ihit != m_UniqueTargetInfo.end();++ihit)
+ if(ihit->effectMask & (1<<i))
+ ++count;
+
+ damage = 12000; // maybe wrong value
+ damage /= count;
+
+ SpellEntry const *spellInfo = sSpellStore.LookupEntry(42784);
+
+ // now deal the damage
+ for(std::list<TargetInfo>::iterator ihit= m_UniqueTargetInfo.begin();ihit != m_UniqueTargetInfo.end();++ihit)
+ if(ihit->effectMask & (1<<i))
+ {
+ Unit* casttarget = Unit::GetUnit((*unitTarget), ihit->targetGUID);
+ if(casttarget)
+ m_caster->DealDamage(casttarget, damage, NULL, SPELL_DIRECT_DAMAGE, SPELL_SCHOOL_MASK_ARCANE, spellInfo, false);
+ }
+ }
// Encapsulate Voidwalker
case 29364:
{
@@ -5005,6 +5027,21 @@ void Spell::EffectScriptEffect(uint32 effIndex)
unitTarget->CastSpell(m_caster, 40903, true);
break;
}
+ case 48025: // Headless Horseman's Mount
+ {
+ if(!unitTarget)
+ return;
+
+ switch(((Player*)unitTarget)->GetBaseSkillValue(762))
+ {
+ case 75: unitTarget->CastSpell(unitTarget, 51621, true); break;;
+ case 150: unitTarget->CastSpell(unitTarget, 48024, true); break;
+ case 225: unitTarget->CastSpell(unitTarget, 51617, true); break;
+ case 300: unitTarget->CastSpell(unitTarget, 48023, true); break;
+ default: break;
+ }
+ break;
+ }
case 41931:
{
if(m_caster->GetTypeId() != TYPEID_PLAYER)