fix(Core/CreatureScript): Grand Warlock Nethekurse (#2507)

This commit is contained in:
Stoabrogga
2019-12-25 09:33:44 +01:00
committed by GitHub
parent bcf1894356
commit 03c791e127
2 changed files with 75 additions and 17 deletions

View File

@@ -0,0 +1,14 @@
INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1576450864355101200');
DELETE FROM `smart_scripts` WHERE `entryorguid` = 17083 AND `source_type` = 0;
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`, `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
(17083,0,0,0,0,0,100,0,1500,3000,10000,15000,0,11,30478,0,0,0,0,0,2,0,0,0,0,0,0,0,0,'Fel Orc Convert - In Combat - Cast Hemorrhage'),
(17083,0,1,2,4,0,100,0,0,0,0,0,0,64,1,0,0,0,0,0,11,16807,50,0,0,0,0,0,0,'Fel Orc Convert - On Aggro - Store Target'),
(17083,0,2,0,61,0,100,0,0,0,0,0,0,45,1,1,0,0,0,0,12,1,0,0,0,0,0,0,0,'Fel Orc Convert - Linked - Set Data'),
(17083,0,3,0,6,0,100,0,0,0,0,0,0,45,1,2,0,0,0,0,12,1,0,0,0,0,0,0,0,'Fel Orc Convert - On Death - Set Data');
DELETE FROM `spell_script_names` WHERE `spell_id` = 30505;
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`)
VALUES
(30505, 'spell_tsh_shadow_bolt');

View File

@@ -115,10 +115,7 @@ class boss_grand_warlock_nethekurse : public CreatureScript
if (me->Attack(who, true))
{
if (me->HealthBelowPct(21))
DoStartNoMovement(who);
else
DoStartMovement(who);
DoStartMovement(who);
}
}
@@ -131,16 +128,25 @@ class boss_grand_warlock_nethekurse : public CreatureScript
void MoveInLineOfSight(Unit* who)
{
if (EventStage == EVENT_STAGE_NONE && me->IsWithinDistInMap(who, 30.0f))
if (me->IsWithinDistInMap(who, 30.0f))
{
if (who->GetTypeId() != TYPEID_PLAYER)
return;
events2.ScheduleEvent(EVENT_INTRO, 90000);
Talk(SAY_INTRO);
EventStage = EVENT_STAGE_INTRO;
instance->SetBossState(DATA_NETHEKURSE, IN_PROGRESS);
me->SetInCombatWithZone();
if (EventStage == EVENT_STAGE_NONE && PeonKilledCount < 4)
{
events2.ScheduleEvent(EVENT_INTRO, 90000);
Talk(SAY_INTRO);
EventStage = EVENT_STAGE_INTRO;
instance->SetBossState(DATA_NETHEKURSE, IN_PROGRESS);
me->SetInCombatWithZone();
}
else if (PeonKilledCount >= 4)
{
events2.ScheduleEvent(EVENT_START_ATTACK, 1000);
instance->SetBossState(DATA_NETHEKURSE, IN_PROGRESS);
me->SetInCombatWithZone();
}
}
if (EventStage < EVENT_STAGE_MAIN)
@@ -198,12 +204,12 @@ class boss_grand_warlock_nethekurse : public CreatureScript
case EVENT_SPELL_SHADOW_FISSURE:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
me->CastSpell(target, SPELL_SHADOW_FISSURE, false);
events.RescheduleEvent(eventId, urand(7500, 10000));
events.RescheduleEvent(EVENT_SPELL_SHADOW_FISSURE, urand(7500, 10000));
break;
case EVENT_SPELL_DEATH_COIL:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
me->CastSpell(target, DUNGEON_MODE(SPELL_DEATH_COIL_N, SPELL_DEATH_COIL_H), false);
events.RescheduleEvent(eventId, urand(15000, 20000));
events.RescheduleEvent(EVENT_SPELL_DEATH_COIL, urand(15000, 20000));
break;
case EVENT_SPELL_CLEAVE:
me->CastSpell(me->GetVictim(), DUNGEON_MODE(SPELL_SHADOW_CLEAVE_N, SPELL_SHADOW_SLAM_H), false);
@@ -212,13 +218,13 @@ class boss_grand_warlock_nethekurse : public CreatureScript
case EVENT_CHECK_HEALTH:
if (me->HealthBelowPct(21))
{
me->CastSpell(me, SPELL_DARK_SPIN, true);
events.Reset();
events.ScheduleEvent(EVENT_SPELL_CLEAVE, 3000);
me->GetMotionMaster()->Clear();
break;
me->CastSpell(me, SPELL_DARK_SPIN, false);
}
else
{
events.RescheduleEvent(EVENT_CHECK_HEALTH, 1000);
}
events.RescheduleEvent(eventId, 1000);
break;
}
@@ -264,8 +270,46 @@ class spell_tsh_shadow_sear : public SpellScriptLoader
}
};
class spell_tsh_shadow_bolt : public SpellScriptLoader
{
public:
spell_tsh_shadow_bolt() : SpellScriptLoader("spell_tsh_shadow_bolt") { }
class spell_tsh_shadow_bolt_SpellScript : public SpellScript
{
PrepareSpellScript(spell_tsh_shadow_bolt_SpellScript);
void SelectRandomPlayer(WorldObject*& target)
{
if (Creature* caster = GetCaster()->ToCreature())
{
std::list<Player*> playerList;
Map::PlayerList const &players = caster->GetMap()->GetPlayers();
for (auto itr = players.begin(); itr != players.end(); ++itr)
if (Player* player = itr->GetSource()->ToPlayer())
if (player->IsWithinDist(caster, 100.0f) && player->IsAlive())
playerList.push_back(player);
if (!playerList.empty())
target = acore::Containers::SelectRandomContainerElement(playerList);
}
}
void Register()
{
OnObjectTargetSelect += SpellObjectTargetSelectFn(spell_tsh_shadow_bolt_SpellScript::SelectRandomPlayer, EFFECT_0, TARGET_UNIT_TARGET_ENEMY);
}
};
SpellScript* GetSpellScript() const
{
return new spell_tsh_shadow_bolt_SpellScript();
}
};
void AddSC_boss_grand_warlock_nethekurse()
{
new boss_grand_warlock_nethekurse();
new spell_tsh_shadow_sear();
new spell_tsh_shadow_bolt();
}