diff options
author | Lopin <davca.hr@seznam.cz> | 2011-06-27 18:42:38 +0200 |
---|---|---|
committer | Lopin <davca.hr@seznam.cz> | 2011-06-27 18:42:38 +0200 |
commit | 1c04403866a17c9a8a2da05d8f8d88573ffc1b0f (patch) | |
tree | 5a93c50a78b18e596f3fe4979e5318b928aa2333 /src | |
parent | 3214bf3bac6607760be1410725c212052b3139b9 (diff) |
Scripts/Ulduar:
* Move Knock achievements back to Freya's script
* Better improvement to Con-Speed-Atory achievement
* Remove Rare Cache of Winter when encounter time is bigger then 3 minutes
Diffstat (limited to 'src')
3 files changed, 110 insertions, 69 deletions
diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/boss_freya.cpp b/src/server/scripts/Northrend/Ulduar/ulduar/boss_freya.cpp index 6c5eb452e29..788e6eb846d 100644 --- a/src/server/scripts/Northrend/Ulduar/ulduar/boss_freya.cpp +++ b/src/server/scripts/Northrend/Ulduar/ulduar/boss_freya.cpp @@ -221,6 +221,7 @@ enum FreyaEvents #define WAVE_TIME 60000 // Normal wave is one minute #define TIME_DIFFERENCE 10000 // If difference between waveTime and WAVE_TIME is bigger then TIME_DIFFERENCE, schedule EVENT_WAVE in 10 seconds #define DATA_GETTING_BACK_TO_NATURE 1 +#define DATA_KNOCK_ON_WOOD 2 class npc_iron_roots : public CreatureScript { @@ -380,8 +381,6 @@ class boss_freya : public CreatureScript } } - instance->SetData(DATA_KNOCK_ON_WOOD_ACHIEVEMENTS, elderCount); - if (Elder[0]->isAlive()) { Elder[0]->CastSpell(me, SPELL_BRIGHTLEAF_ESSENCE, true); @@ -417,6 +416,8 @@ class boss_freya : public CreatureScript { case DATA_GETTING_BACK_TO_NATURE: return attunedToNature; + case DATA_KNOCK_ON_WOOD: + return elderCount; } return 0; @@ -1629,6 +1630,66 @@ class achievement_getting_back_to_nature : public AchievementCriteriaScript } }; +class achievement_knock_on_wood : public AchievementCriteriaScript +{ + public: + achievement_knock_on_wood() : AchievementCriteriaScript("achievement_knock_on_wood") + { + } + + bool OnCheck(Player* /*player*/, Unit* target) + { + if (!target) + return false; + + if (Creature* Freya = target->ToCreature()) + if (Freya->AI()->GetData(DATA_KNOCK_ON_WOOD) >= 1) + return true; + + return false; + } +}; + +class achievement_knock_knock_on_wood : public AchievementCriteriaScript +{ + public: + achievement_knock_knock_on_wood() : AchievementCriteriaScript("achievement_knock_knock_on_wood") + { + } + + bool OnCheck(Player* /*player*/, Unit* target) + { + if (!target) + return false; + + if (Creature* Freya = target->ToCreature()) + if (Freya->AI()->GetData(DATA_KNOCK_ON_WOOD) >= 2) + return true; + + return false; + } +}; + +class achievement_knock_knock_knock_on_wood : public AchievementCriteriaScript +{ + public: + achievement_knock_knock_knock_on_wood() : AchievementCriteriaScript("achievement_knock_knock_knock_on_wood") + { + } + + bool OnCheck(Player* /*player*/, Unit* target) + { + if (!target) + return false; + + if (Creature* Freya = target->ToCreature()) + if (Freya->AI()->GetData(DATA_KNOCK_ON_WOOD) == 3) + return true; + + return false; + } +}; + void AddSC_boss_freya() { new boss_freya(); @@ -1649,4 +1710,7 @@ void AddSC_boss_freya() new spell_freya_attuned_to_nature_dose_reduction(); new spell_freya_iron_roots(); new achievement_getting_back_to_nature(); + new achievement_knock_on_wood(); + new achievement_knock_knock_on_wood(); + new achievement_knock_knock_knock_on_wood(); } diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/instance_ulduar.cpp b/src/server/scripts/Northrend/Ulduar/ulduar/instance_ulduar.cpp index 3c96a613cc8..f649ccef222 100644 --- a/src/server/scripts/Northrend/Ulduar/ulduar/instance_ulduar.cpp +++ b/src/server/scripts/Northrend/Ulduar/ulduar/instance_ulduar.cpp @@ -376,6 +376,29 @@ class instance_ulduar : public InstanceMapScript } } + void OnCreatureDeath(Creature* creature) + { + switch (creature->GetEntry()) + { + case NPC_CORRUPTED_SERVITOR: + case NPC_MISGUIDED_NYMPH: + case NPC_GUARDIAN_LASHER: + case NPC_FOREST_SWARMER: + case NPC_MANGROVE_ENT: + case NPC_IRONROOT_LASHER: + case NPC_NATURES_BLADE: + case NPC_GUARDIAN_OF_LIFE: + if (!conSpeedAtory) + { + DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, CRITERIA_CON_SPEED_ATORY); + conSpeedAtory = true; + } + break; + default: + break; + } + } + void ProcessEvent(GameObject* /*gameObject*/, uint32 eventId) { // Flame Leviathan's Tower Event triggers @@ -442,7 +465,7 @@ class instance_ulduar : public InstanceMapScript if (state == DONE) { if (GameObject* HodirRareCache = instance->GetGameObject(HodirRareCacheGUID)) - if (GetData(DATA_HODIR_RARE_CACHE) == 1) + if (GetData(DATA_HODIR_RARE_CACHE)) HodirRareCache->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_UNK1); if (GameObject* HodirChest = instance->GetGameObject(HodirChestGUID)) HodirChest->SetRespawnTime(HodirChest->GetRespawnDelay()); @@ -482,16 +505,13 @@ class instance_ulduar : public InstanceMapScript break; case DATA_HODIR_RARE_CACHE: HodirRareCacheData = data; - break; - case DATA_KNOCK_ON_WOOD_ACHIEVEMENTS: - elderCount = data; - break; - case DATA_CON_SPEED_ATORY_ACHIEVEMENT: - if (!conSpeedAtory) + if (!HodirRareCacheData) { - DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, CRITERIA_CON_SPEED_ATORY); - conSpeedAtory = true; + if (Creature* Hodir = instance->GetCreature(HodirGUID)) + if (GameObject* gameObject = instance->GetGameObject(HodirRareCacheGUID)) + Hodir->RemoveGameObject(gameObject, false); } + break; default: break; } @@ -590,33 +610,13 @@ class instance_ulduar : public InstanceMapScript { case TYPE_COLOSSUS: return Encounter[type]; - break; case DATA_HODIR_RARE_CACHE: return HodirRareCacheData; - break; - } - - return 0; - } - - bool CheckAchievementCriteriaMeet(uint32 criteriaId, Player const* /*player*/, Unit const* /*target*/, uint32 /*miscvalue1*/) - { - switch (criteriaId) - { - case CRITERIA_KNOCK_ON_WOOD_10: - case CRITERIA_KNOCK_ON_WOOD_25: - return elderCount >= 1; - case CRITERIA_KNOCK_KNOCK_ON_WOOD_10: - case CRITERIA_KNOCK_KNOCK_ON_WOOD_25: - return elderCount >= 2; - case CRITERIA_KNOCK_KNOCK_KNOCK_ON_WOOD_10: - case CRITERIA_KNOCK_KNOCK_KNOCK_ON_WOOD_25: - return elderCount == 3; default: break; } - return false; + return 0; } std::string GetSaveData() diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/ulduar.h b/src/server/scripts/Northrend/Ulduar/ulduar/ulduar.h index 9c32378440a..53aa9635839 100644 --- a/src/server/scripts/Northrend/Ulduar/ulduar/ulduar.h +++ b/src/server/scripts/Northrend/Ulduar/ulduar/ulduar.h @@ -67,6 +67,7 @@ enum UlduarBosses enum UlduarNPCs { + // General NPC_LEVIATHAN = 33113, NPC_IGNIS = 33118, NPC_RAZORSCALE = 33186, @@ -93,6 +94,8 @@ enum UlduarNPCs NPC_VEZAX = 33271, NPC_YOGGSARON = 33288, NPC_ALGALON = 32871, + + // Mimiron NPC_LEVIATHAN_MKII = 33432, NPC_VX_001 = 33651, NPC_AERIAL_COMMAND_UNIT = 33670, @@ -119,6 +122,16 @@ enum UlduarNPCs NPC_BATTLE_PRIEST_GINA = 33330, NPC_FIELD_MEDIC_PENNY = 32897, NPC_FIELD_MEDIC_JESSI = 33326, + + // Freya's trash NPCs + NPC_CORRUPTED_SERVITOR = 33354, + NPC_MISGUIDED_NYMPH = 33355, + NPC_GUARDIAN_LASHER = 33430, + NPC_FOREST_SWARMER = 33431, + NPC_MANGROVE_ENT = 33525, + NPC_IRONROOT_LASHER = 33526, + NPC_NATURES_BLADE = 33527, + NPC_GUARDIAN_OF_LIFE = 33528, }; enum UlduarGameObjects @@ -157,43 +170,7 @@ enum UlduarTowerEvents EVENT_TOWER_OF_LIFE_DESTROYED = 21030, }; -enum UlduarAchievementCriteriaIds -{ - // Flame Leviathan - CRITERIA_UNBROKEN_10 = 10044, - CRITERIA_UNBROKEN_25 = 10045, - CRITERIA_SHUTOUT_10 = 10054, - CRITERIA_SHUTOUT_25 = 10055, - CRITERIA_3_CAR_GARAGE_CHOPPER_10 = 10046, - CRITERIA_3_CAR_GARAGE_SIEGE_10 = 10047, - CRITERIA_3_CAR_GARAGE_DEMOLISHER_10 = 10048, - CRITERIA_3_CAR_GARAGE_CHOPPER_25 = 10049, - CRITERIA_3_CAR_GARAGE_SIEGE_25 = 10050, - CRITERIA_3_CAR_GARAGE_DEMOLISHER_25 = 10051, - - // Ignis - CRITERIA_HOT_POCKET_10 = 10430, - CRITERIA_HOT_POCKET_25 = 10431, - - // Razorscale - CRITERIA_QUICK_SHAVE_10 = 10062, - CRITERIA_QUICK_SHAVE_25 = 10063, - - // Freya - CRITERIA_KNOCK_ON_WOOD_10 = 10447, - CRITERIA_KNOCK_ON_WOOD_25 = 10459, - CRITERIA_KNOCK_KNOCK_ON_WOOD_10 = 10448, - CRITERIA_KNOCK_KNOCK_ON_WOOD_25 = 10460, - CRITERIA_KNOCK_KNOCK_KNOCK_ON_WOOD_10 = 10449, - CRITERIA_KNOCK_KNOCK_KNOCK_ON_WOOD_25 = 10461, - CRITERIA_CON_SPEED_ATORY = 21597, // Timed achievement -}; - -enum UlduarAchievementData -{ - DATA_KNOCK_ON_WOOD_ACHIEVEMENTS = 1, - DATA_CON_SPEED_ATORY_ACHIEVEMENT = 2, -}; +#define CRITERIA_CON_SPEED_ATORY 21597 template<class AI> CreatureAI* GetUlduarAI(Creature* creature) |