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
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user