Core/Movement: Implemented methods to animate creatures landing and takeoff and use them in Sindragosa script
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user