mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/Scripts Update boss Skadi the Ruthless (#19114)
This commit is contained in:
54
sql/updates/world/3.3.5/2017_02_12_00_world.sql
Normal file
54
sql/updates/world/3.3.5/2017_02_12_00_world.sql
Normal file
@@ -0,0 +1,54 @@
|
||||
SET @PATH := 2689300;
|
||||
|
||||
DELETE FROM `waypoint_data` WHERE `id` IN(@PATH, @PATH+1, @PATH+2);
|
||||
DELETE FROM `script_spline_chain_meta` WHERE `entry`=26893;
|
||||
INSERT INTO `script_spline_chain_meta` (`entry`,`chainId`,`splineId`,`expectedDuration`,`msUntilNext`) VALUES
|
||||
(26893, 1, 0, 15064, 0),
|
||||
(26893, 2, 0, 3397, 0),
|
||||
(26893, 3, 0, 4472, 0),
|
||||
(26893, 4, 0, 23930, 0),
|
||||
(26893, 5, 0, 24026, 0);
|
||||
|
||||
DELETE FROM `script_spline_chain_waypoints` WHERE `entry`=26893;
|
||||
INSERT INTO `script_spline_chain_waypoints` (`entry`,`chainId`,`splineId`,`wpId`,`x`,`y`,`z`) VALUES
|
||||
(26893, 1, 0, 0, 341.74110, -516.95450, 104.66950), -- INITIAL
|
||||
(26893, 1, 0, 1, 310.21650, -510.53020, 120.54870),
|
||||
(26893, 1, 0, 2, 300.86850, -520.32490, 133.36640),
|
||||
(26893, 1, 0, 3, 298.34470, -529.48180, 137.28310),
|
||||
(26893, 1, 0, 4, 309.09590, -540.31950, 134.97740),
|
||||
(26893, 1, 0, 5, 323.64150, -547.97150, 130.31060),
|
||||
(26893, 1, 0, 6, 357.07800, -549.15970, 116.31050),
|
||||
(26893, 1, 0, 7, 401.25730, -550.27680, 114.92160),
|
||||
(26893, 1, 0, 8, 464.50620, -555.94420, 114.44940),
|
||||
(26893, 1, 0, 9, 496.19200, -556.96280, 114.86610),
|
||||
(26893, 1, 0, 10, 523.20110, -548.99160, 114.86610),
|
||||
(26893, 2, 0, 0, 520.48270, -541.56330, 119.84160), -- BREACH RIGHT
|
||||
(26893, 2, 0, 1, 496.43400, -517.57800, 120.00000),
|
||||
(26893, 3, 0, 0, 520.48270, -541.56330, 119.84160), -- BREACH LEFT
|
||||
(26893, 3, 0, 1, 500.24300, -501.69300, 120.00000),
|
||||
(26893, 4, 0, 0, 496.43400, -517.57800, 120.00000), -- RIGHT
|
||||
(26893, 4, 0, 1, 453.12420, -517.17000, 120.02730),
|
||||
(26893, 4, 0, 2, 388.33120, -514.37680, 121.11930),
|
||||
(26893, 4, 0, 3, 340.27520, -512.09260, 122.31380),
|
||||
(26893, 4, 0, 4, 313.07560, -509.13800, 125.17500),
|
||||
(26893, 4, 0, 5, 296.69640, -522.67050, 133.70260),
|
||||
(26893, 4, 0, 6, 301.29570, -549.45830, 137.42490),
|
||||
(26893, 4, 0, 7, 335.07460, -552.12110, 119.84160),
|
||||
(26893, 4, 0, 8, 397.62370, -553.92030, 119.84160),
|
||||
(26893, 4, 0, 9, 459.63210, -558.00780, 119.84160),
|
||||
(26893, 4, 0, 10, 505.54580, -568.78150, 119.84160),
|
||||
(26893, 4, 0, 11, 518.09900, -560.84990, 119.84160),
|
||||
(26893, 4, 0, 12, 520.48270, -541.56330, 119.84160),
|
||||
(26893, 5, 0, 0, 500.24300, -501.69300, 120.00000), -- LEFT
|
||||
(26893, 5, 0, 1, 451.98240, -509.25080, 120.02730),
|
||||
(26893, 5, 0, 2, 399.26070, -510.07190, 121.11930),
|
||||
(26893, 5, 0, 3, 350.60990, -508.39010, 122.31380),
|
||||
(26893, 5, 0, 4, 325.82170, -506.77690, 125.17500),
|
||||
(26893, 5, 0, 5, 301.29410, -516.67060, 133.70260),
|
||||
(26893, 5, 0, 6, 301.29570, -549.45830, 137.42490),
|
||||
(26893, 5, 0, 7, 335.07460, -552.12110, 119.84160),
|
||||
(26893, 5, 0, 8, 397.62370, -553.92030, 119.84160),
|
||||
(26893, 5, 0, 9, 459.63210, -558.00780, 119.84160),
|
||||
(26893, 5, 0, 10, 505.54580, -568.78150, 119.84160),
|
||||
(26893, 5, 0, 11, 518.09900, -560.84990, 119.84160),
|
||||
(26893, 5, 0, 12, 520.48270, -541.56330, 119.84160);
|
||||
@@ -34,12 +34,10 @@ enum Spells
|
||||
SPELL_SKADI_TELEPORT = 61790,
|
||||
SPELL_LAUNCH_HARPOON = 48642,
|
||||
SPELL_SUMMON_GAUNLET_MOBS_PERIODIC = 59275,
|
||||
SPELL_FREEZING_CLOUD = 47579,
|
||||
SPELL_RIDE_GRAUF = 61791,
|
||||
SPELL_FREEZING_CLOUD = 47579,
|
||||
SPELL_FREEZING_CLOUD_RIGHT_PERIODIC = 47592,
|
||||
SPELL_FREEZING_CLOUD_LEFT_PERIODIC = 47590,
|
||||
SPELL_FREEZING_CLOUD_RIGHT = 47593,
|
||||
SPELL_FREEZING_CLOUD_LEFT = 47563,
|
||||
SPELL_FREEZING_CLOUD_RIGHT_AREA = 47594,
|
||||
SPELL_FREEZING_CLOUD_LEFT_AREA = 47574,
|
||||
SPELL_SUMMON_YMIRJAR_WARRIOR_W = 48631,
|
||||
@@ -60,64 +58,66 @@ enum Spells
|
||||
SPELL_SUMMON_HARPOON = 56789,
|
||||
};
|
||||
|
||||
enum Yells
|
||||
enum Texts
|
||||
{
|
||||
SAY_AGGRO = 0,
|
||||
SAY_KILL = 1,
|
||||
SAY_DEATH = 3,
|
||||
SAY_DRAKE_DEATH = 5,
|
||||
SAY_DRAKE_BREATH = 6
|
||||
};
|
||||
|
||||
enum Emotes
|
||||
{
|
||||
EMOTE_BREATH = 0,
|
||||
EMOTE_ON_RANGE
|
||||
};
|
||||
|
||||
enum Data
|
||||
{
|
||||
|
||||
DATA_LOVE_TO_SKADI = 0,
|
||||
FIRST_WAVE_MAX_WARRIORS = 10,
|
||||
FIRST_WAVE_SIZE = 13,
|
||||
GRAUF_PATH_INITIAL = 2689300,
|
||||
GRAUF_PATH_RIGHT = 2689301,
|
||||
GRAUF_PATH_LEFT = 2689302,
|
||||
ACHIEV_LODI_DODI_WE_LOVES_THE_SKADI = 17726,
|
||||
SAY_AGGRO = 0,
|
||||
SAY_KILL = 1,
|
||||
SAY_DEATH = 3,
|
||||
SAY_DRAKE_DEATH = 5,
|
||||
SAY_DRAKE_BREATH = 6,
|
||||
EMOTE_BREATH = 0,
|
||||
EMOTE_ON_RANGE = 1
|
||||
};
|
||||
|
||||
enum Points
|
||||
{
|
||||
POINT_0 = 0,
|
||||
POINT_1 = 1,
|
||||
POINT_9 = 9,
|
||||
POINT_11 = 11,
|
||||
POINT_LEFT = 21,
|
||||
POINT_RIGHT = 22
|
||||
POINT_0 = 0,
|
||||
POINT_1 = 1,
|
||||
POINT_2 = 2,
|
||||
POINT_BREACH = 0,
|
||||
POINT_LEFT = 1,
|
||||
POINT_RIGHT = 2
|
||||
};
|
||||
|
||||
enum SplineChainIds
|
||||
{
|
||||
SPLINE_CHAIN_INITIAL = 1,
|
||||
SPLINE_CHAIN_BREACH_RIGHT = 2,
|
||||
SPLINE_CHAIN_BREACH_LEFT = 3,
|
||||
SPLINE_CHAIN_RIGHT = 4,
|
||||
SPLINE_CHAIN_LEFT = 5
|
||||
};
|
||||
|
||||
enum Actions
|
||||
{
|
||||
ACTION_START_ENCOUNTER = 0,
|
||||
ACTION_FLAME,
|
||||
ACTION_START_ENCOUNTER = 0,
|
||||
ACTION_DRAKE_BREATH,
|
||||
ACTION_GAUNTLET_END,
|
||||
ACTION_HARPOON_HIT,
|
||||
};
|
||||
|
||||
enum CombatPhase
|
||||
{
|
||||
PHASE_FLYING = 0,
|
||||
PHASE_FLYING = 0,
|
||||
PHASE_GROUND
|
||||
};
|
||||
|
||||
Position const BreachPoint = { 0.0f, 0.0f, 0.0f, 2.670354f };
|
||||
enum MiscData
|
||||
{
|
||||
|
||||
DATA_LOVE_TO_SKADI = 0,
|
||||
FIRST_WAVE_MAX_WARRIORS = 10,
|
||||
FIRST_WAVE_SIZE = 13,
|
||||
ACHIEV_LODI_DODI_WE_LOVES_THE_SKADI = 17726,
|
||||
};
|
||||
|
||||
float const BreachPoint = 2.670354f;
|
||||
float const BreathPointRight = 3.124139f;
|
||||
float const BreathPointLeft = 3.228859f;
|
||||
Position const SecondaryWavesInitialPoint = { 478.7434f, -505.5758f, 104.7237f };
|
||||
Position const SecondaryWavesFinalPoint = { 318.177f, -503.8898f, 104.5326f };
|
||||
Position const SpawnLoc = { 477.5808f, -484.5591f, 104.8221f, 4.677482f };
|
||||
Position const GraufLoc = { 341.7411f, -516.9545f, 104.6695f, 3.124139f };
|
||||
Position const BreathPointRight = { 496.434f, -517.578f, 120.0f, 3.124139f };
|
||||
Position const BreathPointLeft = { 500.243f, -501.693f, 120.0f, 3.228859f };
|
||||
Position const FirstWaveLocations[FIRST_WAVE_SIZE] =
|
||||
{
|
||||
{ 458.5323f, -516.2537f, 104.617f },
|
||||
@@ -150,8 +150,8 @@ public:
|
||||
void Initialize()
|
||||
{
|
||||
firstWaveSummoned = false;
|
||||
harpoonHit = 0;
|
||||
loveSkadi = 0;
|
||||
_harpoonHit = 0;
|
||||
_loveSkadi = 0;
|
||||
_phase = PHASE_GROUND;
|
||||
scheduler.SetValidator([this]
|
||||
{
|
||||
@@ -252,9 +252,9 @@ public:
|
||||
if (Creature* combatTrigger = me->SummonCreature(NPC_COMBAT_TRIGGER, SpawnLoc))
|
||||
combatTrigger->AI()->DoZoneInCombat();
|
||||
break;
|
||||
case ACTION_FLAME:
|
||||
if (loveSkadi == 1)
|
||||
loveSkadi++;
|
||||
case ACTION_DRAKE_BREATH:
|
||||
if (_loveSkadi == 1)
|
||||
_loveSkadi++;
|
||||
Talk(SAY_DRAKE_BREATH);
|
||||
break;
|
||||
case ACTION_GAUNTLET_END:
|
||||
@@ -285,9 +285,9 @@ public:
|
||||
});
|
||||
break;
|
||||
case ACTION_HARPOON_HIT:
|
||||
harpoonHit++;
|
||||
if (harpoonHit == 1)
|
||||
loveSkadi = 1;
|
||||
_harpoonHit++;
|
||||
if (_harpoonHit == 1)
|
||||
_loveSkadi = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -295,7 +295,7 @@ public:
|
||||
uint32 GetData(uint32 id) const override
|
||||
{
|
||||
if (id == DATA_LOVE_TO_SKADI)
|
||||
return loveSkadi;
|
||||
return _loveSkadi;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -315,8 +315,8 @@ public:
|
||||
|
||||
private:
|
||||
CombatPhase _phase;
|
||||
uint8 harpoonHit;
|
||||
uint8 loveSkadi;
|
||||
uint8 _harpoonHit;
|
||||
uint8 _loveSkadi;
|
||||
bool firstWaveSummoned;
|
||||
};
|
||||
|
||||
@@ -333,16 +333,13 @@ public:
|
||||
|
||||
struct npc_graufAI : public ScriptedAI
|
||||
{
|
||||
npc_graufAI(Creature* creature) : ScriptedAI(creature)
|
||||
{
|
||||
_isFirstFly = true;
|
||||
_instance = me->GetInstanceScript();
|
||||
}
|
||||
npc_graufAI(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { }
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
me->setRegeneratingHealth(false);
|
||||
me->SetSpeedRate(MOVE_RUN, 2.5f);
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
@@ -350,7 +347,7 @@ public:
|
||||
if (Creature* skadi = _instance->GetCreature(DATA_SKADI_THE_RUTHLESS))
|
||||
skadi->AI()->DoAction(ACTION_GAUNTLET_END);
|
||||
|
||||
me->DespawnOrUnsummon(6000);
|
||||
me->DespawnOrUnsummon(Seconds(6));
|
||||
}
|
||||
|
||||
void PassengerBoarded(Unit* who, int8 /*seatId*/, bool apply) override
|
||||
@@ -370,50 +367,45 @@ public:
|
||||
|
||||
_scheduler.Schedule(Seconds(2), [this](TaskContext /*context*/)
|
||||
{
|
||||
me->GetMotionMaster()->MovePath(GRAUF_PATH_INITIAL, false);
|
||||
me->GetMotionMaster()->MoveAlongSplineChain(POINT_BREACH, SPLINE_CHAIN_INITIAL, false);
|
||||
});
|
||||
}
|
||||
|
||||
void MovementInform(uint32 type, uint32 pointId) override
|
||||
{
|
||||
if (type != POINT_MOTION_TYPE && type != WAYPOINT_MOTION_TYPE)
|
||||
if (type != SPLINE_CHAIN_MOTION_TYPE)
|
||||
return;
|
||||
|
||||
switch (pointId)
|
||||
{
|
||||
case POINT_9:
|
||||
if (!_isFirstFly)
|
||||
break;
|
||||
_isFirstFly = false;
|
||||
// no break
|
||||
case POINT_11:
|
||||
case POINT_BREACH:
|
||||
_scheduler
|
||||
.Schedule(Milliseconds(1), [this](TaskContext /*context*/)
|
||||
{
|
||||
me->SetFacingTo(BreachPoint.GetOrientation());
|
||||
me->SetFacingTo(BreachPoint);
|
||||
Talk(EMOTE_ON_RANGE);
|
||||
})
|
||||
.Schedule(Seconds(10), [this](TaskContext /*context*/)
|
||||
{
|
||||
if (RAND(POINT_LEFT,POINT_RIGHT) == POINT_LEFT)
|
||||
me->GetMotionMaster()->MovePoint(POINT_LEFT, BreathPointLeft);
|
||||
if (RAND(POINT_LEFT, POINT_RIGHT) == POINT_LEFT)
|
||||
me->GetMotionMaster()->MoveAlongSplineChain(POINT_LEFT, SPLINE_CHAIN_BREACH_LEFT, false);
|
||||
else
|
||||
me->GetMotionMaster()->MovePoint(POINT_RIGHT, BreathPointRight);
|
||||
me->GetMotionMaster()->MoveAlongSplineChain(POINT_RIGHT, SPLINE_CHAIN_BREACH_RIGHT, false);
|
||||
});
|
||||
break;
|
||||
case POINT_LEFT:
|
||||
_scheduler
|
||||
.Schedule(Milliseconds(1), [this](TaskContext /*context*/)
|
||||
{
|
||||
me->SetFacingTo(BreathPointLeft.GetOrientation());
|
||||
me->SetFacingTo(BreathPointLeft);
|
||||
Talk(EMOTE_BREATH);
|
||||
})
|
||||
.Schedule(Seconds(2), [this](TaskContext /*context*/)
|
||||
{
|
||||
me->GetMotionMaster()->MovePath(GRAUF_PATH_LEFT, false);
|
||||
me->GetMotionMaster()->MoveAlongSplineChain(POINT_BREACH, SPLINE_CHAIN_LEFT, false);
|
||||
DoCast(SPELL_FREEZING_CLOUD_LEFT_PERIODIC);
|
||||
if (Creature* skadi = _instance->GetCreature(DATA_SKADI_THE_RUTHLESS))
|
||||
skadi->AI()->DoAction(ACTION_FLAME);
|
||||
skadi->AI()->DoAction(ACTION_DRAKE_BREATH);
|
||||
})
|
||||
.Schedule(Seconds(10), [this](TaskContext /*context*/)
|
||||
{
|
||||
@@ -424,23 +416,23 @@ public:
|
||||
_scheduler
|
||||
.Schedule(Milliseconds(1), [this](TaskContext /*context*/)
|
||||
{
|
||||
me->SetFacingTo(BreathPointRight.GetOrientation());
|
||||
me->SetFacingTo(BreathPointRight);
|
||||
Talk(EMOTE_BREATH);
|
||||
})
|
||||
.Schedule(Seconds(2), [this](TaskContext /*context*/)
|
||||
{
|
||||
me->GetMotionMaster()->MovePath(GRAUF_PATH_RIGHT, false);
|
||||
me->GetMotionMaster()->MoveAlongSplineChain(POINT_BREACH, SPLINE_CHAIN_RIGHT, false);
|
||||
DoCast(SPELL_FREEZING_CLOUD_RIGHT_PERIODIC);
|
||||
if (Creature* skadi = _instance->GetCreature(DATA_SKADI_THE_RUTHLESS))
|
||||
skadi->AI()->DoAction(ACTION_FLAME);
|
||||
skadi->AI()->DoAction(ACTION_DRAKE_BREATH);
|
||||
})
|
||||
.Schedule(Seconds(10), [this](TaskContext /*context*/)
|
||||
{
|
||||
me->RemoveAurasDueToSpell(SPELL_FREEZING_CLOUD_RIGHT_PERIODIC);
|
||||
});
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -459,7 +451,6 @@ public:
|
||||
private:
|
||||
TaskScheduler _scheduler;
|
||||
InstanceScript* _instance;
|
||||
bool _isFirstFly;
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const override
|
||||
@@ -505,11 +496,11 @@ struct npc_skadi_trashAI : public ScriptedAI
|
||||
case POINT_1:
|
||||
_scheduler.Schedule(Seconds(1), [this](TaskContext /*context*/)
|
||||
{
|
||||
me->GetMotionMaster()->MovePoint(POINT_9, SecondaryWavesFinalPoint);
|
||||
me->GetMotionMaster()->MovePoint(POINT_2, SecondaryWavesFinalPoint);
|
||||
});
|
||||
break;
|
||||
case POINT_9:
|
||||
DoZoneInCombat(me, 200);
|
||||
case POINT_2:
|
||||
DoZoneInCombat();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -634,80 +625,80 @@ public:
|
||||
|
||||
class spell_freezing_cloud_area_right : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_freezing_cloud_area_right() : SpellScriptLoader("spell_freezing_cloud_area_right") { }
|
||||
public:
|
||||
spell_freezing_cloud_area_right() : SpellScriptLoader("spell_freezing_cloud_area_right") { }
|
||||
|
||||
class spell_freezing_cloud_area_right_SpellScript : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_freezing_cloud_area_right_SpellScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spell*/) override
|
||||
class spell_freezing_cloud_area_right_SpellScript : public SpellScript
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_FREEZING_CLOUD))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
PrepareSpellScript(spell_freezing_cloud_area_right_SpellScript);
|
||||
|
||||
void FilterTargets(std::list<WorldObject*>& targets)
|
||||
bool Validate(SpellInfo const* /*spell*/) override
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_FREEZING_CLOUD))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void FilterTargets(std::list<WorldObject*>& targets)
|
||||
{
|
||||
targets.remove_if([](WorldObject* obj) { return obj->GetPositionY() > -511.0f; });
|
||||
}
|
||||
|
||||
void HandleScript(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
GetHitUnit()->CastSpell(GetHitUnit(), SPELL_FREEZING_CLOUD, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_freezing_cloud_area_right_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY);
|
||||
OnEffectHitTarget += SpellEffectFn(spell_freezing_cloud_area_right_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_APPLY_AURA);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const override
|
||||
{
|
||||
targets.remove_if([](WorldObject* obj) { return obj->GetPositionY() > -511.0f; });
|
||||
return new spell_freezing_cloud_area_right_SpellScript();
|
||||
}
|
||||
|
||||
void HandleScript(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
GetHitUnit()->CastSpell(GetHitUnit(), SPELL_FREEZING_CLOUD, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_freezing_cloud_area_right_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY);
|
||||
OnEffectHitTarget += SpellEffectFn(spell_freezing_cloud_area_right_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_APPLY_AURA);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const override
|
||||
{
|
||||
return new spell_freezing_cloud_area_right_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
class spell_freezing_cloud_area_left : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_freezing_cloud_area_left() : SpellScriptLoader("spell_freezing_cloud_area_left") { }
|
||||
public:
|
||||
spell_freezing_cloud_area_left() : SpellScriptLoader("spell_freezing_cloud_area_left") { }
|
||||
|
||||
class spell_freezing_cloud_area_left_SpellScript : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_freezing_cloud_area_left_SpellScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spell*/) override
|
||||
class spell_freezing_cloud_area_left_SpellScript : public SpellScript
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_FREEZING_CLOUD))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
PrepareSpellScript(spell_freezing_cloud_area_left_SpellScript);
|
||||
|
||||
void FilterTargets(std::list<WorldObject*>& targets)
|
||||
bool Validate(SpellInfo const* /*spell*/) override
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_FREEZING_CLOUD))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void FilterTargets(std::list<WorldObject*>& targets)
|
||||
{
|
||||
targets.remove_if([](WorldObject* obj) { return obj->GetPositionY() < -511.0f; });
|
||||
}
|
||||
|
||||
void HandleScript(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
GetHitUnit()->CastSpell(GetHitUnit(), SPELL_FREEZING_CLOUD, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_freezing_cloud_area_left_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY);
|
||||
OnEffectHitTarget += SpellEffectFn(spell_freezing_cloud_area_left_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_APPLY_AURA);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const override
|
||||
{
|
||||
targets.remove_if([](WorldObject* obj) { return obj->GetPositionY() < -511.0f; });
|
||||
return new spell_freezing_cloud_area_left_SpellScript();
|
||||
}
|
||||
|
||||
void HandleScript(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
GetHitUnit()->CastSpell(GetHitUnit(), SPELL_FREEZING_CLOUD, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_freezing_cloud_area_left_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY);
|
||||
OnEffectHitTarget += SpellEffectFn(spell_freezing_cloud_area_left_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_APPLY_AURA);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const override
|
||||
{
|
||||
return new spell_freezing_cloud_area_left_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
class spell_freezing_cloud_damage : public SpellScriptLoader
|
||||
@@ -920,20 +911,20 @@ class spell_summon_gauntlet_mobs_periodic : public SpellScriptLoader
|
||||
|
||||
class achievement_girl_love_to_skadi : public AchievementCriteriaScript
|
||||
{
|
||||
public:
|
||||
achievement_girl_love_to_skadi() : AchievementCriteriaScript("achievement_girl_love_to_skadi") { }
|
||||
public:
|
||||
achievement_girl_love_to_skadi() : AchievementCriteriaScript("achievement_girl_love_to_skadi") { }
|
||||
|
||||
bool OnCheck(Player* /*player*/, Unit* target) override
|
||||
{
|
||||
if (!target)
|
||||
return false;
|
||||
|
||||
if (Creature* skadi = target->ToCreature())
|
||||
if (skadi->AI()->GetData(DATA_LOVE_TO_SKADI) == 1)
|
||||
return true;
|
||||
|
||||
bool OnCheck(Player* /*player*/, Unit* target) override
|
||||
{
|
||||
if (!target)
|
||||
return false;
|
||||
|
||||
if (Creature* skadi = target->ToCreature())
|
||||
if (skadi->AI()->GetData(DATA_LOVE_TO_SKADI) == 1)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
class at_skadi_gaunlet : public AreaTriggerScript
|
||||
@@ -943,15 +934,16 @@ class at_skadi_gaunlet : public AreaTriggerScript
|
||||
|
||||
bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override
|
||||
{
|
||||
if (InstanceScript* instance = player->GetInstanceScript())
|
||||
{
|
||||
if (instance->GetBossState(DATA_SKADI_THE_RUTHLESS) == NOT_STARTED)
|
||||
if (Creature* skadi = instance->GetCreature(DATA_SKADI_THE_RUTHLESS))
|
||||
{
|
||||
skadi->AI()->DoAction(ACTION_START_ENCOUNTER);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
InstanceScript* instance = player->GetInstanceScript();
|
||||
if (!instance || player->IsGameMaster())
|
||||
return true;
|
||||
|
||||
if (instance->GetBossState(DATA_SKADI_THE_RUTHLESS) == NOT_STARTED)
|
||||
if (Creature* skadi = instance->GetCreature(DATA_SKADI_THE_RUTHLESS))
|
||||
{
|
||||
skadi->AI()->DoAction(ACTION_START_ENCOUNTER);
|
||||
return true;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user