diff options
| -rw-r--r-- | sql/updates/world/2011_06_25_09_world_achievement_criteria_data.sql | 11 | ||||
| -rw-r--r-- | src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp | 106 | 
2 files changed, 85 insertions, 32 deletions
diff --git a/sql/updates/world/2011_06_25_09_world_achievement_criteria_data.sql b/sql/updates/world/2011_06_25_09_world_achievement_criteria_data.sql new file mode 100644 index 00000000000..6a2681b5e71 --- /dev/null +++ b/sql/updates/world/2011_06_25_09_world_achievement_criteria_data.sql @@ -0,0 +1,11 @@ +DELETE FROM `disables` WHERE `entry` IN (7328,7329,7330,7331,7332,7333) AND `sourceType`=4; + +DELETE FROM `achievement_criteria_data` WHERE `criteria_id` IN (7328,7329,7330,7331,7332,7333) AND `type`=11; +INSERT INTO `achievement_criteria_data` (`criteria_id`,`type`,`value1`,`value2`,`ScriptName`) +VALUES +(7328,11,0,0,'achievement_twilight_assist'), +(7329,11,0,0,'achievement_twilight_duo'), +(7330,11,0,0,'achievement_twilight_zone'), +(7331,11,0,0,'achievement_twilight_assist'), +(7332,11,0,0,'achievement_twilight_duo'), +(7333,11,0,0,'achievement_twilight_zone'); diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp index bc844698fdb..aaf2dad111c 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp @@ -122,14 +122,6 @@ enum eEnums      //using these custom points for dragons start and end      POINT_ID_INIT                               = 100,      POINT_ID_LAND                               = 200, - -    //Achievements -    ACHIEV_TWILIGHT_ASSIST                      = 2049, -    H_ACHIEV_TWILIGHT_ASSIST                    = 2052, -    ACHIEV_TWILIGHT_DUO                         = 2050, -    H_ACHIEV_TWILIGHT_DUO                       = 2053, -    ACHIEV_TWILIGHT_ZONE                        = 2051, -    H_ACHIEV_TWILIGHT_ZONE                      = 2054  };  #define DATA_CAN_LOOT   0 @@ -213,6 +205,8 @@ Locations TwilightEggsSarth[] =      {3257.54f, 502.285f , 58.2077f}  }; +#define TWILIGHT_ACHIEVEMENTS     1 +  /*######  ## Boss Sartharion  ######*/ @@ -256,7 +250,7 @@ public:          bool m_bHasCalledShadron;          bool m_bHasCalledVesperon; -        uint32 achievProgress; +        uint8 drakeCount;          void Reset()          { @@ -285,7 +279,7 @@ public:              me->SetHomePosition(3246.57f, 551.263f, 58.6164f, 4.66003f); -            achievProgress = 0; +            drakeCount = 0;              // Drakes respawning system              if (pInstance) @@ -384,20 +378,6 @@ public:                  if (pVesperon && pVesperon->isAlive())                      pVesperon->DisappearAndDie(); -                if (achievProgress == 1) -                    pInstance->DoCompleteAchievement(RAID_MODE(ACHIEV_TWILIGHT_ASSIST, H_ACHIEV_TWILIGHT_ASSIST)); -                else if (achievProgress == 2) -                { -                    pInstance->DoCompleteAchievement(RAID_MODE(ACHIEV_TWILIGHT_ASSIST, H_ACHIEV_TWILIGHT_ASSIST)); -                    pInstance->DoCompleteAchievement(RAID_MODE(ACHIEV_TWILIGHT_DUO, H_ACHIEV_TWILIGHT_DUO)); -                } -                else if (achievProgress == 3) -                { -                    pInstance->DoCompleteAchievement(RAID_MODE(ACHIEV_TWILIGHT_ASSIST, H_ACHIEV_TWILIGHT_ASSIST)); -                    pInstance->DoCompleteAchievement(RAID_MODE(ACHIEV_TWILIGHT_DUO, H_ACHIEV_TWILIGHT_DUO)); -                    pInstance->DoCompleteAchievement(RAID_MODE(ACHIEV_TWILIGHT_ZONE, H_ACHIEV_TWILIGHT_ZONE)); -                } -                  pInstance->SetData(TYPE_SARTHARION_EVENT, DONE);              }          } @@ -419,13 +399,21 @@ public:                  me->AddLootMode(LOOT_MODE_HARD_MODE_1);      // Add 1st Drake loot mode          } +        uint32 GetData(uint32 type) +        { +            if (type == TWILIGHT_ACHIEVEMENTS) +                return drakeCount; + +            return 0; +        } +          void FetchDragons()          { -            if(!pInstance) +            if (!pInstance)                  return;              me->ResetLootMode(); -            achievProgress = 0; +            drakeCount = 0;              Creature* pFetchTene = Unit::GetCreature(*me, pInstance->GetData64(DATA_TENEBRON));              Creature* pFetchShad = Unit::GetCreature(*me, pInstance->GetData64(DATA_SHADRON)); @@ -437,10 +425,10 @@ public:              if (pFetchTene && pFetchTene->isAlive() && !pFetchTene->getVictim())              {                  bCanUseWill = true; -                if(!pFetchTene->isInCombat()) +                if (!pFetchTene->isInCombat())                  {                      AddDrakeLootMode(); -                    achievProgress++; +                    ++drakeCount;                  }                  pFetchTene->GetMotionMaster()->MovePoint(POINT_ID_INIT, m_aTene[0].m_fX, m_aTene[0].m_fY, m_aTene[0].m_fZ); @@ -451,10 +439,10 @@ public:              if (pFetchShad && pFetchShad->isAlive() && !pFetchShad->getVictim())              {                  bCanUseWill = true; -                if(!pFetchShad->isInCombat()) +                if (!pFetchShad->isInCombat())                  {                      AddDrakeLootMode(); -                    achievProgress++; +                    ++drakeCount;                  }                  pFetchShad->GetMotionMaster()->MovePoint(POINT_ID_INIT, m_aShad[0].m_fX, m_aShad[0].m_fY, m_aShad[0].m_fZ); @@ -465,10 +453,10 @@ public:              if (pFetchVesp && pFetchVesp->isAlive() && !pFetchVesp->getVictim())              {                  bCanUseWill = true; -                if(!pFetchVesp->isInCombat()) +                if (!pFetchVesp->isInCombat())                  {                      AddDrakeLootMode(); -                    achievProgress++; +                    ++drakeCount;                  }                  pFetchVesp->GetMotionMaster()->MovePoint(POINT_ID_INIT, m_aVesp[0].m_fX, m_aVesp[0].m_fY, m_aVesp[0].m_fZ); @@ -1710,6 +1698,57 @@ public:  }; +class achievement_twilight_assist : public AchievementCriteriaScript +{ +    public: +        achievement_twilight_assist() : AchievementCriteriaScript("achievement_twilight_assist") +        { +        } + +        bool OnCheck(Player* player, Unit* target) +        { +            if (Creature* Sartharion = target->ToCreature()) +                if (Sartharion->AI()->GetData(TWILIGHT_ACHIEVEMENTS) >= 1) +                    return true; + +            return false; +        } +}; + +class achievement_twilight_duo : public AchievementCriteriaScript +{ +    public: +        achievement_twilight_duo() : AchievementCriteriaScript("achievement_twilight_duo") +        { +        } + +        bool OnCheck(Player* player, Unit* target) +        { +            if (Creature* Sartharion = target->ToCreature()) +                if (Sartharion->AI()->GetData(TWILIGHT_ACHIEVEMENTS) >= 2) +                    return true; + +            return false; +        } +}; + +class achievement_twilight_zone : public AchievementCriteriaScript +{ +    public: +        achievement_twilight_zone() : AchievementCriteriaScript("achievement_twilight_zone") +        { +        } + +        bool OnCheck(Player* player, Unit* target) +        { +            if (Creature* Sartharion = target->ToCreature()) +                if (Sartharion->AI()->GetData(TWILIGHT_ACHIEVEMENTS) == 3) +                    return true; + +            return false; +        } +}; +  void AddSC_boss_sartharion()  {      new boss_sartharion(); @@ -1722,4 +1761,7 @@ void AddSC_boss_sartharion()      new npc_flame_tsunami();      new npc_twilight_fissure();      new mob_twilight_whelp(); +    new achievement_twilight_assist(); +    new achievement_twilight_duo(); +    new achievement_twilight_zone();  }  | 
