Scripts/HoO: converted achievements to world state handling

This commit is contained in:
Ovahlord
2021-06-13 23:22:05 +02:00
parent 1e9fd012e8
commit 5741d295dd
5 changed files with 34 additions and 67 deletions

View File

@@ -0,0 +1,9 @@
DELETE FROM `achievement_criteria_data` WHERE `ScriptName` IN
('achievement_sun_of_a',
'achievement_i_hate_that_song');
DELETE FROM `world_states` WHERE `ID` IN (5638, 5653, 5639);
INSERT INTO `world_states` (`ID`, `DefaultValue`, `MapID`, `Comment`) VALUES
(5638, 0, 644, 'Halls of Origination - Temple Guardian Anhuur - I Hate That Song'),
(5653, 0, 644, 'Halls of Origination - Vault of Lights - Faster Than The Speed Of Light'),
(5639, 0, 644, 'Halls of Origination - Rajh - Sun of a...');

View File

@@ -87,11 +87,6 @@ enum MovePoints
POINT_RAJH_CENTER
};
enum AchievementData
{
DATA_SUN_OF_A = 1
};
Position const RajhMiddlePos = { -318.5936f, 192.8621f, 343.9443f };
struct boss_rajh : public BossAI
@@ -104,7 +99,6 @@ struct boss_rajh : public BossAI
void Initialize()
{
_energized = true;
_achievementEnabled = true;
_randomTimerCase = 0;
}
@@ -120,6 +114,7 @@ struct boss_rajh : public BossAI
BossAI::JustEngagedWith(who);
Talk(SAY_AGGRO);
instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me);
instance->instance->SetWorldState(WORLD_STATE_ID_SUN_OF_A, 0);
me->SetReactState(REACT_AGGRESSIVE);
_randomTimerCase = RAND(0, 1);
events.ScheduleEvent(EVENT_SOLAR_WINDS, 5s);
@@ -155,14 +150,6 @@ struct boss_rajh : public BossAI
me->MakeInterruptable(false);
}
uint32 GetData(uint32 type) const override
{
if (type == DATA_SUN_OF_A)
return _achievementEnabled;
return 0;
}
void MovementInform(uint32 type, uint32 pointId) override
{
if (type != POINT_MOTION_TYPE)
@@ -193,7 +180,7 @@ struct boss_rajh : public BossAI
events.CancelEvent(EVENT_SUMMON_SUN_ORB);
events.CancelEvent(EVENT_SUN_STRIKE);
events.CancelEvent(EVENT_INFERNO_LEAP);
events.ScheduleEvent(EVENT_MOVE_TO_MIDDLE, Seconds(2));
events.ScheduleEvent(EVENT_MOVE_TO_MIDDLE, 2s);
_energized = false;
}
@@ -249,7 +236,8 @@ struct boss_rajh : public BossAI
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY_SPELL_OMNI);
break;
case EVENT_REENGAGE:
_achievementEnabled = false;
if (!instance->instance->GetWorldStateValue(WORLD_STATE_ID_SUN_OF_A))
instance->instance->SetWorldState(WORLD_STATE_ID_SUN_OF_A, 1);
_energized = true;
_randomTimerCase = RAND(0, 1);
events.ScheduleEvent(EVENT_SOLAR_WINDS, 5s);
@@ -276,7 +264,6 @@ struct boss_rajh : public BossAI
}
private:
bool _energized;
bool _achievementEnabled;
uint8 _randomTimerCase;
};
@@ -420,23 +407,6 @@ class spell_rajh_summon_sun_orb_power_cost : public AuraScript
}
};
class achievement_sun_of_a : public AchievementCriteriaScript
{
public:
achievement_sun_of_a() : AchievementCriteriaScript("achievement_sun_of_a") { }
bool OnCheck(Player* /*source*/, Unit* target)
{
if (!target)
return false;
if (target->GetMap()->IsHeroic())
return target->GetAI()->GetData(DATA_SUN_OF_A);
return false;
}
};
void AddSC_boss_rajh()
{
RegisterHallsOfOriginationCreatureAI(boss_rajh);
@@ -445,5 +415,4 @@ void AddSC_boss_rajh()
RegisterSpellScript(spell_rajh_summon_meteor);
RegisterSpellScript(spell_rajh_summon_sun_orb);
RegisterSpellScript(spell_rajh_summon_sun_orb_power_cost);
new achievement_sun_of_a();
}

View File

