diff options
Diffstat (limited to 'src/server/scripts')
| -rw-r--r-- | src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp | 56 | 
1 files changed, 39 insertions, 17 deletions
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp index 2377c5e908a..6de54d357c5 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp @@ -60,11 +60,7 @@ enum SjonnirCreatures      CREATURE_IRON_SLUDGE                                   = 28165  }; -enum Misc -{ -    DATA_TIME_BEFORE_OOZE                                  = 150000, //2min 30 secs -    ACHIEV_ABUSE_THE_OOZE                                  = 2155 -}; +#define DATA_TIME_BEFORE_OOZE                              150000 //2min 30 secs  struct Locations  { @@ -73,10 +69,13 @@ struct Locations  static Locations PipeLocations[] =  { -  {1295.44f, 734.07f, 200.3f}, //left -  {1297.7f,  595.6f,  199.9f} //right +    {1295.44f, 734.07f, 200.3f}, //left +    {1297.7f,  595.6f,  199.9f} //right  }; +#define ACTION_OOZE_DEAD                                   1 +#define DATA_ABUSE_THE_OOZE                                2 +  static Locations CenterPoint = {1295.21f, 667.157f, 189.691f};  class boss_sjonnir : public CreatureScript @@ -105,7 +104,7 @@ public:          uint32 uiSummonTimer;          uint32 uiFrenzyTimer;          uint32 uiEncounterTimer; -        uint32 uiKilledIronSludges; +        uint8 abuseTheOoze;          SummonList lSummons; @@ -122,7 +121,7 @@ public:              uiLightningRingTimer = 30000 + rand()%5000;              uiSummonTimer = 5000;              uiFrenzyTimer = 300000; //5 minutes -            uiKilledIronSludges = 0; +            abuseTheOoze = 0;              lSummons.DespawnAll(); @@ -221,11 +220,7 @@ public:              lSummons.DespawnAll();              if (pInstance) -            {                  pInstance->SetData(DATA_SJONNIR_EVENT, DONE); -                if (IsHeroic() && uiKilledIronSludges > 4) -                    pInstance->DoCompleteAchievement(ACHIEV_ABUSE_THE_OOZE); -            }          }          void KilledUnit(Unit* victim)          { @@ -234,9 +229,18 @@ public:              DoScriptText(RAND(SAY_SLAY_1, SAY_SLAY_2, SAY_SLAY_3), me);          } -        void KilledIronSludge() +        void DoAction(int32 const action)          { -            ++uiKilledIronSludges; +            if (action == ACTION_OOZE_DEAD) +                ++abuseTheOoze; +        } + +        uint32 GetData(uint32 type) +        { +            if (type == DATA_ABUSE_THE_OOZE) +                return abuseTheOoze; + +            return 0;          }      }; @@ -307,16 +311,34 @@ public:          void JustDied(Unit* /*pKiller*/)          {              if (pInstance) -                if (Creature* pSjonnir = Unit::GetCreature(*me, pInstance->GetData64(DATA_SJONNIR))) -                    CAST_AI(boss_sjonnir::boss_sjonnirAI, pSjonnir->AI())->KilledIronSludge(); +                if (Creature* Sjonnir = ObjectAccessor::GetCreature(*me, pInstance->GetData64(DATA_SJONNIR))) +                    Sjonnir->AI()->DoAction(ACTION_OOZE_DEAD);          }      };  }; +class achievement_abuse_the_ooze : public AchievementCriteriaScript +{ +    public: +        achievement_abuse_the_ooze() : AchievementCriteriaScript("achievement_abuse_the_ooze") +        { +        } + +        bool OnCheck(Player* /*player*/, Unit* target) +        { +            if (Creature* Sjonnir = target->ToCreature()) +                if (Sjonnir->AI()->GetData(DATA_ABUSE_THE_OOZE) >= 5) +                    return true; + +            return false; +        } +}; +  void AddSC_boss_sjonnir()  {      new boss_sjonnir();      new mob_malformed_ooze();      new mob_iron_sludge(); +    new achievement_abuse_the_ooze();  }  | 
