Scripts/BWD: converted remaining achievements to world state based handling
This commit is contained in:
1 parent
5fd77a3b28
commit
b0df1fdca3
7 files changed
+46
-139
No files matched your search
@@ -0,0 +1,12 @@
|
||||
DELETE FROM `achievement_criteria_data` WHERE `ScriptName` IN
|
||||
('achievement_parasite_evening',
|
||||
'achievement_full_of_sound_and_fury',
|
||||
'achievement_keeping_it_in_the_family',
|
||||
'achievement_silence_is_golden');
|
||||
|
||||
DELETE FROM `world_states` WHERE `ID` IN (5640, 5643, 5652, 5655);
|
||||
INSERT INTO `world_states` (`ID`, `DefaultValue`, `MapID`, `Comment`) VALUES
|
||||
(5640, 0, 669, 'Blackwing Descent - Magmaw - Parasite Evening'),
|
||||
(5643, 0, 669, 'Blackwing Descent - Chimaeron - Full of Sound and Fury'),
|
||||
(5652, 1, 669, 'Blackwing Descent - Nefarian\'s End - Keeping it in the Family'),
|
||||
(5655, 0, 669, 'Blackwing Descent - Atramedes - Silence is Golden');
|
||||
+14
-6
@@ -42,7 +42,6 @@ enum BWDDataTypes
|
||||
DATA_COLUMN_OF_LIGHT,
|
||||
DATA_ATRAMEDES_INTRO,
|
||||
DATA_ENTRANCE_INTRO,
|
||||
DATA_NEFARIAN_ACHIEVEMENT_STATE,
|
||||
DATA_LORD_VICTOR_NEFARIUS_GENERIC,
|
||||
DATA_BOSS_DEFEATED,
|
||||
DATA_HEROES_ENTERED_HALLS,
|
||||
@@ -207,13 +206,22 @@ enum BWDSpells
|
||||
enum BWDWorldStates
|
||||
{
|
||||
// Omnotron Defense System
|
||||
WORLD_STATE_ID_STATIC_SHOCK = 5644,
|
||||
WORLD_STATE_ID_POISON_BOMB = 5645,
|
||||
WORLD_STATE_ID_ARCANE_ANNIHILATOR = 5646,
|
||||
WORLD_STATE_ID_FLAMETHROWER = 5647,
|
||||
WORLD_STATE_ID_STATIC_SHOCK = 5644,
|
||||
WORLD_STATE_ID_POISON_BOMB = 5645,
|
||||
WORLD_STATE_ID_ARCANE_ANNIHILATOR = 5646,
|
||||
WORLD_STATE_ID_FLAMETHROWER = 5647,
|
||||
|
||||
// Magmaw
|
||||
WORLD_STATE_ID_PARASITE_EVENING = 5640,
|
||||
|
||||
// Chimaeron
|
||||
WORLD_STATE_ID_FULL_OF_SOUND_AND_FURY = 5643,
|
||||
|
||||
// Atramedes
|
||||
WORLD_STATE_ID_SILENCE_IS_GOLDEN = 5655,
|
||||
|
||||
// Nefarian's End
|
||||
WS_KEEPING_IT_IN_THE_FAMILY = 0
|
||||
WORLD_STATE_ID_KEEPING_IT_IN_THE_FAMILY = 5652
|
||||
};
|
||||
|
||||
template <class AI, class T>
|
||||
|
||||
+5
-29
@@ -19,6 +19,7 @@
|
||||
#include "ScriptMgr.h"
|
||||
#include "CommonPredicates.h"
|
||||
#include "GridNotifiers.h"
|
||||
#include "Map.h"
|
||||
#include "MoveSpline.h"
|
||||
#include "PassiveAI.h"
|
||||
#include "ScriptedCreature.h"
|
||||
@@ -130,7 +131,6 @@ enum Actions
|
||||
// Atramedes
|
||||
ACTION_START_INTRO = 0,
|
||||
ACTION_HALT_REVERBERATING_FLAME = 1,
|
||||
ACTION_FAIL_ACHIEVEMENT = 2,
|
||||
|
||||
// Lord Victor Nefarius
|
||||
ACTION_DESTROY_SHIELD = 0,
|
||||
@@ -166,7 +166,6 @@ enum Data
|
||||
DATA_ADD_NOISY_PLAYER = 1,
|
||||
DATA_REMOVE_NOISY_PLAYER = 2,
|
||||
DATA_LAST_SHIELD_USER = 3,
|
||||
DATA_ACHIEVEMENT_ENLIGIBLE = 4,
|
||||
|
||||
// Getter
|
||||
DATA_IS_IN_AIR = 0,
|
||||
@@ -188,7 +187,7 @@ Position const LordVictorNefariusSummonPosition = { 92.91319f, -223.9931f, 96.89
|
||||
|
||||
struct boss_atramedes : public BossAI
|
||||
{
|
||||
boss_atramedes(Creature* creature) : BossAI(creature, DATA_ATRAMEDES), _achievementEnligible(true) { }
|
||||
boss_atramedes(Creature* creature) : BossAI(creature, DATA_ATRAMEDES) { }
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
@@ -200,6 +199,7 @@ struct boss_atramedes : public BossAI
|
||||
{
|
||||
BossAI::JustEngagedWith(who);
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me);
|
||||
instance->instance->SetWorldState(WORLD_STATE_ID_SILENCE_IS_GOLDEN, 0);
|
||||
Talk(SAY_AGGRO);
|
||||
DoCastSelf(SPELL_DEVASTATION_TRIGGER);
|
||||
DoCastSelf(SPELL_SOUND_BAR);
|
||||
@@ -307,8 +307,6 @@ struct boss_atramedes : public BossAI
|
||||
return (uint8(!_noisyPlayerGUIDs.empty()));
|
||||
case DATA_IS_IN_INTRO_PHASE:
|
||||
return (uint8(events.IsInPhase(PHASE_INTRO)));
|
||||
case DATA_ACHIEVEMENT_ENLIGIBLE:
|
||||
return (uint8(_achievementEnligible));
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -411,9 +409,6 @@ struct boss_atramedes : public BossAI
|
||||
events.ScheduleEvent(EVENT_MOVE_REVERBERATING_FLAME_TO_SHIELD, 2s, 0, PHASE_AIR);
|
||||
}
|
||||
break;
|
||||
case ACTION_FAIL_ACHIEVEMENT:
|
||||
_achievementEnligible = false;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -518,7 +513,6 @@ private:
|
||||
ObjectGuid _lastShieldUserGUID;
|
||||
ObjectGuid _lastUsedAncientDwarvenShieldGUID;
|
||||
ObjectGuid _reverberatingFlameGUID;
|
||||
bool _achievementEnligible;
|
||||
};
|
||||
|
||||
struct npc_atramedes_ancient_dwarven_shield : public NullCreatureAI
|
||||
@@ -842,8 +836,8 @@ class spell_atramedes_sound_bar : public AuraScript
|
||||
target->CastSpell(target, SPELL_NOISY, aurEff);
|
||||
}
|
||||
else if (target->GetPower(POWER_ALTERNATE_POWER) >= 50)
|
||||
if (Creature* atramedes = instance->GetCreature(DATA_ATRAMEDES))
|
||||
atramedes->AI()->DoAction(ACTION_FAIL_ACHIEVEMENT);
|
||||
if (!instance->instance->GetWorldStateValue(WORLD_STATE_ID_SILENCE_IS_GOLDEN))
|
||||
instance->instance->SetWorldState(WORLD_STATE_ID_SILENCE_IS_GOLDEN, 1);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
@@ -1039,23 +1033,6 @@ class spell_atramedes_apply_vehicle_periodic : public AuraScript
|
||||
}
|
||||
};
|
||||
|
||||
class achievement_silence_is_golden : public AchievementCriteriaScript
|
||||
{
|
||||
public:
|
||||
achievement_silence_is_golden() : AchievementCriteriaScript("achievement_silence_is_golden") { }
|
||||
|
||||
bool OnCheck(Player* /*source*/, Unit* target) override
|
||||
{
|
||||
if (!target)
|
||||
return false;
|
||||
|
||||
if (target->IsAIEnabled)
|
||||
return target->GetAI()->GetData(DATA_ACHIEVEMENT_ENLIGIBLE);
|
||||
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_atramedes()
|
||||
{
|
||||
RegisterBlackwingDescentCreatureAI(boss_atramedes);
|
||||
@@ -1078,5 +1055,4 @@ void AddSC_boss_atramedes()
|
||||
RegisterSpellScript(spell_atramedes_destroy_shield);
|
||||
RegisterSpellScript(spell_atramedes_pestered);
|
||||
RegisterSpellScript(spell_atramedes_apply_vehicle_periodic);
|
||||
new achievement_silence_is_golden();
|
||||
}
|
||||
+5
-36
@@ -125,11 +125,6 @@ enum GossipMenuMisc
|
||||
NPC_TEXT_MISSING_KEY = 16565
|
||||
};
|
||||
|
||||
enum Data
|
||||
{
|
||||
DATA_ACHIEVEMENT_ENLIGIBLE = 0
|
||||
};
|
||||
|
||||
Position const LordVictorNefariusSummonPosition = { -113.8229f, 45.86111f, 80.36481f, 4.817109f };
|
||||
|
||||
struct boss_chimaeron : public BossAI
|
||||
@@ -155,6 +150,7 @@ struct boss_chimaeron : public BossAI
|
||||
{
|
||||
BossAI::JustEngagedWith(who);
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me);
|
||||
instance->instance->SetWorldState(WORLD_STATE_ID_FULL_OF_SOUND_AND_FURY, 0);
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
events.SetPhase(PHASE_1);
|
||||
events.ScheduleEvent(EVENT_CAUSTIC_SLIME, 5s, 0, PHASE_1);
|
||||
@@ -213,7 +209,11 @@ struct boss_chimaeron : public BossAI
|
||||
void KilledUnit(Unit* victim) override
|
||||
{
|
||||
if (victim->GetTypeId() == TYPEID_PLAYER)
|
||||
{
|
||||
_killedPlayerCount++;
|
||||
if (_killedPlayerCount == 3)
|
||||
instance->instance->SetWorldState(WORLD_STATE_ID_FULL_OF_SOUND_AND_FURY, 1);
|
||||
}
|
||||
}
|
||||
|
||||
void DamageTaken(Unit* /*attacker*/, uint32& damage) override
|
||||
@@ -313,19 +313,6 @@ struct boss_chimaeron : public BossAI
|
||||
}
|
||||
}
|
||||
|
||||
uint32 GetData(uint32 type) const override
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case DATA_ACHIEVEMENT_ENLIGIBLE:
|
||||
return uint8(_killedPlayerCount <= 2);
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
if (!UpdateVictim() && !events.IsInPhase(PHASE_ASLEEP) && !_isInFeud)
|
||||
@@ -697,23 +684,6 @@ class spell_chimaeron_shadow_whip : public SpellScript
|
||||
}
|
||||
};
|
||||
|
||||
class achievement_full_of_sound_and_fury : public AchievementCriteriaScript
|
||||
{
|
||||
public:
|
||||
achievement_full_of_sound_and_fury() : AchievementCriteriaScript("achievement_full_of_sound_and_fury") { }
|
||||
|
||||
bool OnCheck(Player* /*source*/, Unit* target) override
|
||||
{
|
||||
if (!target)
|
||||
return false;
|
||||
|
||||
if (target->IsAIEnabled)
|
||||
return target->GetAI()->GetData(DATA_ACHIEVEMENT_ENLIGIBLE);
|
||||
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_chimaeron()
|
||||
{
|
||||
RegisterBlackwingDescentCreatureAI(boss_chimaeron);
|
||||
@@ -726,5 +696,4 @@ void AddSC_boss_chimaeron()
|
||||
RegisterSpellScript(spell_chimaeron_reroute_power);
|
||||
RegisterSpellScript(spell_chimaeron_feud);
|
||||
RegisterSpellScript(spell_chimaeron_shadow_whip);
|
||||
new achievement_full_of_sound_and_fury();
|
||||
}
|
||||
+5
-35
@@ -133,7 +133,6 @@ enum Actions
|
||||
ACTION_DISABLE_MOUNTING = 2,
|
||||
ACTION_EXPOSE_HEAD = 4,
|
||||
ACTION_COVER_HEAD = 5,
|
||||
ACTION_FAIL_ACHIEVEMT = 3,
|
||||
|
||||
// Nefarian
|
||||
ACTION_SCHEDULE_SHADOW_BREATH = 0,
|
||||
@@ -174,8 +173,7 @@ enum VehicleSeats
|
||||
|
||||
enum Data
|
||||
{
|
||||
DATA_FREE_PINCER = 0,
|
||||
DATA_ACHIEVEMENT_STATE = 1
|
||||
DATA_FREE_PINCER = 0
|
||||
};
|
||||
|
||||
enum MovePoints
|
||||
@@ -212,7 +210,7 @@ Position const NefarianIntroSummonPos = { -390.1042f, 40.88411f, 207.8586f, 0
|
||||
struct boss_magmaw : public BossAI
|
||||
{
|
||||
boss_magmaw(Creature* creature) : BossAI(creature, DATA_MAGMAW),
|
||||
_magmaProjectileCount(0), _achievementEnligible(true), _headEngaged(false), _heroicPhaseTwoActive(!IsHeroic())
|
||||
_magmaProjectileCount(0), _headEngaged(false), _heroicPhaseTwoActive(!IsHeroic())
|
||||
{
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
}
|
||||
@@ -237,6 +235,7 @@ struct boss_magmaw : public BossAI
|
||||
|
||||
BossAI::JustEngagedWith(who);
|
||||
instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me, FRAME_PRIORITY_MAGMAW);
|
||||
instance->instance->SetWorldState(WORLD_STATE_ID_PARASITE_EVENING, 0);
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
|
||||
events.SetPhase(PHASE_COMBAT);
|
||||
@@ -330,14 +329,6 @@ struct boss_magmaw : public BossAI
|
||||
}
|
||||
}
|
||||
|
||||
uint32 GetData(uint32 type) const override
|
||||
{
|
||||
if (type == DATA_ACHIEVEMENT_STATE)
|
||||
return _achievementEnligible;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
ObjectGuid GetGUID(int32 type) const override
|
||||
{
|
||||
switch (type)
|
||||
@@ -432,9 +423,6 @@ struct boss_magmaw : public BossAI
|
||||
head->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
}
|
||||
break;
|
||||
case ACTION_FAIL_ACHIEVEMT:
|
||||
_achievementEnligible = false;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -604,7 +592,6 @@ private:
|
||||
|
||||
std::array<ObjectGuid, MAX_BODY_PARTS> _bodyPartGUIDs;
|
||||
uint8 _magmaProjectileCount;
|
||||
bool _achievementEnligible;
|
||||
bool _headEngaged;
|
||||
bool _heroicPhaseTwoActive;
|
||||
};
|
||||
@@ -714,8 +701,8 @@ struct npc_magmaw_lava_parasite : public ScriptedAI
|
||||
me->AttackStop();
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
me->DespawnOrUnsummon(4s);
|
||||
if (Creature* magmaw = _instance->GetCreature(DATA_MAGMAW))
|
||||
magmaw->AI()->DoAction(ACTION_FAIL_ACHIEVEMT);
|
||||
if (!_instance->instance->GetWorldStateValue(WORLD_STATE_ID_PARASITE_EVENING))
|
||||
_instance->instance->SetWorldState(WORLD_STATE_ID_PARASITE_EVENING, 1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1271,22 +1258,6 @@ class spell_magmaw_captured : public AuraScript
|
||||
}
|
||||
};
|
||||
|
||||
class achievement_parasite_evening : public AchievementCriteriaScript
|
||||
{
|
||||
public:
|
||||
achievement_parasite_evening() : AchievementCriteriaScript("achievement_parasite_evening") { }
|
||||
|
||||
bool OnCheck(Player* /*source*/, Unit* target) override
|
||||
{
|
||||
if (!target)
|
||||
return false;
|
||||
|
||||
if (target->IsAIEnabled)
|
||||
return target->GetAI()->GetData(DATA_ACHIEVEMENT_STATE);
|
||||
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_magmaw()
|
||||
{
|
||||
@@ -1308,5 +1279,4 @@ void AddSC_boss_magmaw()
|
||||
RegisterSpellScript(spell_magmaw_massive_crash);
|
||||
RegisterSpellScript(spell_magmaw_impale_self);
|
||||
RegisterSpellScript(spell_magmaw_captured);
|
||||
new achievement_parasite_evening();
|
||||
}
|
||||
+5
-20
@@ -291,8 +291,7 @@ static OnyxiaChainData OnyxiaChainInfo[] =
|
||||
|
||||
enum Misc
|
||||
{
|
||||
SOUND_ID_ROAR = 7274,
|
||||
WS_ACHIEVEMENT_CRITERIA = 5652
|
||||
SOUND_ID_ROAR = 7274
|
||||
};
|
||||
|
||||
Position const NefarianSummonPosition = { -166.655f, -224.602f, 40.48163f, 0.0f };
|
||||
@@ -438,7 +437,6 @@ struct boss_nefarians_end : public BossAI
|
||||
}
|
||||
|
||||
summons.DespawnAll();
|
||||
instance->SetData(DATA_NEFARIAN_ACHIEVEMENT_STATE, 1);
|
||||
instance->SetBossState(DATA_NEFARIANS_END, FAIL);
|
||||
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_EXPLOSIVE_CINDERS);
|
||||
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_DOMINION_OVERRIDE_ACTION_BAR);
|
||||
@@ -781,7 +779,7 @@ struct boss_nefarians_end : public BossAI
|
||||
break;
|
||||
case EVENT_LAND_PHASE_THREE:
|
||||
if (me->GetHealthPct() > 50.f)
|
||||
instance->SetData(DATA_NEFARIAN_ACHIEVEMENT_STATE, 0);
|
||||
instance->instance->SetWorldState(WORLD_STATE_ID_KEEPING_IT_IN_THE_FAMILY, 0);
|
||||
|
||||
me->RemoveAurasDueToSpell(SPELL_NEFARIAN_PHASE_2_HEALTH_AURA);
|
||||
me->SendSetPlayHoverAnim(true);
|
||||
@@ -924,7 +922,10 @@ struct npc_nefarians_end_onyxia : public ScriptedAI
|
||||
void JustEngagedWith(Unit* /*who*/) override
|
||||
{
|
||||
if (_instance->GetBossState(DATA_NEFARIANS_END) != IN_PROGRESS)
|
||||
{
|
||||
_instance->SetBossState(DATA_NEFARIANS_END, IN_PROGRESS);
|
||||
_instance->instance->SetWorldState(WORLD_STATE_ID_KEEPING_IT_IN_THE_FAMILY, 1);
|
||||
}
|
||||
|
||||
_instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me, FRAME_INDEX_ONYXIA);
|
||||
|
||||
@@ -2051,21 +2052,6 @@ private:
|
||||
InstanceScript* _instance;
|
||||
};
|
||||
|
||||
class achievement_keeping_it_in_the_family : public AchievementCriteriaScript
|
||||
{
|
||||
public:
|
||||
achievement_keeping_it_in_the_family() : AchievementCriteriaScript("achievement_keeping_it_in_the_family") { }
|
||||
|
||||
bool OnCheck(Player* /*source*/, Unit* target) override
|
||||
{
|
||||
InstanceScript* instance = target->GetInstanceScript();
|
||||
if (!instance)
|
||||
return false;
|
||||
|
||||
return instance->GetData(DATA_NEFARIAN_ACHIEVEMENT_STATE);
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_nefarians_end()
|
||||
{
|
||||
RegisterBlackwingDescentCreatureAI(boss_nefarians_end);
|
||||
@@ -2098,5 +2084,4 @@ void AddSC_boss_nefarians_end()
|
||||
RegisterSpellScript(spell_nefarians_end_siphon_power);
|
||||
RegisterSpellScript(spell_nefarians_end_explosive_cinders);
|
||||
RegisterGameObjectAI(go_nefarians_end_orb_of_culmination);
|
||||
new achievement_keeping_it_in_the_family();
|
||||
}
|
||||
-13
@@ -131,7 +131,6 @@ class instance_blackwing_descent : public InstanceMapScript
|
||||
_deadDwarfSpiritsLeft = 0;
|
||||
_deadDwarfSpiritsRight = 0;
|
||||
_atramedesIntroState = NOT_STARTED;
|
||||
_nefarianAchievementEligible = true;
|
||||
_nefariansEndIntroDone = false;
|
||||
}
|
||||
|
||||
@@ -360,10 +359,6 @@ class instance_blackwing_descent : public InstanceMapScript
|
||||
nefarius->AI()->SetData(DATA_HEROES_ENTERED_HALLS, DONE);
|
||||
break;
|
||||
}
|
||||
case DATA_NEFARIAN_ACHIEVEMENT_STATE:
|
||||
_nefarianAchievementEligible = uint8(data);
|
||||
DoUpdateWorldState(WS_KEEPING_IT_IN_THE_FAMILY, uint8(_nefarianAchievementEligible));
|
||||
break;
|
||||
case DATA_NEFARIANS_END_INTRO_DONE:
|
||||
_nefariansEndIntroDone = uint8(data);
|
||||
break;
|
||||
@@ -375,19 +370,12 @@ class instance_blackwing_descent : public InstanceMapScript
|
||||
}
|
||||
}
|
||||
|
||||
void FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& data) override
|
||||
{
|
||||
data.Worldstates.emplace_back(uint32(WS_KEEPING_IT_IN_THE_FAMILY), uint32(_nefarianAchievementEligible));
|
||||
}
|
||||
|
||||
uint32 GetData(uint32 type) const override
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case DATA_ATRAMEDES_INTRO:
|
||||
return _atramedesIntroState;
|
||||
case DATA_NEFARIAN_ACHIEVEMENT_STATE:
|
||||
return uint8(_nefarianAchievementEligible);
|
||||
case DATA_NEFARIANS_END_INTRO_DONE:
|
||||
return uint8(_nefariansEndIntroDone);
|
||||
}
|
||||
@@ -528,7 +516,6 @@ class instance_blackwing_descent : public InstanceMapScript
|
||||
uint8 _deadDwarfSpiritsLeft;
|
||||
uint8 _deadDwarfSpiritsRight;
|
||||
uint8 _atramedesIntroState;
|
||||
bool _nefarianAchievementEligible;
|
||||
bool _nefariansEndIntroDone;
|
||||
|
||||
bool IsNefarianAvailable() const
|
||||
|
||||
Reference in new issue
Block a user