mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-02-09 03:18:57 +01:00
Scripts/HoO: converted achievements to world state handling
This commit is contained in:
9
sql/updates/world/4.3.4/2021_06_13_05_world.sql
Normal file
9
sql/updates/world/4.3.4/2021_06_13_05_world.sql
Normal 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...');
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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 };
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user