Scripts/Ulduar: Move handling of Freya's "Knock" achievements to instance script + clean up
This commit is contained in:
@@ -0,0 +1,9 @@
|
|||||||
|
DELETE FROM `achievement_criteria_data` WHERE `criteria_id` IN (10447,10448,10449,10459,10460,10461) AND `type` IN (11,18);
|
||||||
|
INSERT INTO `achievement_criteria_data` (`criteria_id`,`type`,`value1`,`value2`,`ScriptName`)
|
||||||
|
VALUES
|
||||||
|
(10447,18,0,0,''),
|
||||||
|
(10448,18,0,0,''),
|
||||||
|
(10449,18,0,0,''),
|
||||||
|
(10459,18,0,0,''),
|
||||||
|
(10460,18,0,0,''),
|
||||||
|
(10461,18,0,0,'');
|
||||||
@@ -220,8 +220,7 @@ enum FreyaEvents
|
|||||||
|
|
||||||
#define WAVE_TIME 60000 // Normal wave is one minute
|
#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 TIME_DIFFERENCE 10000 // If difference between waveTime and WAVE_TIME is bigger then TIME_DIFFERENCE, schedule EVENT_WAVE in 10 seconds
|
||||||
#define DATA_KNOCK_ON_WOOD 1
|
#define DATA_GETTING_BACK_TO_NATURE 1
|
||||||
#define DATA_GETTING_BACK_TO_NATURE 2
|
|
||||||
|
|
||||||
class npc_iron_roots : public CreatureScript
|
class npc_iron_roots : public CreatureScript
|
||||||
{
|
{
|
||||||
@@ -382,6 +381,8 @@ class boss_freya : public CreatureScript
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
instance->SetData(DATA_KNOCK_ON_WOOD_ACHIEVEMENTS, elderCount);
|
||||||
|
|
||||||
if (Elder[0]->isAlive())
|
if (Elder[0]->isAlive())
|
||||||
{
|
{
|
||||||
Elder[0]->CastSpell(me, SPELL_BRIGHTLEAF_ESSENCE, true);
|
Elder[0]->CastSpell(me, SPELL_BRIGHTLEAF_ESSENCE, true);
|
||||||
@@ -415,8 +416,6 @@ class boss_freya : public CreatureScript
|
|||||||
{
|
{
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case DATA_KNOCK_ON_WOOD:
|
|
||||||
return elderCount;
|
|
||||||
case DATA_GETTING_BACK_TO_NATURE:
|
case DATA_GETTING_BACK_TO_NATURE:
|
||||||
return attunedToNature;
|
return attunedToNature;
|
||||||
}
|
}
|
||||||
@@ -1611,66 +1610,6 @@ class spell_freya_iron_roots : public SpellScriptLoader
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
class achievement_getting_back_to_nature : public AchievementCriteriaScript
|
class achievement_getting_back_to_nature : public AchievementCriteriaScript
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -1710,8 +1649,5 @@ void AddSC_boss_freya()
|
|||||||
new npc_iron_roots();
|
new npc_iron_roots();
|
||||||
new spell_freya_attuned_to_nature_dose_reduction();
|
new spell_freya_attuned_to_nature_dose_reduction();
|
||||||
new spell_freya_iron_roots();
|
new spell_freya_iron_roots();
|
||||||
new achievement_knock_on_wood();
|
|
||||||
new achievement_knock_knock_on_wood();
|
|
||||||
new achievement_knock_knock_knock_on_wood();
|
|
||||||
new achievement_getting_back_to_nature();
|
new achievement_getting_back_to_nature();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,10 +18,9 @@
|
|||||||
#include "ScriptMgr.h"
|
#include "ScriptMgr.h"
|
||||||
#include "ScriptedCreature.h"
|
#include "ScriptedCreature.h"
|
||||||
#include "InstanceScript.h"
|
#include "InstanceScript.h"
|
||||||
#include "ObjectMgr.h"
|
|
||||||
#include "ulduar.h"
|
#include "ulduar.h"
|
||||||
|
|
||||||
static const DoorData doorData[] =
|
static DoorData const doorData[] =
|
||||||
{
|
{
|
||||||
{ GO_LEVIATHAN_DOOR, BOSS_LEVIATHAN, DOOR_TYPE_ROOM, BOUNDARY_S },
|
{ GO_LEVIATHAN_DOOR, BOSS_LEVIATHAN, DOOR_TYPE_ROOM, BOUNDARY_S },
|
||||||
{ 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE },
|
{ 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE },
|
||||||
@@ -32,11 +31,6 @@ class instance_ulduar : public InstanceMapScript
|
|||||||
public:
|
public:
|
||||||
instance_ulduar() : InstanceMapScript("instance_ulduar", 603) { }
|
instance_ulduar() : InstanceMapScript("instance_ulduar", 603) { }
|
||||||
|
|
||||||
InstanceScript* GetInstanceScript(InstanceMap* map) const
|
|
||||||
{
|
|
||||||
return new instance_ulduar_InstanceMapScript(map);
|
|
||||||
}
|
|
||||||
|
|
||||||
struct instance_ulduar_InstanceMapScript : public InstanceScript
|
struct instance_ulduar_InstanceMapScript : public InstanceScript
|
||||||
{
|
{
|
||||||
instance_ulduar_InstanceMapScript(InstanceMap* map) : InstanceScript(map) { }
|
instance_ulduar_InstanceMapScript(InstanceMap* map) : InstanceScript(map) { }
|
||||||
@@ -44,6 +38,7 @@ public:
|
|||||||
uint32 Encounter[MAX_ENCOUNTER];
|
uint32 Encounter[MAX_ENCOUNTER];
|
||||||
std::string m_strInstData;
|
std::string m_strInstData;
|
||||||
|
|
||||||
|
// Creatures
|
||||||
uint64 LeviathanGUID;
|
uint64 LeviathanGUID;
|
||||||
uint64 IgnisGUID;
|
uint64 IgnisGUID;
|
||||||
uint64 RazorscaleGUID;
|
uint64 RazorscaleGUID;
|
||||||
@@ -68,6 +63,7 @@ public:
|
|||||||
uint64 LeviathanGateGUID;
|
uint64 LeviathanGateGUID;
|
||||||
uint64 VezaxDoorGUID;
|
uint64 VezaxDoorGUID;
|
||||||
|
|
||||||
|
// GameObjects
|
||||||
uint64 KologarnChestGUID;
|
uint64 KologarnChestGUID;
|
||||||
uint64 KologarnBridgeGUID;
|
uint64 KologarnBridgeGUID;
|
||||||
uint64 KologarnDoorGUID;
|
uint64 KologarnDoorGUID;
|
||||||
@@ -79,8 +75,10 @@ public:
|
|||||||
uint64 HodirIceDoorGUID;
|
uint64 HodirIceDoorGUID;
|
||||||
uint64 ArchivumDoorGUID;
|
uint64 ArchivumDoorGUID;
|
||||||
|
|
||||||
|
// Miscellaneous
|
||||||
uint32 TeamInInstance;
|
uint32 TeamInInstance;
|
||||||
uint32 HodirRareCacheData;
|
uint32 HodirRareCacheData;
|
||||||
|
uint8 elderCount;
|
||||||
|
|
||||||
std::set<uint64> mRubbleSpawns;
|
std::set<uint64> mRubbleSpawns;
|
||||||
|
|
||||||
@@ -118,6 +116,7 @@ public:
|
|||||||
ArchivumDoorGUID = 0;
|
ArchivumDoorGUID = 0;
|
||||||
TeamInInstance = 0;
|
TeamInInstance = 0;
|
||||||
HodirRareCacheData = 0;
|
HodirRareCacheData = 0;
|
||||||
|
elderCount = 0;
|
||||||
|
|
||||||
memset(Encounter, 0, sizeof(Encounter));
|
memset(Encounter, 0, sizeof(Encounter));
|
||||||
memset(XTToyPileGUIDs, 0, sizeof(XTToyPileGUIDs));
|
memset(XTToyPileGUIDs, 0, sizeof(XTToyPileGUIDs));
|
||||||
@@ -375,11 +374,10 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProcessEvent(GameObject* /*go*/, uint32 eventId)
|
void ProcessEvent(GameObject* /*gameObject*/, uint32 eventId)
|
||||||
{
|
{
|
||||||
// Flame Leviathan's Tower Event triggers
|
// Flame Leviathan's Tower Event triggers
|
||||||
Creature* FlameLeviathan = instance->GetCreature(LeviathanGUID);
|
Creature* FlameLeviathan = instance->GetCreature(LeviathanGUID);
|
||||||
|
|
||||||
if (FlameLeviathan && FlameLeviathan->isAlive()) // No leviathan, no event triggering ;)
|
if (FlameLeviathan && FlameLeviathan->isAlive()) // No leviathan, no event triggering ;)
|
||||||
switch (eventId)
|
switch (eventId)
|
||||||
{
|
{
|
||||||
@@ -483,6 +481,9 @@ public:
|
|||||||
case DATA_HODIR_RARE_CACHE:
|
case DATA_HODIR_RARE_CACHE:
|
||||||
HodirRareCacheData = data;
|
HodirRareCacheData = data;
|
||||||
break;
|
break;
|
||||||
|
case DATA_KNOCK_ON_WOOD_ACHIEVEMENTS:
|
||||||
|
elderCount = data;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -590,6 +591,26 @@ public:
|
|||||||
return 0;
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
std::string GetSaveData()
|
std::string GetSaveData()
|
||||||
{
|
{
|
||||||
OUT_SAVE_INST_DATA;
|
OUT_SAVE_INST_DATA;
|
||||||
@@ -601,7 +622,7 @@ public:
|
|||||||
return saveStream.str();
|
return saveStream.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Load(const char* strIn)
|
void Load(char const* strIn)
|
||||||
{
|
{
|
||||||
if (!strIn)
|
if (!strIn)
|
||||||
{
|
{
|
||||||
@@ -636,9 +657,12 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
InstanceScript* GetInstanceScript(InstanceMap* map) const
|
||||||
|
{
|
||||||
|
return new instance_ulduar_InstanceMapScript(map);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
void AddSC_instance_ulduar()
|
void AddSC_instance_ulduar()
|
||||||
{
|
{
|
||||||
new instance_ulduar();
|
new instance_ulduar();
|
||||||
|
|||||||
@@ -157,22 +157,40 @@ enum UlduarTowerEvents
|
|||||||
EVENT_TOWER_OF_LIFE_DESTROYED = 21030,
|
EVENT_TOWER_OF_LIFE_DESTROYED = 21030,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum UlduarAchievementCriteria
|
enum UlduarAchievementCriteriaIds
|
||||||
{
|
{
|
||||||
ACHIEVEMENT_UNBROKEN_10 = 10044, // Leviathan
|
// Flame Leviathan
|
||||||
ACHIEVEMENT_UNBROKEN_25 = 10045,
|
CRITERIA_UNBROKEN_10 = 10044,
|
||||||
ACHIEVEMENT_CRITERIA_SHUTOUT_10 = 10054,
|
CRITERIA_UNBROKEN_25 = 10045,
|
||||||
ACHIEVEMENT_CRITERIA_SHUTOUT_25 = 10055,
|
CRITERIA_SHUTOUT_10 = 10054,
|
||||||
ACHIEVEMENT_CRITERIA_3_CAR_GARAGE_CHOPPER_10 = 10046,
|
CRITERIA_SHUTOUT_25 = 10055,
|
||||||
ACHIEVEMENT_CRITERIA_3_CAR_GARAGE_SIEGE_10 = 10047,
|
CRITERIA_3_CAR_GARAGE_CHOPPER_10 = 10046,
|
||||||
ACHIEVEMENT_CRITERIA_3_CAR_GARAGE_DEMOLISHER_10 = 10048,
|
CRITERIA_3_CAR_GARAGE_SIEGE_10 = 10047,
|
||||||
ACHIEVEMENT_CRITERIA_3_CAR_GARAGE_CHOPPER_25 = 10049,
|
CRITERIA_3_CAR_GARAGE_DEMOLISHER_10 = 10048,
|
||||||
ACHIEVEMENT_CRITERIA_3_CAR_GARAGE_SIEGE_25 = 10050,
|
CRITERIA_3_CAR_GARAGE_CHOPPER_25 = 10049,
|
||||||
ACHIEVEMENT_CRITERIA_3_CAR_GARAGE_DEMOLISHER_25 = 10051,
|
CRITERIA_3_CAR_GARAGE_SIEGE_25 = 10050,
|
||||||
ACHIEVEMENT_CRITERIA_HOT_POCKET_10 = 10430, // Ignis
|
CRITERIA_3_CAR_GARAGE_DEMOLISHER_25 = 10051,
|
||||||
ACHIEVEMENT_CRITERIA_HOT_POCKET_25 = 10431,
|
|
||||||
ACHIEVEMENT_CRITERIA_QUICK_SHAVE_10 = 10062, // Razorscale
|
// Ignis
|
||||||
ACHIEVEMENT_CRITERIA_QUICK_SHAVE_25 = 10063,
|
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,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum UlduarAchievementData
|
||||||
|
{
|
||||||
|
DATA_KNOCK_ON_WOOD_ACHIEVEMENTS = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
template<class AI>
|
template<class AI>
|
||||||
|
|||||||
Reference in New Issue
Block a user