diff options
| author | Blaymoira <none@none> | 2009-02-11 16:33:07 +0100 | 
|---|---|---|
| committer | Blaymoira <none@none> | 2009-02-11 16:33:07 +0100 | 
| commit | f5fa3b71cf398d321304c0712456e31ef880cb6b (patch) | |
| tree | 575df4e2679e4d9a5f16e071ec10a4b9f0e6aa30 | |
| parent | 37be2f36846df38099764c41d4ca17edd2b48fe9 (diff) | |
*Some changes in Solarian - by Bagsac
--HG--
branch : trunk
| -rw-r--r-- | src/bindings/scripts/scripts/zone/azuremyst_isle/azuremyst_isle.cpp | 2 | ||||
| -rw-r--r-- | src/bindings/scripts/scripts/zone/karazhan/boss_nightbane.cpp | 11 | ||||
| -rw-r--r-- | src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_astromancer.cpp | 148 | ||||
| -rw-r--r-- | src/game/SpellAuras.cpp | 6 | ||||
| -rw-r--r-- | src/game/SpellEffects.cpp | 22 | 
5 files changed, 92 insertions, 97 deletions
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 d1acc9373c4..4c7675ad02d 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/karazhan/boss_nightbane.cpp b/src/bindings/scripts/scripts/zone/karazhan/boss_nightbane.cpp index 1a3c6684bbd..2cce937dd1b 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/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/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index c77e84b85f5..011c4dff324 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -3697,6 +3697,12 @@ void Aura::HandlePeriodicTriggerSpell(bool apply, bool Real)          // Cast Wrath of the Plaguebringer if not dispelled          m_target->CastSpell(m_target, 29214, true, 0, this);      } + +    // 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 07e5d4afef9..681077939df 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -627,6 +627,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:                  {  | 
