aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLopin <davca.hr@seznam.cz>2011-06-27 18:42:38 +0200
committerLopin <davca.hr@seznam.cz>2011-06-27 18:42:38 +0200
commit1c04403866a17c9a8a2da05d8f8d88573ffc1b0f (patch)
tree5a93c50a78b18e596f3fe4979e5318b928aa2333 /src
parent3214bf3bac6607760be1410725c212052b3139b9 (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')
-rw-r--r--src/server/scripts/Northrend/Ulduar/ulduar/boss_freya.cpp68
-rw-r--r--src/server/scripts/Northrend/Ulduar/ulduar/instance_ulduar.cpp60
-rw-r--r--src/server/scripts/Northrend/Ulduar/ulduar/ulduar.h51
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)