Scripts/Uldum: continue work on Uldum's intro event

This commit is contained in:
Ovahlord
2019-05-29 19:46:46 +02:00
parent f351eac0af
commit 2843f66b40
3 changed files with 317 additions and 145 deletions

View File

@@ -29,10 +29,70 @@
enum UldumIntro
{
SPELL_SUMMON_CAMERA_BUNNY = 86792,
SPELL_PING_ALL_ACTORS_00 = 86843
// Phase IDs
PHASE_ENTRANCE_TO_ULDUM = 298,
// Spells
SPELL_SUMMON_CAMERA_BUNNY = 86792,
SPELL_PING_ALL_ACTORS_00 = 86843,
SPELL_SUMMON_ADARRAH = 86751,
SPELL_SUMMON_CARAVAN = 86752,
SPELL_SUMMON_LADY_HUMPS = 86753,
SPELL_SUMMON_PACK_MULE = 86754,
SPELL_SUMMON_BUDDS_CAMEL = 86755,
SPELL_SUMMON_SAMIRS_CAMEL = 86756,
SPELL_SUMMON_MACKS_CAMEL = 86757,
SPELL_SUMMON_ADARRAHS_CAMEL = 86758,
SPELL_SUMMON_CLONED_IMAGE = 86782,
SPELL_SUMMON_BEAM_TARGET_BUNNY = 86942,
SPELL_SUMMON_BEAM_TARGET_BUNNY_02 = 86964
};
// 86748 - Intialize Uldum Intro
class spell_uldum_initialize_uldum_intro : public SpellScript
{
PrepareSpellScript(spell_uldum_initialize_uldum_intro);
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo(
{
SPELL_SUMMON_ADARRAH,
SPELL_SUMMON_CARAVAN,
SPELL_SUMMON_LADY_HUMPS,
SPELL_SUMMON_PACK_MULE,
SPELL_SUMMON_BUDDS_CAMEL,
SPELL_SUMMON_SAMIRS_CAMEL,
SPELL_SUMMON_MACKS_CAMEL,
SPELL_SUMMON_ADARRAHS_CAMEL,
SPELL_SUMMON_CLONED_IMAGE,
SPELL_SUMMON_BEAM_TARGET_BUNNY
});
}
void HandleScript(SpellEffIndex /*effIndex*/)
{
Unit* target = GetHitUnit();
PhasingHandler::AddPhase(target, PHASE_ENTRANCE_TO_ULDUM, true);
target->CastSpell(target, SPELL_SUMMON_ADARRAH, true);
target->CastSpell(target, SPELL_SUMMON_CARAVAN, true);
target->CastSpell(target, SPELL_SUMMON_LADY_HUMPS, true);
target->CastSpell(target, SPELL_SUMMON_PACK_MULE, true);
target->CastSpell(target, SPELL_SUMMON_BUDDS_CAMEL, true);
target->CastSpell(target, SPELL_SUMMON_SAMIRS_CAMEL, true);
target->CastSpell(target, SPELL_SUMMON_MACKS_CAMEL, true);
target->CastSpell(target, SPELL_SUMMON_ADARRAHS_CAMEL, true);
target->CastSpell(target, SPELL_SUMMON_CLONED_IMAGE, true);
target->CastSpell(target, SPELL_SUMMON_BEAM_TARGET_BUNNY, true);
}
void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_uldum_initialize_uldum_intro::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
// 86848 - Master Ping all Actors
class spell_uldum_master_ping_all_actors : public SpellScript
{
PrepareSpellScript(spell_uldum_master_ping_all_actors);
@@ -53,6 +113,28 @@ class spell_uldum_master_ping_all_actors : public SpellScript
}
};
// 86960 - Master Summon Beam Target 02
class spell_uldum_master_summon_beam_target_02 : public SpellScript
{
PrepareSpellScript(spell_uldum_master_summon_beam_target_02);
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo({ SPELL_SUMMON_BEAM_TARGET_BUNNY_02 });
}
void HandleScript(SpellEffIndex /*effIndex*/)
{
GetHitUnit()->CastSpell(GetHitUnit(), SPELL_SUMMON_BEAM_TARGET_BUNNY_02, true);
}
void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_uldum_master_summon_beam_target_02::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
// 95747 - Player Summon Camera
class spell_uldum_player_summon_camera : public SpellScript
{
PrepareSpellScript(spell_uldum_player_summon_camera);
@@ -75,29 +157,47 @@ class spell_uldum_player_summon_camera : public SpellScript
enum UldumCameraBunny
{
PHASE_DEFAULT = 169,
PHASE_ENTRANCE_TO_ULDUM = 298,
// Spells
SPELL_PING_CAMERA_00 = 86815,
SPELL_PING_CAMERA_01 = 86943,
SPELL_PING_CAMERA_02 = 86970,
SPELL_PING_BEAM_TARGET = 86944,
SPELL_INVISIBLE_BEAM = 86822,
SPELL_MASTER_PING_ALL_ACTORS = 86848,
SPELL_REVERSE_CAST_RIDE_VEHICLE = 82721,
SPELL_REVERSE_CAST_RIDE_SEAT_2 = 82315,
SPELL_REVERSE_CAST_RIDE_CAMERA_BUNNY_SEAT_3 = 84301,
SPELL_FADE_TO_BLACK = 88267,
SPELL_TELEPORT_CAMERA = 86952,
SPELL_MASTER_SUMMON_BEAM_TARGET_02 = 86960,
SPELL_PING_CAMERA_00 = 86815,
SPELL_PING_CAMERA_01 = 86943,
SPELL_PING_BEAM_TARGET = 86944,
SPELL_INVISIBLE_BEAM = 86822,
SPELL_MASTER_PING_ALL_ACTORS = 86848,
SPELL_REVERSE_CAST_RIDE_VEHICLE = 82721,
// Events
EVENT_MOVE_PATH_1 = 1,
EVENT_PING_BEAM_TARGET = 2,
EVENT_FADE_TO_BLACK_1 = 3,
EVENT_TELEPORT_CAMERA_1 = 4,
EVENT_TARGET_BEAM_BUNNY_2 = 5,
EVENT_MOVE_PATH_1 = 1,
EVENT_PING_BEAM_TARGET = 2,
// Move Points
POINT_NONE = 0,
POINT_NONE = 0,
// Spline Chains
SPLINE_CHAIN_ID_CAMERA_PATH_1 = 1, // Uldum Camera Bunny 04 - Move behind next to the caravan
SPLINE_CHAIN_ID_CAMERA_PATH_2 = 2, // Uldum Camera Bunny 04 - Move behind the caravan
SPLINE_CHAIN_ID_CAMERA_PATH_3 = 3, // Uldum Camera Bunny 04 - Move along the statue
SPLINE_CHAIN_ID_BEAM_TARGET_PATH_1 = 1, // Beam Target Bunny - Move up
SPLINE_CHAIN_ID_BEAM_TARGET_2_PATH_1 = 1, // Beam Target Bunny 02 - Move down
SPLINE_CHAIN_ID_CAMERA_PATH_1 = 1,
SPLINE_CHAIN_ID_CAMERA_PATH_2 = 2,
SPLINE_CHAIN_ID_BEAM_TARGET_PATH_1 = 1
// Ping Counter
PING_INDEX_PING_ALL_ACTORS = 1, // 2nd ping spell - master ping all actors, get caster into the vehicle, schedule movement
PING_INDEX_PING_BEAM_TARGET = 2 // 3rd ping spell - ping beam target in 3.6s
};
struct npc_uldum_camera_bunny_04 : public ScriptedAI
Position const TeleportGridPosition1 = { -8958.0f, -1658.0f };
struct npc_uldum_uldum_camera_bunny_04 : public ScriptedAI
{
npc_uldum_camera_bunny_04(Creature* creature) : ScriptedAI(creature)
npc_uldum_uldum_camera_bunny_04(Creature* creature) : ScriptedAI(creature)
{
Initialize();
}
@@ -107,12 +207,6 @@ struct npc_uldum_camera_bunny_04 : public ScriptedAI
_pingCount = 0;
}
void InitializeAI() override
{
PhasingHandler::AddPhase(me, PHASE_DEFAULT, false);
PhasingHandler::AddPhase(me, PHASE_ENTRANCE_TO_ULDUM, false);
}
void SpellHit(Unit* caster, SpellInfo const* spell) override
{
if (!caster)
@@ -121,25 +215,29 @@ struct npc_uldum_camera_bunny_04 : public ScriptedAI
switch (spell->Id)
{
case SPELL_PING_CAMERA_00:
if (_pingCount == 1)
if (_pingCount == PING_INDEX_PING_ALL_ACTORS)
{
DoCast(caster, SPELL_INVISIBLE_BEAM);
DoCastSelf(SPELL_REVERSE_CAST_RIDE_VEHICLE, true);
DoCastSelf(SPELL_MASTER_PING_ALL_ACTORS, true);
_events.ScheduleEvent(EVENT_MOVE_PATH_1, 11s);
}
else if (_pingCount == 2)
else if (_pingCount == PING_INDEX_PING_BEAM_TARGET)
_events.ScheduleEvent(EVENT_PING_BEAM_TARGET, 3s + 600ms);
_pingCount++;
break;
case SPELL_PING_CAMERA_01:
{
me->CastStop();
DoCast(caster, SPELL_INVISIBLE_BEAM, true);
me->GetMotionMaster()->MoveAlongSplineChain(POINT_NONE, SPLINE_CHAIN_ID_CAMERA_PATH_2, true);
me->InterruptNonMeleeSpells(true);
DoCast(caster, SPELL_INVISIBLE_BEAM);
caster->GetMotionMaster()->MoveAlongSplineChain(POINT_NONE, SPLINE_CHAIN_ID_BEAM_TARGET_PATH_1, false);
_events.ScheduleEvent(EVENT_FADE_TO_BLACK_1, 8s + 500ms);
break;
case SPELL_PING_CAMERA_02:
_cameraBunnyGUID = caster->GetGUID();
_events.ScheduleEvent(EVENT_TARGET_BEAM_BUNNY_2, 1s + 500ms);
break;
}
default:
break;
}
@@ -148,10 +246,7 @@ struct npc_uldum_camera_bunny_04 : public ScriptedAI
void SpellHitTarget(Unit* target, SpellInfo const* spell) override
{
if (spell->Id == SPELL_PING_BEAM_TARGET)
{
target->CastSpell(target, SPELL_PING_CAMERA_01);
target->GetMotionMaster()->MoveAlongSplineChain(POINT_NONE, SPLINE_CHAIN_ID_BEAM_TARGET_PATH_1, true);
}
target->CastSpell(me, SPELL_PING_CAMERA_01, true);
}
void UpdateAI(uint32 diff) override
@@ -166,7 +261,29 @@ struct npc_uldum_camera_bunny_04 : public ScriptedAI
me->GetMotionMaster()->MoveAlongSplineChain(POINT_NONE, SPLINE_CHAIN_ID_CAMERA_PATH_1, true);
break;
case EVENT_PING_BEAM_TARGET:
DoCastSelf(SPELL_PING_BEAM_TARGET, true);
DoCastAOE(SPELL_PING_BEAM_TARGET, true);
break;
case EVENT_FADE_TO_BLACK_1:
// Pre-load grid to avoid getting stuck on the next location
me->GetMap()->LoadGrid(TeleportGridPosition1.GetPositionX(), TeleportGridPosition1.GetPositionY());
DoCastSelf(SPELL_FADE_TO_BLACK, true);
_events.ScheduleEvent(EVENT_TELEPORT_CAMERA_1, 1s);
break;
case EVENT_TELEPORT_CAMERA_1:
me->CastStop();
DoCastSelf(SPELL_REVERSE_CAST_RIDE_SEAT_2, true);
DoCastSelf(SPELL_TELEPORT_CAMERA, true);
DoCastSelf(SPELL_MASTER_SUMMON_BEAM_TARGET_02, true);
DoCastSelf(SPELL_MASTER_PING_ALL_ACTORS, true);
break;
case EVENT_TARGET_BEAM_BUNNY_2:
if (Creature* bunny = ObjectAccessor::GetCreature(*me, _cameraBunnyGUID))
{
DoCastSelf(SPELL_REVERSE_CAST_RIDE_CAMERA_BUNNY_SEAT_3, true);
DoCast(bunny, SPELL_INVISIBLE_BEAM, true);
me->GetMotionMaster()->MoveAlongSplineChain(POINT_NONE, SPLINE_CHAIN_ID_CAMERA_PATH_3, false);
bunny->GetMotionMaster()->MoveAlongSplineChain(POINT_NONE, SPLINE_CHAIN_ID_BEAM_TARGET_2_PATH_1, false);
}
break;
default:
break;
@@ -177,6 +294,7 @@ struct npc_uldum_camera_bunny_04 : public ScriptedAI
private:
uint8 _pingCount;
EventMap _events;
ObjectGuid _cameraBunnyGUID;
};
// Gobbles! Quest
@@ -229,8 +347,10 @@ class spell_summon_schnottz : public SpellScript
void AddSC_uldum()
{
RegisterCreatureAI(npc_uldum_camera_bunny_04);
RegisterCreatureAI(npc_uldum_uldum_camera_bunny_04);
RegisterSpellScript(spell_uldum_initialize_uldum_intro);
RegisterSpellScript(spell_uldum_master_ping_all_actors);
RegisterSpellScript(spell_uldum_master_summon_beam_target_02);
RegisterSpellScript(spell_uldum_player_summon_camera);
RegisterSpellScript(spell_gobbles_initialize);
RegisterSpellScript(spell_summon_schnottz);