mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-02-06 17:08:23 +01:00
Scripts/SFK: converted achievements to world state handling
This commit is contained in:
8
sql/updates/world/4.3.4/2021_06_14_00_world.sql
Normal file
8
sql/updates/world/4.3.4/2021_06_14_00_world.sql
Normal file
@@ -0,0 +1,8 @@
|
||||
DELETE FROM `achievement_criteria_data` WHERE `ScriptName` IN (
|
||||
'achievement_pardon_denied',
|
||||
'achievement_to_the_ground');
|
||||
|
||||
DELETE FROM `world_states` WHERE `ID` IN (5670, 5672);
|
||||
INSERT INTO `world_states` (`ID`, `DefaultValue`, `MapID`, `Comment`) VALUES
|
||||
(5670, 0, 33, 'Shadowfang Keep - Baron Ashbury - Pardon Denied'),
|
||||
(5672, 0, 33, 'Shadowfang Keep - Commander Srpingvale - To the Ground!');
|
||||
@@ -35,7 +35,8 @@ enum Spells
|
||||
SPELL_PAIN_AND_SUFFERING_DUMMY = 93605,
|
||||
SPELL_WRACKING_PAIN = 93720,
|
||||
SPELL_DARK_ARCHANGEL_FORM = 93757,
|
||||
SPELL_CALAMITY = 93812
|
||||
SPELL_CALAMITY = 93812,
|
||||
SPELL_STAY_OF_EXECUTION_HEAL = 93706
|
||||
};
|
||||
|
||||
#define SPELL_STAY_OF_EXECUTION RAID_MODE<uint32>(93468, 93705)
|
||||
@@ -62,11 +63,6 @@ enum Events
|
||||
EVENT_DARK_ARCHANGEL_FORM
|
||||
};
|
||||
|
||||
enum AchievementData
|
||||
{
|
||||
DATA_PARDON_DENIED = 1
|
||||
};
|
||||
|
||||
struct boss_baron_ashbury : public BossAI
|
||||
{
|
||||
boss_baron_ashbury(Creature* creature) : BossAI(creature, DATA_BARON_ASHBURY)
|
||||
@@ -77,7 +73,6 @@ struct boss_baron_ashbury : public BossAI
|
||||
void Initialize()
|
||||
{
|
||||
_phaseTwoTriggered = false;
|
||||
_pardonDenied = true;
|
||||
me->MakeInterruptable(false);
|
||||
}
|
||||
|
||||
@@ -91,7 +86,8 @@ struct boss_baron_ashbury : 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_PARDON_DENIED, 0);
|
||||
|
||||
events.ScheduleEvent(EVENT_ASPHYXIATE, IsHeroic() ? 20s + 500ms : 15s + 500ms);
|
||||
events.ScheduleEvent(EVENT_PAIN_AND_SUFFERING, 6s);
|
||||
@@ -114,6 +110,15 @@ struct boss_baron_ashbury : public BossAI
|
||||
_DespawnAtEvade();
|
||||
}
|
||||
|
||||
void HealReceived(Unit* healer, uint32& /*heal*/) override
|
||||
{
|
||||
if (healer != me)
|
||||
return;
|
||||
|
||||
if (!instance->instance->GetWorldStateValue(WORLD_STATE_ID_PARDON_DENIED))
|
||||
instance->instance->SetWorldState(WORLD_STATE_ID_PARDON_DENIED, 1);
|
||||
}
|
||||
|
||||
void DamageTaken(Unit* /*attacker*/, uint32& damage) override
|
||||
{
|
||||
if (me->HealthBelowPctDamaged(25, damage) && !_phaseTwoTriggered && IsHeroic())
|
||||
@@ -139,28 +144,12 @@ struct boss_baron_ashbury : public BossAI
|
||||
|
||||
if (spell->Id == SPELL_STAY_OF_EXECUTION)
|
||||
{
|
||||
// Failing achievement when Baron Ashbury finished channeling Stay of Execution
|
||||
if (reason == SPELL_FINISHED_CHANNELING_COMPLETE && IsHeroic())
|
||||
_pardonDenied = false;
|
||||
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
me->resetAttackTimer();
|
||||
events.ScheduleEvent(EVENT_PAIN_AND_SUFFERING, 500ms);
|
||||
}
|
||||
}
|
||||
|
||||
uint32 GetData(uint32 type) const override
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case DATA_PARDON_DENIED:
|
||||
return _pardonDenied;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
@@ -218,7 +207,6 @@ struct boss_baron_ashbury : public BossAI
|
||||
}
|
||||
private:
|
||||
bool _phaseTwoTriggered;
|
||||
bool _pardonDenied;
|
||||
};
|
||||
|
||||
class spell_ashbury_asphyxiate : public AuraScript
|
||||
@@ -300,28 +288,10 @@ class spell_ashbury_dark_archangel_form : public AuraScript
|
||||
}
|
||||
};
|
||||
|
||||
class achievement_pardon_denied : public AchievementCriteriaScript
|
||||
{
|
||||
public:
|
||||
achievement_pardon_denied() : AchievementCriteriaScript("achievement_pardon_denied") { }
|
||||
|
||||
bool OnCheck(Player* /*source*/, Unit* target)
|
||||
{
|
||||
if (!target)
|
||||
return false;
|
||||
|
||||
if (target->GetMap()->IsHeroic())
|
||||
return target->GetAI()->GetData(DATA_PARDON_DENIED);
|
||||
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_baron_ashbury()
|
||||
{
|
||||
RegisterShadowfangKeepCreatureAI(boss_baron_ashbury);
|
||||
RegisterSpellScript(spell_ashbury_asphyxiate);
|
||||
RegisterSpellScript(spell_ashbury_pain_and_suffering);
|
||||
RegisterSpellScript(spell_ashbury_dark_archangel_form);
|
||||
new achievement_pardon_denied();
|
||||
}
|
||||
|
||||
@@ -84,13 +84,7 @@ enum Events
|
||||
|
||||
enum Actions
|
||||
{
|
||||
ACTION_UNHOLY_POWER = 1,
|
||||
ACTION_TO_THE_GROUND
|
||||
};
|
||||
|
||||
enum AchievementData
|
||||
{
|
||||
DATA_TO_THE_GROUND = 1
|
||||
ACTION_UNHOLY_POWER = 1
|
||||
};
|
||||
|
||||
// Heroic additional adds
|
||||
@@ -116,7 +110,6 @@ public:
|
||||
void Reset() override
|
||||
{
|
||||
_Reset();
|
||||
_toTheGround = true;
|
||||
if (IsHeroic())
|
||||
{
|
||||
DoSummon(NPC_WAILING_GUARDSMAN, GuardsmanPos, 4000, TEMPSUMMON_CORPSE_TIMED_DESPAWN);
|
||||
@@ -185,18 +178,6 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
uint32 GetData(uint32 type) const override
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case DATA_TO_THE_GROUND:
|
||||
return _toTheGround;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void DoAction(int32 action) override
|
||||
{
|
||||
switch (action)
|
||||
@@ -219,9 +200,6 @@ public:
|
||||
else
|
||||
events.ScheduleEvent(EVENT_SHIELD_OF_THE_PERFIDIOUS, Seconds(1));
|
||||
break;
|
||||
case ACTION_TO_THE_GROUND:
|
||||
_toTheGround = false;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -276,10 +254,8 @@ public:
|
||||
}
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
private:
|
||||
bool _toTheGround;
|
||||
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature *creature) const override
|
||||
{
|
||||
return GetShadowfangKeepAI<boss_commander_springvaleAI>(creature);
|
||||
@@ -522,20 +498,19 @@ public:
|
||||
|
||||
void HandleStacks()
|
||||
{
|
||||
if (Unit* target = GetHitUnit())
|
||||
if (Creature* target = GetHitCreature())
|
||||
{
|
||||
Aura* aura = nullptr;
|
||||
aura = target->GetAura(SPELL_UNHOLY_POWER_HC);
|
||||
if (!aura)
|
||||
target->GetAura(SPELL_UNHOLY_POWER);
|
||||
|
||||
if (aura)
|
||||
if (aura->GetStackAmount() == 3)
|
||||
if (target->GetTypeId() == TYPEID_UNIT && target->IsAIEnabled)
|
||||
target->ToCreature()->AI()->DoAction(ACTION_UNHOLY_POWER);
|
||||
if (aura && aura->GetStackAmount() == 3 && target->IsAIEnabled)
|
||||
target->ToCreature()->AI()->DoAction(ACTION_UNHOLY_POWER);
|
||||
|
||||
if (target->GetTypeId() == TYPEID_UNIT && target->IsAIEnabled)
|
||||
target->ToCreature()->AI()->DoAction(ACTION_TO_THE_GROUND);
|
||||
if (InstanceScript* instance = target->GetInstanceScript())
|
||||
if (!instance->instance->GetWorldStateValue(WORLD_STATE_ID_TO_THE_GROUND))
|
||||
instance->instance->SetWorldState(WORLD_STATE_ID_TO_THE_GROUND, 1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -551,23 +526,6 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
class achievement_to_the_ground : public AchievementCriteriaScript
|
||||
{
|
||||
public:
|
||||
achievement_to_the_ground() : AchievementCriteriaScript("achievement_to_the_ground") { }
|
||||
|
||||
bool OnCheck(Player* /*source*/, Unit* target)
|
||||
{
|
||||
if (!target)
|
||||
return false;
|
||||
|
||||
if (target->GetMap()->IsHeroic())
|
||||
return target->GetAI()->GetData(DATA_TO_THE_GROUND);
|
||||
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_commander_springvale()
|
||||
{
|
||||
new boss_commander_springvale();
|
||||
@@ -576,5 +534,4 @@ void AddSC_boss_commander_springvale()
|
||||
new spell_sfk_forsaken_ability();
|
||||
new spell_sfk_unholy_power();
|
||||
new spell_sfk_unholy_empowerment();
|
||||
new achievement_to_the_ground();
|
||||
}
|
||||
|
||||
@@ -94,6 +94,15 @@ enum SKGameObjectIds
|
||||
GO_ARUGALS_LAIR = 18971
|
||||
};
|
||||
|
||||
enum SKWorldStates
|
||||
{
|
||||
// Baron Ashbury
|
||||
WORLD_STATE_ID_PARDON_DENIED = 5670,
|
||||
|
||||
// Commander Springvale
|
||||
WORLD_STATE_ID_TO_THE_GROUND = 5672
|
||||
};
|
||||
|
||||
template<class AI>
|
||||
AI* GetShadowfangKeepAI(Creature* creature)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user