diff options
Diffstat (limited to 'src/server/scripts')
| -rw-r--r-- | src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp index 24cfae54627..e3aaba06793 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp @@ -96,6 +96,7 @@ enum Events EVENT_ICE_TOMB = 10, EVENT_FROST_BOMB = 11, EVENT_LAND = 12, + EVENT_AIR_MOVEMENT = 21, // Spinestalker EVENT_BELLOWING_ROAR = 13, @@ -129,7 +130,8 @@ enum MovementPoints POINT_FROSTWYRM_FLY_IN = 1, POINT_FROSTWYRM_LAND = 2, POINT_AIR_PHASE = 3, - POINT_LAND = 4, + POINT_TAKEOFF = 4, + POINT_LAND = 5, }; enum Shadowmourne @@ -141,9 +143,9 @@ enum Shadowmourne SPELL_FROST_IMBUED_BLADE = 72290, }; -Position const RimefangFlyPos = {4413.309f, 2456.421f, 223.3795f, 2.890186f}; +Position const RimefangFlyPos = {4413.309f, 2456.421f, 233.3795f, 2.890186f}; Position const RimefangLandPos = {4413.309f, 2456.421f, 203.3848f, 2.890186f}; -Position const SpinestalkerFlyPos = {4418.895f, 2514.233f, 220.4864f, 3.396045f}; +Position const SpinestalkerFlyPos = {4418.895f, 2514.233f, 230.4864f, 3.396045f}; Position const SpinestalkerLandPos = {4418.895f, 2514.233f, 203.3848f, 3.396045f}; Position const SindragosaSpawnPos = {4818.700f, 2483.710f, 287.0650f, 3.089233f}; Position const SindragosaFlyPos = {4475.190f, 2484.570f, 234.8510f, 3.141593f}; @@ -157,7 +159,7 @@ class FrostwyrmLandEvent : public BasicEvent bool Execute(uint64 /*eventTime*/, uint32 /*updateTime*/) { - _owner.GetMotionMaster()->MovePoint(POINT_FROSTWYRM_LAND, _dest); + _owner.GetMotionMaster()->MoveLand(POINT_FROSTWYRM_LAND, _dest, 8.247422f); return true; } @@ -245,7 +247,7 @@ class boss_sindragosa : public CreatureScript me->setActive(true); me->SetSpeed(MOVE_FLIGHT, 4.0f); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); - float moveTime = me->GetExactDist(&SindragosaFlyPos)/(me->GetSpeed(MOVE_FLIGHT)*0.001f); + float moveTime = me->GetExactDist(&SindragosaFlyPos) / (me->GetSpeed(MOVE_FLIGHT) * 0.001f); me->m_Events.AddEvent(new FrostwyrmLandEvent(*me, SindragosaLandPos), me->m_Events.CalculateTime(uint64(moveTime) + 250)); me->GetMotionMaster()->MovePoint(POINT_FROSTWYRM_FLY_IN, SindragosaFlyPos); DoCast(me, SPELL_SINDRAGOSA_S_FURY); @@ -277,6 +279,9 @@ class boss_sindragosa : public CreatureScript // Sindragosa enters combat as soon as she lands DoZoneInCombat(); break; + case POINT_TAKEOFF: + events.ScheduleEvent(EVENT_AIR_MOVEMENT, 1); + break; case POINT_AIR_PHASE: me->CastCustomSpell(SPELL_ICE_TOMB_TARGET, SPELLVALUE_MAX_TARGETS, RAID_MODE<int32>(2, 5, 2, 6), false); events.ScheduleEvent(EVENT_FROST_BOMB, 8000); @@ -414,16 +419,24 @@ class boss_sindragosa : public CreatureScript Talk(SAY_BLISTERING_COLD); break; case EVENT_AIR_PHASE: + { Talk(SAY_AIR_PHASE); me->SetFlying(true); me->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING); me->SetReactState(REACT_PASSIVE); - me->GetMotionMaster()->MovePoint(POINT_AIR_PHASE, SindragosaAirPos); + Position pos; + pos.Relocate(me); + pos.m_positionZ += 17.0f; + me->GetMotionMaster()->MoveTakeoff(POINT_TAKEOFF, pos, 8.30078125f); events.DelayEvents(45000, EVENT_GROUP_LAND_PHASE); events.ScheduleEvent(EVENT_AIR_PHASE, 110000); events.RescheduleEvent(EVENT_UNCHAINED_MAGIC, urand(55000, 60000), EVENT_GROUP_LAND_PHASE); events.ScheduleEvent(EVENT_LAND, 45000); break; + } + case EVENT_AIR_MOVEMENT: + me->GetMotionMaster()->MovePoint(POINT_AIR_PHASE, SindragosaAirPos); + break; case EVENT_ICE_TOMB: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true, -SPELL_ICE_TOMB_UNTARGETABLE)) { @@ -604,7 +617,7 @@ class npc_spinestalker : public CreatureScript me->setActive(true); me->SetSpeed(MOVE_FLIGHT, 2.0f); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); - float moveTime = me->GetExactDist(&SpinestalkerFlyPos)/(me->GetSpeed(MOVE_FLIGHT)*0.001f); + float moveTime = me->GetExactDist(&SpinestalkerFlyPos) / (me->GetSpeed(MOVE_FLIGHT) * 0.001f); me->m_Events.AddEvent(new FrostwyrmLandEvent(*me, SpinestalkerLandPos), me->m_Events.CalculateTime(uint64(moveTime) + 250)); me->SetDefaultMovementType(IDLE_MOTION_TYPE); me->GetMotionMaster()->MoveIdle(MOTION_SLOT_IDLE); @@ -719,7 +732,7 @@ class npc_rimefang : public CreatureScript me->setActive(true); me->SetSpeed(MOVE_FLIGHT, 2.0f); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE); - float moveTime = me->GetExactDist(&RimefangFlyPos)/(me->GetSpeed(MOVE_FLIGHT)*0.001f); + float moveTime = me->GetExactDist(&RimefangFlyPos) / (me->GetSpeed(MOVE_FLIGHT) * 0.001f); me->m_Events.AddEvent(new FrostwyrmLandEvent(*me, RimefangLandPos), me->m_Events.CalculateTime(uint64(moveTime) + 250)); me->SetDefaultMovementType(IDLE_MOTION_TYPE); me->GetMotionMaster()->MoveIdle(MOTION_SLOT_IDLE); @@ -821,12 +834,12 @@ class npc_sindragosa_trash : public CreatureScript { npc_sindragosa_trashAI(Creature* creature) : ScriptedAI(creature) { - _frostwyrmId = (creature->GetHomePosition().GetPositionY() < 2484.35f) ? DATA_RIMEFANG : DATA_SPINESTALKER; _instance = creature->GetInstanceScript(); } void InitializeAI() { + _frostwyrmId = (me->GetHomePosition().GetPositionY() < 2484.35f) ? DATA_RIMEFANG : DATA_SPINESTALKER; // Increase add count if (!me->isDead()) _instance->SetData(_frostwyrmId, 1); // this cannot be in Reset because reset also happens on evade |