@@ -80,11 +80,6 @@ enum Actions
ACTION_HYMN_EXPIRED
};
enum Data
{
DATA_ACHIEVEMENT_ENLIGIBLE = 0
};
struct boss_temple_guardian_anhuur : public BossAI
{
boss_temple_guardian_anhuur(Creature* creature) : BossAI(creature, DATA_TEMPLE_GUARDIAN_ANHUUR)
@@ -97,7 +92,6 @@ struct boss_temple_guardian_anhuur : public BossAI
_countShield = 0;
_leftBeaconDisabled = false;
_rightBeaconDisabled = false;
_achievementEnligible = true;
}
void Reset() override
@@ -111,11 +105,11 @@ struct boss_temple_guardian_anhuur : public BossAI
{
BossAI::JustEngagedWith(who);
instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me);
instance->instance->SetWorldState(WORLD_STATE_ID_I_HATE_THAT_SONG, 0);
Talk(SAY_AGGRO);
events.SetPhase(PHASE_FIGHT);
events.ScheduleEvent(EVENT_DIVINE_RECKONING, 10s, 0, PHASE_FIGHT);
events.ScheduleEvent(EVENT_BURNING_LIGHT, 12s, 0, PHASE_FIGHT);
instance->DoUpdateWorldState(WS_I_HATE_THIS_SONG, 0);
}
void JustDied(Unit* /*killer*/) override
@@ -170,14 +164,6 @@ struct boss_temple_guardian_anhuur : public BossAI
EnterShieldPhase();
}
uint32 GetData(uint32 type) const override
{
if (type == DATA_ACHIEVEMENT_ENLIGIBLE)
return uint8(_achievementEnligible);
return 0;
}
void DoAction(int32 action) override
{
switch (action)
@@ -249,8 +235,7 @@ struct boss_temple_guardian_anhuur : public BossAI
instance->SetData(DATA_HANDLE_BEAM_OF_LIGHT, IN_PROGRESS);
break;
case EVENT_ACHIEVEMENT_FAILED:
instance->DoUpdateWorldState(WS_I_HATE_THIS_SONG, 1);
_achievementEnligible = false;
instance->instance->SetWorldState(WORLD_STATE_ID_I_HATE_THAT_SONG, 1);
break;
default:
break;
@@ -319,7 +304,6 @@ struct boss_temple_guardian_anhuur : public BossAI
uint8 _countShield;
bool _leftBeaconDisabled;
bool _rightBeaconDisabled;
bool _achievementEnligible;
};
struct go_anhuur_beacon_of_light : public GameObjectAI
@@ -437,17 +421,6 @@ class spell_anhuur_burning_light_forcecast : public SpellScript
}
};
class achievement_i_hate_that_song : public AchievementCriteriaScript
{
public:
achievement_i_hate_that_song() : AchievementCriteriaScript("achievement_i_hate_that_song") { }
bool OnCheck(Player* /*source*/, Unit* target)
{
return target && target->GetAI()->GetData(DATA_ACHIEVEMENT_ENLIGIBLE);
}
};
void AddSC_boss_temple_guardian_anhuur()
{
RegisterHallsOfOriginationCreatureAI(boss_temple_guardian_anhuur);
@@ -457,5 +430,4 @@ void AddSC_boss_temple_guardian_anhuur()
RegisterSpellScript(spell_anhuur_reverberating_hymn);
RegisterSpellScript(spell_anhuur_disable_beacon_beams);
RegisterSpellScript(spell_anhuur_burning_light_forcecast);
new achievement_i_hate_that_song();
}

View File

@@ -187,7 +187,6 @@ enum HOOGameObjects
enum Achievements
{
WS_I_HATE_THIS_SONG = 5638,
CRITERIA_STRAW_BROKE_CAMELS_BACK = 15989,
ACHIEV_VAULT_OF_LIGHTS_START_EVENT = 24212,
SPELL_VAULT_OF_LIGHTS_CREDIT = 94067 // Achievement aura, not in DBC
@@ -225,6 +224,18 @@ enum HoODataStates
DISABLE_SHIELD_OF_LIGHT
};
enum HoOWorldStates
{
// Temple Guardian Anhuur
WORLD_STATE_ID_I_HATE_THAT_SONG = 5638,
// Vault of Lights
WORLD_STATE_ID_FASTER_THAN_THE_SPEED_OF_LIGHT = 5653,
// Rajh
WORLD_STATE_ID_SUN_OF_A = 5639
};
Position const AnraphetSpawnPos = { -90.2726f, 366.339f, 89.8639f, 3.14159f };
Position const AnraphetRespawnPos = { -193.656f, 366.689f, 75.91001f, 3.138207f };

View File

@@ -81,7 +81,8 @@ enum Events
EVENT_ACTIVATE_LASER_BEAMS_2,
EVENT_ACTIVATE_LASER_BEAMS_3,
EVENT_ACTIVATE_LASER_BEAMS_4,
EVENT_OPEN_CONTROL_ROOM
EVENT_OPEN_CONTROL_ROOM,
EVENT_FAIL_VAULTS_OF_LIGHT_ACHIEVEMENT
};
constexpr uint8 const MAX_VAULT_OF_LIGHTS_WARDEN = 4;
@@ -303,11 +304,13 @@ class instance_halls_of_origination : public InstanceMapScript
door->SetGoState(GO_STATE_ACTIVE);
DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_VAULT_OF_LIGHTS_START_EVENT);
_events.ScheduleEvent(EVENT_FAIL_VAULTS_OF_LIGHT_ACHIEVEMENT, 5min);
}
else if (value == DONE)
{
DoUpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET2, SPELL_VAULT_OF_LIGHTS_CREDIT);
_events.ScheduleEvent(EVENT_OPEN_CONTROL_ROOM, 8s);
_events.CancelEvent(EVENT_FAIL_VAULTS_OF_LIGHT_ACHIEVEMENT);
SaveToDB();
}
break;
@@ -466,6 +469,9 @@ class instance_halls_of_origination : public InstanceMapScript
if (anraphet->IsAIEnabled)
anraphet->AI()->DoAction(ACTION_ANRAPHET_INTRO);
break;
case EVENT_FAIL_VAULTS_OF_LIGHT_ACHIEVEMENT:
instance->SetWorldState(WORLD_STATE_ID_FASTER_THAN_THE_SPEED_OF_LIGHT, 1);
break;
default:
break;
}