diff options
Diffstat (limited to 'src')
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)&¤tUnit->isAlive()&¤tUnit!=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) |