Scripts/BoT: converted achievements to world state handling
This commit is contained in:
1 parent
b0df1fdca3
commit
1e9fd012e8
5 files changed
+35
-100
No files matched your search
@@ -0,0 +1,10 @@
|
||||
DELETE FROM `achievement_criteria_data` WHERE `ScriptName` IN
|
||||
('achievement_the_only_escape',
|
||||
'achievement_elementary',
|
||||
'achievement_the_abyss_will_gaze_into_you');
|
||||
|
||||
DELETE FROM `world_states` WHERE `ID` IN (5607, 5621, 5659);
|
||||
INSERT INTO `world_states` (`ID`, `DefaultValue`, `MapID`, `Comment`) VALUES
|
||||
(5607, 0, 671, 'Bastion of Twilight - Halfus Wyrmbreaker - The Only Escape'),
|
||||
(5621, 0, 671, 'Bastion of Twilight - Ascendant Council - Elementary'),
|
||||
(5659, 0, 671, 'Bastion of Twilight - Cho\'Gall - The Abyss Will Gate Back Into You');
|
||||
@@ -78,7 +78,7 @@ enum BoTDataTypes
|
||||
|
||||
enum BoTDataStates
|
||||
{
|
||||
DRAGON_BUFFS_HALFUS_WYRMBREAKER,
|
||||
DRAGON_BUFFS_HALFUS_WYRMBREAKER = 0,
|
||||
DRAGON_BUFFS_PROTO_BEHEMOTH,
|
||||
};
|
||||
|
||||
@@ -194,6 +194,18 @@ enum BoTSpells
|
||||
SPELL_BERSERK = 26662
|
||||
};
|
||||
|
||||
enum BoTWorldStates
|
||||
{
|
||||
// Halfus Wyrmbreaker
|
||||
WORLD_STATE_ID_THE_ONLY_ESCAPE = 5607,
|
||||
|
||||
// Ascendant Council
|
||||
WORLD_STATE_ID_ELEMENTARY = 5621,
|
||||
|
||||
// Cho'Gall
|
||||
WORLD_STATE_ID_THE_ABYSS_WILL_GAZE_BACK_INTO_YOU = 5659
|
||||
};
|
||||
|
||||
template<class AI>
|
||||
AI* GetBastionOfTwilightAI(Creature* creature)
|
||||
{
|
||||
|
||||
@@ -294,11 +294,6 @@ enum MovePoints
|
||||
POINT_NONE = 0
|
||||
};
|
||||
|
||||
enum AchievementData
|
||||
{
|
||||
DATA_ELEMENTARY = 1
|
||||
};
|
||||
|
||||
enum SummonProperties
|
||||
{
|
||||
PROPERTY_DEFAULT = 64
|
||||
@@ -338,6 +333,7 @@ struct boss_ascendant_council_controller final : public BossAI
|
||||
break;
|
||||
|
||||
instance->SetBossState(DATA_ASCENDANT_COUNCIL, IN_PROGRESS);
|
||||
instance->instance->SetWorldState(WORLD_STATE_ID_ELEMENTARY, 0);
|
||||
|
||||
if (Creature* feludius = instance->GetCreature(DATA_FELUDIUS))
|
||||
{
|
||||
@@ -1276,7 +1272,7 @@ private:
|
||||
struct npc_elementium_monstrosity final : public ScriptedAI
|
||||
{
|
||||
npc_elementium_monstrosity(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()), _summons(me), _mergedHealth(0),
|
||||
_mergedTargets(0), _liquidIceCount(0), _achievementEnligible(true)
|
||||
_mergedTargets(0), _liquidIceCount(0)
|
||||
{
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
}
|
||||
@@ -1322,9 +1318,9 @@ struct npc_elementium_monstrosity final : public ScriptedAI
|
||||
|
||||
if (summon->GetEntry() == NPC_LIQUID_ICE)
|
||||
{
|
||||
_liquidIceCount++;
|
||||
++_liquidIceCount;
|
||||
if (_liquidIceCount == 2)
|
||||
_achievementEnligible = false;
|
||||
_instance->instance->SetWorldState(WORLD_STATE_ID_ELEMENTARY, 1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1346,14 +1342,6 @@ struct npc_elementium_monstrosity final : public ScriptedAI
|
||||
}
|
||||
}
|
||||
|
||||
uint32 GetData(uint32 type) const override
|
||||
{
|
||||
if (type == DATA_ELEMENTARY)
|
||||
return _achievementEnligible;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
if (!UpdateVictim() && !_events.IsInPhase(PHASE_INTRO))
|
||||
@@ -1399,7 +1387,6 @@ private:
|
||||
uint32 _mergedHealth;
|
||||
uint8 _mergedTargets;
|
||||
uint8 _liquidIceCount;
|
||||
bool _achievementEnligible;
|
||||
};
|
||||
|
||||
struct npc_ascendant_council_violent_cyclone final : public ScriptedAI
|
||||
@@ -2572,23 +2559,6 @@ class spell_elementium_monstrosity_gravity_crush final : public SpellScript
|
||||
}
|
||||
};
|
||||
|
||||
class achievement_elementary final : public AchievementCriteriaScript
|
||||
{
|
||||
public:
|
||||
achievement_elementary() : AchievementCriteriaScript("achievement_elementary") { }
|
||||
|
||||
bool OnCheck(Player* /*source*/, Unit* target) override
|
||||
{
|
||||
if (!target)
|
||||
return false;
|
||||
|
||||
if (target->IsAIEnabled)
|
||||
return target->GetAI()->GetData(DATA_ELEMENTARY);
|
||||
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_ascendant_council()
|
||||
{
|
||||
RegisterBastionOfTwilightCreatureAI(boss_ascendant_council_controller);
|
||||
@@ -2636,5 +2606,4 @@ void AddSC_boss_ascendant_council()
|
||||
RegisterSpellScript(spell_elementium_monstrosity_liquid_ice);
|
||||
RegisterSpellScript(spell_elementium_monstrosity_electric_instability);
|
||||
RegisterSpellScript(spell_elementium_monstrosity_gravity_crush);
|
||||
new achievement_elementary();
|
||||
}
|
||||
@@ -166,16 +166,9 @@ enum Phases
|
||||
PHASE_HEROIC_DEATH
|
||||
};
|
||||
|
||||
enum Actions
|
||||
{
|
||||
// 1 - 6 used by header file
|
||||
ACTION_FAIL_ACHIEVEMENT = 7
|
||||
};
|
||||
|
||||
enum Data
|
||||
{
|
||||
DATA_ELEMENTAL_POWER_STACKS = 0,
|
||||
DATA_ABYSS_WILL_GAZE_INTO_YOU = 1
|
||||
DATA_ELEMENTAL_POWER_STACKS = 0
|
||||
};
|
||||
|
||||
enum Corruption
|
||||
@@ -245,8 +238,8 @@ namespace CorruptionHandler
|
||||
// Achievement check
|
||||
if (power > CORRUPTION_ACHIEVEMENT_CAP)
|
||||
if (InstanceScript* instance = target->GetInstanceScript())
|
||||
if (Creature* chogall = instance->GetCreature(DATA_CHOGALL))
|
||||
chogall->AI()->DoAction(ACTION_FAIL_ACHIEVEMENT);
|
||||
if (!instance->instance->GetWorldStateValue(WORLD_STATE_ID_THE_ABYSS_WILL_GAZE_BACK_INTO_YOU))
|
||||
instance->instance->SetWorldState(WORLD_STATE_ID_THE_ABYSS_WILL_GAZE_BACK_INTO_YOU, 1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -299,7 +292,6 @@ struct boss_chogall final : public BossAI
|
||||
_elementalPowerStacks = 0;
|
||||
_firstDarkenedCreations = true;
|
||||
_allowDeath = true;
|
||||
_achievementEnligibe = true;
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* who) override
|
||||
@@ -307,6 +299,7 @@ struct boss_chogall final : public BossAI
|
||||
BossAI::JustEngagedWith(who);
|
||||
Talk(SAY_AGGRO);
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me);
|
||||
instance->instance->SetWorldState(WORLD_STATE_ID_THE_ABYSS_WILL_GAZE_BACK_INTO_YOU, 0);
|
||||
DoCastSelf(SPELL_CORRUPTED_BLOOD);
|
||||
events.SetPhase(PHASE_1);
|
||||
events.ScheduleEvent(EVENT_FURY_OF_CHOGALL, 57s + 800ms);
|
||||
@@ -395,9 +388,6 @@ struct boss_chogall final : public BossAI
|
||||
case ACTION_TALK_CHOGALL_INTRO:
|
||||
Talk(SAY_INTRO);
|
||||
break;
|
||||
case ACTION_FAIL_ACHIEVEMENT:
|
||||
_achievementEnligibe = false;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -425,8 +415,6 @@ struct boss_chogall final : public BossAI
|
||||
{
|
||||
case DATA_ELEMENTAL_POWER_STACKS:
|
||||
return _elementalPowerStacks;
|
||||
case DATA_ABYSS_WILL_GAZE_INTO_YOU:
|
||||
return _achievementEnligibe;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -557,7 +545,6 @@ private:
|
||||
uint8 _elementalPowerStacks;
|
||||
bool _firstDarkenedCreations;
|
||||
bool _allowDeath;
|
||||
bool _achievementEnligibe;
|
||||
};
|
||||
|
||||
class SpilledBloodAuraEvent : public BasicEvent
|
||||
@@ -1394,23 +1381,6 @@ class spell_chogall_debilitating_beam final : public AuraScript
|
||||
}
|
||||
};
|
||||
|
||||
class achievement_the_abyss_will_gaze_into_you final : public AchievementCriteriaScript
|
||||
{
|
||||
public:
|
||||
achievement_the_abyss_will_gaze_into_you() : AchievementCriteriaScript("achievement_the_abyss_will_gaze_into_you") { }
|
||||
|
||||
bool OnCheck(Player* /*source*/, Unit* target) override
|
||||
{
|
||||
if (!target)
|
||||
return false;
|
||||
|
||||
if (target->IsAIEnabled)
|
||||
return target->GetAI()->GetData(DATA_ABYSS_WILL_GAZE_INTO_YOU);
|
||||
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_chogall()
|
||||
{
|
||||
RegisterBastionOfTwilightCreatureAI(boss_chogall);
|
||||
@@ -1446,5 +1416,4 @@ void AddSC_boss_chogall()
|
||||
RegisterSpellScript(spell_chogall_corruption_malformation);
|
||||
RegisterSpellScript(spell_chogall_shadow_bolt);
|
||||
RegisterSpellScript(spell_chogall_debilitating_beam);
|
||||
new achievement_the_abyss_will_gaze_into_you();
|
||||
}
|
||||
@@ -82,11 +82,6 @@ enum Events
|
||||
EVENT_MOVE_OUT_OF_CAGE
|
||||
};
|
||||
|
||||
enum AchievementData
|
||||
{
|
||||
DATA_THE_ONLY_ESCAPE = 1
|
||||
};
|
||||
|
||||
enum Texts
|
||||
{
|
||||
// Halfus Wyrmbreaker
|
||||
@@ -174,7 +169,8 @@ struct boss_halfus_wyrmbreaker final : public BossAI
|
||||
{
|
||||
BossAI::JustEngagedWith(who);
|
||||
Talk(SAY_AGGRO);
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me);
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me, 1);
|
||||
instance->instance->SetWorldState(WORLD_STATE_ID_THE_ONLY_ESCAPE, 0);
|
||||
events.ScheduleEvent(EVENT_BERSERK, 10min);
|
||||
|
||||
if (Creature* protoBehemoth = instance->GetCreature(DATA_PROTO_BEHEMOTH))
|
||||
@@ -241,11 +237,13 @@ struct boss_halfus_wyrmbreaker final : public BossAI
|
||||
if (_theOnlyEscapeAchievementState == NOT_STARTED)
|
||||
{
|
||||
_theOnlyEscapeAchievementState = IN_PROGRESS;
|
||||
instance->instance->SetWorldState(WORLD_STATE_ID_THE_ONLY_ESCAPE, 1);
|
||||
events.ScheduleEvent(EVENT_RESET_ACHIEVEMT, Seconds(10));
|
||||
}
|
||||
else if (_theOnlyEscapeAchievementState == IN_PROGRESS)
|
||||
{
|
||||
_theOnlyEscapeAchievementState = DONE;
|
||||
instance->instance->SetWorldState(WORLD_STATE_ID_THE_ONLY_ESCAPE, 2);
|
||||
events.CancelEvent(EVENT_RESET_ACHIEVEMT);
|
||||
}
|
||||
break;
|
||||
@@ -281,14 +279,6 @@ struct boss_halfus_wyrmbreaker final : public BossAI
|
||||
}
|
||||
}
|
||||
|
||||
uint32 GetData(uint32 type) const override
|
||||
{
|
||||
if (type == DATA_THE_ONLY_ESCAPE)
|
||||
return _theOnlyEscapeAchievementState;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
@@ -700,20 +690,6 @@ class spell_halfus_dancing_flames final : public SpellScript
|
||||
}
|
||||
};
|
||||
|
||||
class achievement_the_only_escape final : public AchievementCriteriaScript
|
||||
{
|
||||
public:
|
||||
achievement_the_only_escape() : AchievementCriteriaScript("achievement_the_only_escape") { }
|
||||
|
||||
bool OnCheck(Player* /*source*/, Unit* target)
|
||||
{
|
||||
if (target && target->IsAIEnabled)
|
||||
return (target->GetAI()->GetData(DATA_THE_ONLY_ESCAPE) == DONE);
|
||||
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_halfus_wyrmbreaker()
|
||||
{
|
||||
RegisterBastionOfTwilightCreatureAI(boss_halfus_wyrmbreaker);
|
||||
@@ -725,5 +701,4 @@ void AddSC_boss_halfus_wyrmbreaker()
|
||||
RegisterSpellScript(spell_halfus_stone_touch);
|
||||
RegisterSpellScript(spell_halfus_cyclone_winds);
|
||||
RegisterSpellScript(spell_halfus_dancing_flames);
|
||||
new achievement_the_only_escape();
|
||||
}
|
||||
Reference in new issue
Block a user