mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-13 09:17:18 +00:00
refactor(Scripts/ZulAman): Move Spirit of the Lynx to SAI (#20498)
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
--
|
||||
UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = 24143;
|
||||
|
||||
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 24143) AND (`source_type` = 0) AND (`id` IN (0, 1, 2, 3));
|
||||
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
|
||||
(24143, 0, 0, 0, 0, 0, 100, 0, 30000, 50000, 30000, 50000, 0, 0, 11, 43290, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Spirit of the Lynx - In Combat - Cast \'Lynx Flurry\''),
|
||||
(24143, 0, 1, 0, 0, 0, 100, 0, 4000, 4000, 4000, 4000, 0, 0, 11, 43243, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Spirit of the Lynx - In Combat - Cast \'Shred Armor\''),
|
||||
(24143, 0, 2, 0, 25, 0, 100, 0, 0, 0, 0, 0, 0, 0, 42, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Spirit of the Lynx - On Reset - Set Invincibility Hp 1'),
|
||||
(24143, 0, 3, 0, 2, 0, 100, 0, 20, 20, 0, 0, 0, 0, 223, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 'Spirit of the Lynx - Between 20-20% Health - Do Action ID 0');
|
||||
@@ -74,6 +74,11 @@ enum Groups
|
||||
GROUP_MERGE = 2
|
||||
};
|
||||
|
||||
enum Actions
|
||||
{
|
||||
ACTION_MERGE = 0
|
||||
};
|
||||
|
||||
struct boss_halazzi : public BossAI
|
||||
{
|
||||
boss_halazzi(Creature* creature) : BossAI(creature, DATA_HALAZZI)
|
||||
@@ -118,33 +123,19 @@ struct boss_halazzi : public BossAI
|
||||
void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType /*damagetype*/, SpellSchoolMask /*damageSchoolMask*/) override
|
||||
{
|
||||
if (damage >= me->GetHealth() && _phase != PHASE_ENRAGE)
|
||||
{
|
||||
damage = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (_phase == PHASE_LYNX || _phase == PHASE_ENRAGE)
|
||||
{
|
||||
_healthCheckPercentage = 25 * (3 - _transformCount);
|
||||
if (!HealthAbovePct(_healthCheckPercentage))
|
||||
{
|
||||
EnterPhase(PHASE_SPLIT);
|
||||
}
|
||||
}
|
||||
else if (_phase == PHASE_HUMAN)
|
||||
{
|
||||
if (Creature* lynx = instance->GetCreature(DATA_SPIRIT_LYNX))
|
||||
{
|
||||
if (!HealthAbovePct(20) || !lynx->HealthAbovePct(20))
|
||||
{
|
||||
EnterPhase(PHASE_MERGE);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//should not really happen
|
||||
EnterEvadeMode();
|
||||
}
|
||||
if (!HealthAbovePct(20))
|
||||
EnterPhase(PHASE_MERGE);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -152,17 +143,13 @@ struct boss_halazzi : public BossAI
|
||||
void SpellHit(Unit*, SpellInfo const* spell) override
|
||||
{
|
||||
if (spell->Id == SPELL_TRANSFORM_SPLIT2)
|
||||
{
|
||||
EnterPhase(PHASE_HUMAN);
|
||||
}
|
||||
}
|
||||
|
||||
void AttackStart(Unit* who) override
|
||||
{
|
||||
if (_phase != PHASE_MERGE)
|
||||
{
|
||||
BossAI::AttackStart(who);
|
||||
}
|
||||
}
|
||||
|
||||
void EnterPhase(PhaseHalazzi nextPhase)
|
||||
@@ -175,7 +162,7 @@ struct boss_halazzi : public BossAI
|
||||
{
|
||||
DoCastSelf(SPELL_TRANSFORM_MERGE, true);
|
||||
me->RemoveAurasDueToSpell(SPELL_TRANSFORM_SPLIT2);
|
||||
me->GetMotionMaster()->MoveChase(me->GetVictim());
|
||||
me->ResumeChasingVictim();
|
||||
}
|
||||
summons.DespawnAll();
|
||||
me->SetMaxHealth(_lynxFormHealth);
|
||||
@@ -207,13 +194,9 @@ struct boss_halazzi : public BossAI
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
|
||||
{
|
||||
if (target->IsNonMeleeSpellCast(false))
|
||||
{
|
||||
DoCast(target, SPELL_EARTHSHOCK);
|
||||
}
|
||||
else
|
||||
{
|
||||
DoCast(target, SPELL_FLAMESHOCK);
|
||||
}
|
||||
}
|
||||
context.Repeat(10s, 15s);
|
||||
}).Schedule(12s, GROUP_HUMAN, [this](TaskContext context)
|
||||
@@ -236,19 +219,13 @@ struct boss_halazzi : public BossAI
|
||||
scheduler.Schedule(2s, GROUP_MERGE, [this](TaskContext context)
|
||||
{
|
||||
if (Creature* lynx = instance->GetCreature(DATA_SPIRIT_LYNX))
|
||||
{
|
||||
if (me->IsWithinDistInMap(lynx, 6.0f))
|
||||
{
|
||||
if (_transformCount < 3)
|
||||
{
|
||||
EnterPhase(PHASE_LYNX);
|
||||
}
|
||||
else
|
||||
{
|
||||
EnterPhase(PHASE_ENRAGE);
|
||||
}
|
||||
}
|
||||
}
|
||||
context.Repeat(2s);
|
||||
});
|
||||
}
|
||||
@@ -263,9 +240,13 @@ struct boss_halazzi : public BossAI
|
||||
{
|
||||
BossAI::KilledUnit(victim);
|
||||
if (victim->IsPlayer())
|
||||
{
|
||||
Talk(SAY_KILL);
|
||||
}
|
||||
}
|
||||
|
||||
void DoAction(int32 actionId) override
|
||||
{
|
||||
if (actionId == ACTION_MERGE)
|
||||
EnterPhase(PHASE_MERGE);
|
||||
}
|
||||
|
||||
void JustDied(Unit* killer) override
|
||||
@@ -281,60 +262,8 @@ private:
|
||||
uint32 _healthCheckPercentage;
|
||||
PhaseHalazzi _phase;
|
||||
};
|
||||
// Spirits Lynx AI
|
||||
struct npc_halazzi_lynx : public ScriptedAI
|
||||
{
|
||||
npc_halazzi_lynx(Creature* creature) : ScriptedAI(creature) { }
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
scheduler.CancelAll();
|
||||
}
|
||||
|
||||
void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType /*damagetype*/, SpellSchoolMask /*damageSchoolMask*/) override
|
||||
{
|
||||
if (damage >= me->GetHealth())
|
||||
{
|
||||
damage = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void AttackStart(Unit* who) override
|
||||
{
|
||||
if (!me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE))
|
||||
{
|
||||
ScriptedAI::AttackStart(who);
|
||||
}
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* who) override
|
||||
{
|
||||
ScriptedAI::JustEngagedWith(who);
|
||||
|
||||
ScheduleTimedEvent(30s, 50s, [&]
|
||||
{
|
||||
DoCastSelf(SPELL_LYNX_FRENZY);
|
||||
}, 30s, 50s);
|
||||
ScheduleTimedEvent(4s, [&]{
|
||||
DoCastVictim(SPELL_SHRED_ARMOR);
|
||||
}, 4s);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
scheduler.Update(diff);
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_halazzi()
|
||||
{
|
||||
RegisterZulAmanCreatureAI(boss_halazzi);
|
||||
RegisterZulAmanCreatureAI(npc_halazzi_lynx);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user