Core/Units:
- Implement UNIT_FIELD_HOVERHEIGHT (requires DB data). This field, sent in update object packet, will determine the height at which a creature hovers if it has movementflag_hover applied. Note that hovering will now update the server-sided z-coordinate by the value of this field, and that all subsequent positional updates to the client will need to send z coordinate MINUS the hover height offset, or the hoverheight will be visually doubled client side. - Correct our usage of movementflag_flying, movementflag_can_fly, movementflag_hover and movementflag_disable_gravity (previously levitate), and how they relate to InhabitType in the database. This fixes "flying creatures on steroids" bug (wings flapping too fast), and potentially a lot of visual issues in AI scripts. Note that a lot of scripts still set wrong movementflags, these need to be fixed on a case by case basis. - Send correct packets for SPELL_AURA_FEATHER_FALL, SPELL_AURA_WATER_WALK and SPELL_AURA_HOVER apply/unapply. - Send correct packet contents for movement update in Unit::SetSpeed. - Misc. cleanup in affected scripts.
This commit is contained in:
@@ -349,6 +349,7 @@ public:
|
||||
void Reset()
|
||||
{
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
//! HACK: Creature's can't have MOVEMENTFLAG_FLYING
|
||||
me->AddUnitMovementFlag(MOVEMENTFLAG_FLYING);
|
||||
me->setFaction(16);
|
||||
me->SetFloatValue(OBJECT_FIELD_SCALE_X, 1.0f);
|
||||
|
||||
@@ -105,8 +105,8 @@ class boss_saviana_ragefire : public CreatureScript
|
||||
Talk(SAY_CONFLAGRATION);
|
||||
break;
|
||||
case POINT_LAND:
|
||||
me->SetFlying(false);
|
||||
me->SetLevitate(false);
|
||||
me->SetCanFly(false);
|
||||
me->SetDisableGravity(false);
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
if (me->GetMotionMaster()->GetCurrentMovementGeneratorType() == POINT_MOTION_TYPE)
|
||||
me->GetMotionMaster()->MovementExpired();
|
||||
@@ -120,8 +120,8 @@ class boss_saviana_ragefire : public CreatureScript
|
||||
void JustReachedHome()
|
||||
{
|
||||
_JustReachedHome();
|
||||
me->SetFlying(false);
|
||||
me->SetLevitate(false);
|
||||
me->SetCanFly(false);
|
||||
me->SetDisableGravity(false);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* victim)
|
||||
@@ -146,8 +146,8 @@ class boss_saviana_ragefire : public CreatureScript
|
||||
{
|
||||
case EVENT_FLIGHT:
|
||||
{
|
||||
me->SetFlying(true);
|
||||
me->SetLevitate(true);
|
||||
me->SetCanFly(true);
|
||||
me->SetDisableGravity(true);
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
me->GetMotionMaster()->MovePoint(POINT_FLIGHT, SavianaRagefireFlyPos);
|
||||
events.ScheduleEvent(EVENT_FLIGHT, 50000);
|
||||
|
||||
+4
-1
@@ -571,7 +571,10 @@ class mob_frost_sphere : public CreatureScript
|
||||
{
|
||||
_isFalling = false;
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
me->SetFlying(true);
|
||||
//! Confirmed sniff 3.3.5.a
|
||||
me->SetDisableGravity(true);
|
||||
me->SetByteValue(UNIT_FIELD_BYTES_1, 3, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER);
|
||||
//! end
|
||||
me->SetDisplayId(me->GetCreatureTemplate()->Modelid2);
|
||||
me->SetSpeed(MOVE_RUN, 0.5f, false);
|
||||
me->GetMotionMaster()->MoveRandom(20.0f);
|
||||
|
||||
+2
-2
@@ -576,8 +576,8 @@ struct mob_unleashed_ballAI : public ScriptedAI
|
||||
{
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
me->SetLevitate(true);
|
||||
me->SetFlying(true);
|
||||
me->SetDisableGravity(true);
|
||||
me->SetCanFly(true);
|
||||
SetCombatMovement(false);
|
||||
MoveToNextPoint();
|
||||
m_uiRangeCheckTimer = IN_MILLISECONDS;
|
||||
|
||||
@@ -347,7 +347,7 @@ class boss_krick : public CreatureScript
|
||||
else
|
||||
tyrannusPtr = me->SummonCreature(NPC_TYRANNUS_EVENTS, outroPos[1], TEMPSUMMON_MANUAL_DESPAWN);
|
||||
|
||||
tyrannusPtr->SetFlying(true);
|
||||
tyrannusPtr->SetCanFly(true);
|
||||
me->GetMotionMaster()->MovePoint(POINT_KRICK_INTRO, outroPos[0].GetPositionX(), outroPos[0].GetPositionY(), outroPos[0].GetPositionZ());
|
||||
tyrannusPtr->SetFacingToObject(me);
|
||||
}
|
||||
@@ -439,6 +439,7 @@ class boss_krick : public CreatureScript
|
||||
_events.ScheduleEvent(EVENT_OUTRO_8, 5000);
|
||||
break;
|
||||
case EVENT_OUTRO_8:
|
||||
//! HACK: Creature's can't have MOVEMENTFLAG_FLYING
|
||||
me->AddUnitMovementFlag(MOVEMENTFLAG_FLYING);
|
||||
me->GetMotionMaster()->MovePoint(0, outroPos[5]);
|
||||
DoCast(me, SPELL_STRANGULATING);
|
||||
@@ -453,6 +454,7 @@ class boss_krick : public CreatureScript
|
||||
_events.ScheduleEvent(EVENT_OUTRO_10, 1000);
|
||||
break;
|
||||
case EVENT_OUTRO_10:
|
||||
//! HACK: Creature's can't have MOVEMENTFLAG_FLYING
|
||||
me->RemoveUnitMovementFlag(MOVEMENTFLAG_FLYING);
|
||||
me->AddUnitMovementFlag(MOVEMENTFLAG_FALLING);
|
||||
me->GetMotionMaster()->MovePoint(0, outroPos[6]);
|
||||
|
||||
@@ -295,7 +295,7 @@ class boss_rimefang : public CreatureScript
|
||||
_events.SetPhase(PHASE_NONE);
|
||||
_currentWaypoint = 0;
|
||||
_hoarfrostTargetGUID = 0;
|
||||
me->SetFlying(true);
|
||||
me->SetCanFly(true);
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
}
|
||||
|
||||
@@ -1058,7 +1058,7 @@ class npc_blood_queen_lana_thel : public CreatureScript
|
||||
void Reset()
|
||||
{
|
||||
_events.Reset();
|
||||
me->SetLevitate(true);
|
||||
me->SetDisableGravity(true);
|
||||
if (_instance->GetBossState(DATA_BLOOD_PRINCE_COUNCIL) == DONE)
|
||||
{
|
||||
me->SetVisible(false);
|
||||
|
||||
@@ -198,8 +198,8 @@ class boss_blood_queen_lana_thel : public CreatureScript
|
||||
if (Creature* minchar = me->FindNearestCreature(NPC_INFILTRATOR_MINCHAR_BQ, 200.0f))
|
||||
{
|
||||
minchar->SetUInt32Value(UNIT_NPC_EMOTESTATE, 0);
|
||||
minchar->RemoveByteFlag(UNIT_FIELD_BYTES_1, 3, 0x01);
|
||||
minchar->SetFlying(false);
|
||||
minchar->RemoveByteFlag(UNIT_FIELD_BYTES_1, 3, UNIT_BYTE1_FLAG_ALWAYS_STAND);
|
||||
minchar->SetCanFly(false);
|
||||
minchar->SendMovementFlagUpdate();
|
||||
minchar->RemoveAllAuras();
|
||||
minchar->GetMotionMaster()->MoveCharge(4629.3711f, 2782.6089f, 401.5301f, SPEED_CHARGE/3.0f);
|
||||
@@ -216,9 +216,9 @@ class boss_blood_queen_lana_thel : public CreatureScript
|
||||
_killMinchar = true;
|
||||
else
|
||||
{
|
||||
me->SetLevitate(true);
|
||||
me->SetByteFlag(UNIT_FIELD_BYTES_1, 3, 0x01);
|
||||
me->SetFlying(true);
|
||||
me->SetDisableGravity(true);
|
||||
me->SetByteFlag(UNIT_FIELD_BYTES_1, 3, UNIT_BYTE1_FLAG_ALWAYS_STAND);
|
||||
me->SetCanFly(true);
|
||||
me->SendMovementFlagUpdate();
|
||||
me->GetMotionMaster()->MovePoint(POINT_MINCHAR, mincharPos);
|
||||
}
|
||||
@@ -230,9 +230,9 @@ class boss_blood_queen_lana_thel : public CreatureScript
|
||||
if (_killMinchar)
|
||||
{
|
||||
_killMinchar = false;
|
||||
me->SetLevitate(true);
|
||||
me->SetByteFlag(UNIT_FIELD_BYTES_1, 3, 0x01);
|
||||
me->SetFlying(true);
|
||||
me->SetDisableGravity(true);
|
||||
me->SetByteFlag(UNIT_FIELD_BYTES_1, 3, UNIT_BYTE1_FLAG_ALWAYS_STAND);
|
||||
me->SetCanFly(true);
|
||||
me->GetMotionMaster()->MovePoint(POINT_MINCHAR, mincharPos);
|
||||
}
|
||||
else
|
||||
@@ -244,9 +244,9 @@ class boss_blood_queen_lana_thel : public CreatureScript
|
||||
|
||||
void JustReachedHome()
|
||||
{
|
||||
me->SetLevitate(false);
|
||||
me->RemoveByteFlag(UNIT_FIELD_BYTES_1, 3, 0x01);
|
||||
me->SetFlying(false);
|
||||
me->SetDisableGravity(false);
|
||||
me->RemoveByteFlag(UNIT_FIELD_BYTES_1, 3, UNIT_BYTE1_FLAG_ALWAYS_STAND);
|
||||
me->SetCanFly(false);
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
_JustReachedHome();
|
||||
Talk(SAY_WIPE);
|
||||
@@ -295,9 +295,9 @@ class boss_blood_queen_lana_thel : public CreatureScript
|
||||
events.ScheduleEvent(EVENT_AIR_FLY_DOWN, 10000);
|
||||
break;
|
||||
case POINT_GROUND:
|
||||
me->SetLevitate(false);
|
||||
me->RemoveByteFlag(UNIT_FIELD_BYTES_1, 3, 0x01);
|
||||
me->SetFlying(false);
|
||||
me->SetDisableGravity(false);
|
||||
me->RemoveByteFlag(UNIT_FIELD_BYTES_1, 3, UNIT_BYTE1_FLAG_ALWAYS_STAND);
|
||||
me->SetCanFly(false);
|
||||
me->SendMovementFlagUpdate();
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
if (Unit* victim = me->SelectVictim())
|
||||
@@ -372,7 +372,7 @@ class boss_blood_queen_lana_thel : public CreatureScript
|
||||
break;
|
||||
}
|
||||
case EVENT_DELIRIOUS_SLASH:
|
||||
if (_offtank && !me->HasByteFlag(UNIT_FIELD_BYTES_1, 3, 0x03))
|
||||
if (_offtank && !me->HasByteFlag(UNIT_FIELD_BYTES_1, 3, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER))
|
||||
DoCast(_offtank, SPELL_DELIRIOUS_SLASH);
|
||||
events.ScheduleEvent(EVENT_DELIRIOUS_SLASH, urand(20000, 24000), EVENT_GROUP_NORMAL);
|
||||
break;
|
||||
@@ -424,9 +424,9 @@ class boss_blood_queen_lana_thel : public CreatureScript
|
||||
me->GetMotionMaster()->MovePoint(POINT_CENTER, centerPos);
|
||||
break;
|
||||
case EVENT_AIR_START_FLYING:
|
||||
me->SetLevitate(true);
|
||||
me->SetByteFlag(UNIT_FIELD_BYTES_1, 3, 0x01);
|
||||
me->SetFlying(true);
|
||||
me->SetDisableGravity(true);
|
||||
me->SetByteFlag(UNIT_FIELD_BYTES_1, 3, UNIT_BYTE1_FLAG_ALWAYS_STAND);
|
||||
me->SetCanFly(true);
|
||||
me->SendMovementFlagUpdate();
|
||||
me->GetMotionMaster()->MovePoint(POINT_AIR, airPos);
|
||||
break;
|
||||
|
||||
@@ -605,7 +605,7 @@ class npc_high_overlord_saurfang_icc : public CreatureScript
|
||||
_events.ScheduleEvent(EVENT_OUTRO_HORDE_3, 18000); // say
|
||||
_events.ScheduleEvent(EVENT_OUTRO_HORDE_4, 24000); // cast
|
||||
_events.ScheduleEvent(EVENT_OUTRO_HORDE_5, 30000); // move
|
||||
me->SetLevitate(false);
|
||||
me->SetDisableGravity(false);
|
||||
me->SendMovementFlagUpdate();
|
||||
me->Relocate(me->GetPositionX(), me->GetPositionY(), 539.2917f);
|
||||
me->MonsterMoveWithSpeed(me->GetPositionX(), me->GetPositionY(), 539.2917f, 0.0f);
|
||||
@@ -629,7 +629,7 @@ class npc_high_overlord_saurfang_icc : public CreatureScript
|
||||
{
|
||||
if (spell->Id == SPELL_GRIP_OF_AGONY)
|
||||
{
|
||||
me->SetLevitate(true);
|
||||
me->SetDisableGravity(true);
|
||||
me->GetMotionMaster()->MovePoint(POINT_CHOKE, chokePos[0]);
|
||||
}
|
||||
}
|
||||
@@ -812,7 +812,7 @@ class npc_muradin_bronzebeard_icc : public CreatureScript
|
||||
{
|
||||
me->RemoveAurasDueToSpell(SPELL_GRIP_OF_AGONY);
|
||||
Talk(SAY_OUTRO_ALLIANCE_1);
|
||||
me->SetLevitate(false);
|
||||
me->SetDisableGravity(false);
|
||||
me->SendMovementFlagUpdate();
|
||||
me->Relocate(me->GetPositionX(), me->GetPositionY(), 539.2917f);
|
||||
me->MonsterMoveWithSpeed(me->GetPositionX(), me->GetPositionY(), 539.2917f, 0.0f);
|
||||
@@ -832,7 +832,7 @@ class npc_muradin_bronzebeard_icc : public CreatureScript
|
||||
{
|
||||
if (spell->Id == SPELL_GRIP_OF_AGONY)
|
||||
{
|
||||
me->SetLevitate(true);
|
||||
me->SetDisableGravity(true);
|
||||
me->GetMotionMaster()->MovePoint(POINT_CHOKE, chokePos[0]);
|
||||
}
|
||||
}
|
||||
@@ -934,7 +934,7 @@ class npc_saurfang_event : public CreatureScript
|
||||
{
|
||||
if (spell->Id == SPELL_GRIP_OF_AGONY)
|
||||
{
|
||||
me->SetLevitate(true);
|
||||
me->SetDisableGravity(true);
|
||||
me->GetMotionMaster()->MovePoint(POINT_CHOKE, chokePos[_index]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -198,8 +198,8 @@ class boss_sindragosa : public CreatureScript
|
||||
|
||||
if (instance->GetData(DATA_SINDRAGOSA_FROSTWYRMS) != 255)
|
||||
{
|
||||
me->SetFlying(true);
|
||||
me->SetLevitate(true);
|
||||
me->SetCanFly(true);
|
||||
me->SetDisableGravity(true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -228,8 +228,8 @@ class boss_sindragosa : public CreatureScript
|
||||
{
|
||||
BossAI::JustReachedHome();
|
||||
instance->SetBossState(DATA_SINDRAGOSA, FAIL);
|
||||
me->SetFlying(false);
|
||||
me->SetLevitate(false);
|
||||
me->SetCanFly(false);
|
||||
me->SetDisableGravity(false);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* victim)
|
||||
@@ -275,8 +275,8 @@ class boss_sindragosa : public CreatureScript
|
||||
{
|
||||
case POINT_FROSTWYRM_LAND:
|
||||
me->setActive(false);
|
||||
me->SetFlying(false);
|
||||
me->SetLevitate(false);
|
||||
me->SetCanFly(false);
|
||||
me->SetDisableGravity(false);
|
||||
me->SetHomePosition(SindragosaLandPos);
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetSpeed(MOVE_FLIGHT, 2.0f);
|
||||
@@ -292,8 +292,8 @@ class boss_sindragosa : public CreatureScript
|
||||
events.ScheduleEvent(EVENT_FROST_BOMB, 8000);
|
||||
break;
|
||||
case POINT_LAND:
|
||||
me->SetFlying(false);
|
||||
me->SetLevitate(false);
|
||||
me->SetCanFly(false);
|
||||
me->SetDisableGravity(false);
|
||||
me->SetReactState(REACT_DEFENSIVE);
|
||||
if (me->GetMotionMaster()->GetCurrentMovementGeneratorType() == POINT_MOTION_TYPE)
|
||||
me->GetMotionMaster()->MovementExpired();
|
||||
@@ -425,8 +425,8 @@ class boss_sindragosa : public CreatureScript
|
||||
{
|
||||
_isInAirPhase = true;
|
||||
Talk(SAY_AIR_PHASE);
|
||||
me->SetFlying(true);
|
||||
me->SetLevitate(true);
|
||||
me->SetCanFly(true);
|
||||
me->SetDisableGravity(true);
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
Position pos;
|
||||
pos.Relocate(me);
|
||||
@@ -617,8 +617,8 @@ class npc_spinestalker : public CreatureScript
|
||||
|
||||
if (_instance->GetData(DATA_SPINESTALKER) != 255)
|
||||
{
|
||||
me->SetFlying(true);
|
||||
me->SetLevitate(true);
|
||||
me->SetCanFly(true);
|
||||
me->SetDisableGravity(true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -660,8 +660,8 @@ class npc_spinestalker : public CreatureScript
|
||||
return;
|
||||
|
||||
me->setActive(false);
|
||||
me->SetFlying(false);
|
||||
me->SetLevitate(false);
|
||||
me->SetCanFly(false);
|
||||
me->SetDisableGravity(false);
|
||||
me->SetHomePosition(SpinestalkerLandPos);
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
}
|
||||
@@ -742,8 +742,8 @@ class npc_rimefang : public CreatureScript
|
||||
|
||||
if (_instance->GetData(DATA_RIMEFANG) != 255)
|
||||
{
|
||||
me->SetFlying(true);
|
||||
me->SetLevitate(true);
|
||||
me->SetCanFly(true);
|
||||
me->SetDisableGravity(true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -785,8 +785,8 @@ class npc_rimefang : public CreatureScript
|
||||
return;
|
||||
|
||||
me->setActive(false);
|
||||
me->SetFlying(false);
|
||||
me->SetLevitate(false);
|
||||
me->SetCanFly(false);
|
||||
me->SetDisableGravity(false);
|
||||
me->SetHomePosition(RimefangLandPos);
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
|
||||
}
|
||||
@@ -819,7 +819,7 @@ class npc_rimefang : public CreatureScript
|
||||
_icyBlastCounter = RAID_MODE<uint8>(5, 7, 6, 8);
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
me->AttackStop();
|
||||
me->SetFlying(true);
|
||||
me->SetCanFly(true);
|
||||
me->GetMotionMaster()->MovePoint(POINT_FROSTWYRM_FLY_IN, RimefangFlyPos);
|
||||
float moveTime = me->GetExactDist(&RimefangFlyPos)/(me->GetSpeed(MOVE_FLIGHT)*0.001f);
|
||||
_events.ScheduleEvent(EVENT_ICY_BLAST, uint64(moveTime) + urand(60000, 70000));
|
||||
@@ -840,7 +840,7 @@ class npc_rimefang : public CreatureScript
|
||||
{
|
||||
me->SetReactState(REACT_DEFENSIVE);
|
||||
AttackStart(victim);
|
||||
me->SetFlying(false);
|
||||
me->SetCanFly(false);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -500,8 +500,8 @@ class boss_the_lich_king : public CreatureScript
|
||||
{
|
||||
_JustDied();
|
||||
DoCastAOE(SPELL_PLAY_MOVIE, false);
|
||||
me->SetLevitate(false);
|
||||
me->RemoveByteFlag(UNIT_FIELD_BYTES_1, 3, 0x03);
|
||||
me->SetDisableGravity(false);
|
||||
me->RemoveByteFlag(UNIT_FIELD_BYTES_1, 3, UNIT_BYTE1_FLAG_UNK_3);
|
||||
me->GetMotionMaster()->MoveFall();
|
||||
}
|
||||
|
||||
@@ -1073,8 +1073,8 @@ class boss_the_lich_king : public CreatureScript
|
||||
DoCastAOE(SPELL_SOUL_BARRAGE);
|
||||
sCreatureTextMgr->SendSound(me, SOUND_PAIN, CHAT_MSG_MONSTER_YELL, 0, TEXT_RANGE_NORMAL, TEAM_OTHER, false);
|
||||
// set flight
|
||||
me->SetLevitate(true);
|
||||
me->SetByteFlag(UNIT_FIELD_BYTES_1, 3, 0x03);
|
||||
me->SetDisableGravity(true);
|
||||
me->SetByteFlag(UNIT_FIELD_BYTES_1, 3, UNIT_BYTE1_FLAG_UNK_3);
|
||||
me->GetMotionMaster()->MovePoint(POINT_LK_OUTRO_2, OutroFlying);
|
||||
break;
|
||||
case EVENT_OUTRO_TALK_7:
|
||||
|
||||
@@ -796,7 +796,7 @@ class boss_sister_svalna : public CreatureScript
|
||||
{
|
||||
_JustReachedHome();
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
me->SetFlying(false);
|
||||
me->SetCanFly(false);
|
||||
}
|
||||
|
||||
void DoAction(int32 const action)
|
||||
@@ -844,7 +844,7 @@ class boss_sister_svalna : public CreatureScript
|
||||
_isEventInProgress = false;
|
||||
me->setActive(false);
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetFlying(false);
|
||||
me->SetCanFly(false);
|
||||
}
|
||||
|
||||
void SpellHitTarget(Unit* target, SpellInfo const* spell)
|
||||
|
||||
@@ -296,7 +296,7 @@ public:
|
||||
{
|
||||
case EVENT_LIFTOFF:
|
||||
me->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF);
|
||||
me->SetLevitate(true);
|
||||
me->SetDisableGravity(true);
|
||||
me->SendMovementFlagUpdate();
|
||||
events.ScheduleEvent(EVENT_ICEBOLT, 1500);
|
||||
iceboltCount = RAID_MODE(2, 3);
|
||||
@@ -340,7 +340,7 @@ public:
|
||||
return;
|
||||
case EVENT_LAND:
|
||||
me->HandleEmoteCommand(EMOTE_ONESHOT_LAND);
|
||||
me->SetLevitate(false);
|
||||
me->SetDisableGravity(false);
|
||||
me->SendMovementFlagUpdate();
|
||||
events.ScheduleEvent(EVENT_GROUND, 1500);
|
||||
return;
|
||||
|
||||
@@ -240,7 +240,7 @@ public:
|
||||
|
||||
_cannotMove = true;
|
||||
|
||||
me->SetFlying(true);
|
||||
me->SetCanFly(true);
|
||||
|
||||
if (instance)
|
||||
instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
|
||||
@@ -271,7 +271,7 @@ public:
|
||||
{
|
||||
me->SetHomePosition(_homePosition);
|
||||
|
||||
me->SetLevitate(true);
|
||||
me->SetDisableGravity(true);
|
||||
|
||||
BossAI::EnterEvadeMode();
|
||||
|
||||
@@ -354,8 +354,8 @@ public:
|
||||
{
|
||||
_EnterCombat();
|
||||
|
||||
me->SetLevitate(false);
|
||||
me->SetFlying(false);
|
||||
me->SetDisableGravity(false);
|
||||
me->SetCanFly(false);
|
||||
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
|
||||
@@ -412,8 +412,8 @@ public:
|
||||
|
||||
void PrepareForVortex()
|
||||
{
|
||||
me->SetLevitate(true);
|
||||
me->SetFlying(true);
|
||||
me->SetDisableGravity(true);
|
||||
me->SetCanFly(true);
|
||||
|
||||
me->GetMotionMaster()->MovementExpired();
|
||||
me->GetMotionMaster()->MovePoint(MOVE_VORTEX, MalygosPositions[1].GetPositionX(), MalygosPositions[1].GetPositionY(), MalygosPositions[1].GetPositionZ());
|
||||
@@ -461,8 +461,8 @@ public:
|
||||
{
|
||||
SetPhase(PHASE_TWO, true);
|
||||
|
||||
me->SetLevitate(true);
|
||||
me->SetFlying(true);
|
||||
me->SetDisableGravity(true);
|
||||
me->SetCanFly(true);
|
||||
|
||||
me->GetMotionMaster()->MoveIdle();
|
||||
me->GetMotionMaster()->MovePoint(MOVE_DEEP_BREATH_ROTATION, MalygosPhaseTwoWaypoints[0]);
|
||||
@@ -704,8 +704,8 @@ class spell_malygos_vortex_visual : public SpellScriptLoader
|
||||
// Anyway even with this issue, the boss does not enter in evade mode - this prevents iterate an empty list in the next vortex execution.
|
||||
malygos->SetInCombatWithZone();
|
||||
|
||||
malygos->SetLevitate(false);
|
||||
malygos->SetFlying(false);
|
||||
malygos->SetDisableGravity(false);
|
||||
malygos->SetCanFly(false);
|
||||
|
||||
malygos->GetMotionMaster()->MoveChase(caster->getVictim());
|
||||
malygos->RemoveAura(SPELL_VORTEX_1);
|
||||
|
||||
@@ -316,7 +316,9 @@ public:
|
||||
LeaveCombat();
|
||||
break;
|
||||
case SPELL_TELEPORT:
|
||||
me->AddUnitMovementFlag(MOVEMENTFLAG_CAN_FLY); // with out it the npc will fall down while is casting
|
||||
//! Unconfirmed, previous below
|
||||
me->SetDisableGravity(true);
|
||||
//me->AddUnitMovementFlag(MOVEMENTFLAG_CAN_FLY); // with out it the npc will fall down while is casting
|
||||
canCast = true;
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -170,6 +170,7 @@ class npc_azure_ring_captain : public CreatureScript
|
||||
targetGUID = 0;
|
||||
|
||||
me->SetWalk(true);
|
||||
//! HACK: Creature's can't have MOVEMENTFLAG_FLYING
|
||||
me->AddUnitMovementFlag(MOVEMENTFLAG_FLYING);
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
}
|
||||
|
||||
@@ -575,7 +575,7 @@ class boss_stormcaller_brundir : public CreatureScript
|
||||
_Reset();
|
||||
phase = 0;
|
||||
me->RemoveAllAuras();
|
||||
me->SetLevitate(false);
|
||||
me->SetDisableGravity(false);
|
||||
me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_INTERRUPT, false); // Should be interruptable unless overridden by spell (Overload)
|
||||
me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_STUN, false); // Reset immumity, Brundir should be stunnable by default
|
||||
RespawnEncounter(instance, me);
|
||||
|
||||
@@ -330,7 +330,7 @@ class boss_razorscale : public CreatureScript
|
||||
void Reset()
|
||||
{
|
||||
_Reset();
|
||||
me->SetFlying(true);
|
||||
me->SetCanFly(true);
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
PermaGround = false;
|
||||
@@ -419,7 +419,7 @@ class boss_razorscale : public CreatureScript
|
||||
case EVENT_FLIGHT:
|
||||
phase = PHASE_FLIGHT;
|
||||
events.SetPhase(PHASE_FLIGHT);
|
||||
me->SetFlying(true);
|
||||
me->SetCanFly(true);
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
me->AttackStop();
|
||||
@@ -430,7 +430,7 @@ class boss_razorscale : public CreatureScript
|
||||
++FlyCount;
|
||||
return;
|
||||
case EVENT_LAND:
|
||||
me->SetFlying(false);
|
||||
me->SetCanFly(false);
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED);
|
||||
if (Creature* commander = ObjectAccessor::GetCreature(*me, instance ? instance->GetData64(DATA_EXPEDITION_COMMANDER) : 0))
|
||||
@@ -524,7 +524,7 @@ class boss_razorscale : public CreatureScript
|
||||
me->MonsterTextEmote(EMOTE_PERMA, 0, true);
|
||||
phase = PHASE_PERMAGROUND;
|
||||
events.SetPhase(PHASE_PERMAGROUND);
|
||||
me->SetFlying(false);
|
||||
me->SetCanFly(false);
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
me->RemoveAurasDueToSpell(SPELL_HARPOON_TRIGGER);
|
||||
|
||||
@@ -321,6 +321,7 @@ public:
|
||||
|
||||
void Reset()
|
||||
{
|
||||
//! HACK: Creature's can't have MOVEMENTFLAG_FLYING
|
||||
me->AddUnitMovementFlag(MOVEMENTFLAG_FLYING | MOVEMENTFLAG_HOVER);
|
||||
me->SetSpeed(MOVE_SWIM, 1.0f);
|
||||
me->SetSpeed(MOVE_RUN, 1.0f);
|
||||
|
||||
@@ -765,6 +765,7 @@ public:
|
||||
{
|
||||
currentPhase = PHASE_NONE;
|
||||
SummonTimer = 5000;
|
||||
//! HACK: Creature's can't have MOVEMENTFLAG_FLYING
|
||||
me->AddUnitMovementFlag(MOVEMENTFLAG_FLYING);
|
||||
me->RemoveAurasDueToSpell(SPELL_ORB_VISUAL);
|
||||
me->SetSpeed(MOVE_FLIGHT, 0.5f);
|
||||
|
||||
@@ -217,7 +217,7 @@ public:
|
||||
|
||||
void JustReachedHome()
|
||||
{
|
||||
me->SetFlying(false);
|
||||
me->SetCanFly(false);
|
||||
me->Dismount();
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
|
||||
if (Unit::GetCreature((*me), m_uiGraufGUID) == NULL)
|
||||
@@ -284,7 +284,7 @@ public:
|
||||
if (m_uiSpellHitCount >= 3)
|
||||
{
|
||||
Phase = SKADI;
|
||||
me->SetFlying(false);
|
||||
me->SetCanFly(false);
|
||||
me->Dismount();
|
||||
if (Creature* pGrauf = me->SummonCreature(CREATURE_GRAUF, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 3*IN_MILLISECONDS))
|
||||
{
|
||||
@@ -328,7 +328,7 @@ public:
|
||||
if (m_uiMountTimer && m_uiMountTimer <= diff)
|
||||
{
|
||||
me->Mount(DATA_MOUNT);
|
||||
me->SetFlying(true);
|
||||
me->SetCanFly(true);
|
||||
m_uiMountTimer = 0;
|
||||
} else m_uiMountTimer -= diff;
|
||||
|
||||
|
||||
@@ -91,12 +91,6 @@ enum SvalaPhase
|
||||
INTRO,
|
||||
NORMAL,
|
||||
SACRIFICING,
|
||||
SVALADEAD
|
||||
};
|
||||
|
||||
enum SvalaPoint
|
||||
{
|
||||
POINT_FALL_GROUND = 1,
|
||||
};
|
||||
|
||||
#define DATA_INCREDIBLE_HULK 2043
|
||||
@@ -158,15 +152,11 @@ public:
|
||||
summons.DespawnAll();
|
||||
me->RemoveAllAuras();
|
||||
|
||||
if (Phase > INTRO)
|
||||
{
|
||||
me->SetFlying(true);
|
||||
me->SetLevitate(true);
|
||||
}
|
||||
|
||||
if (Phase > NORMAL)
|
||||
Phase = NORMAL;
|
||||
|
||||
me->SetDisableGravity(Phase == NORMAL);
|
||||
|
||||
introTimer = 1 * IN_MILLISECONDS;
|
||||
introPhase = 0;
|
||||
arthasGUID = 0;
|
||||
@@ -178,17 +168,6 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
void JustReachedHome()
|
||||
{
|
||||
if (Phase > INTRO)
|
||||
{
|
||||
me->SetFlying(false);
|
||||
me->SetLevitate(false);
|
||||
me->SetOrientation(1.58f);
|
||||
me->SendMovementFlagUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
void EnterCombat(Unit* /*who*/)
|
||||
{
|
||||
Talk(SAY_AGGRO);
|
||||
@@ -240,44 +219,13 @@ public:
|
||||
Talk(SAY_SLAY);
|
||||
}
|
||||
|
||||
void DamageTaken(Unit* attacker, uint32 &damage)
|
||||
{
|
||||
if (Phase == SVALADEAD)
|
||||
{
|
||||
if (attacker != me)
|
||||
damage = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
if (damage >= me->GetHealth())
|
||||
{
|
||||
if (Phase == SACRIFICING)
|
||||
SetEquipmentSlots(false, EQUIP_UNEQUIP, EQUIP_NO_CHANGE, EQUIP_NO_CHANGE);
|
||||
|
||||
damage = 0;
|
||||
Phase = SVALADEAD;
|
||||
me->InterruptNonMeleeSpells(true);
|
||||
me->RemoveAllAuras();
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetHealth(1);
|
||||
|
||||
SetCombatMovement(false);
|
||||
me->HandleEmoteCommand(EMOTE_ONESHOT_FLYDEATH);
|
||||
me->GetMotionMaster()->MoveFall(POINT_FALL_GROUND);
|
||||
}
|
||||
}
|
||||
|
||||
void MovementInform(uint32 motionType, uint32 pointId)
|
||||
{
|
||||
if (motionType != EFFECT_MOTION_TYPE)
|
||||
return;
|
||||
|
||||
if (pointId == POINT_FALL_GROUND)
|
||||
me->DealDamage(me, me->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/)
|
||||
{
|
||||
if (Phase == SACRIFICING)
|
||||
SetEquipmentSlots(false, EQUIP_UNEQUIP, EQUIP_NO_CHANGE, EQUIP_NO_CHANGE);
|
||||
|
||||
me->HandleEmoteCommand(EMOTE_ONESHOT_FLYDEATH);
|
||||
|
||||
summons.DespawnAll();
|
||||
|
||||
if (instance)
|
||||
@@ -325,8 +273,6 @@ public:
|
||||
break;
|
||||
case 2:
|
||||
arthas->CastSpell(me, SPELL_TRANSFORMING_CHANNEL, false);
|
||||
me->SetFlying(true);
|
||||
me->SetLevitate(true);
|
||||
pos.Relocate(me);
|
||||
pos.m_positionZ += 8.0f;
|
||||
me->GetMotionMaster()->MoveTakeoff(0, pos, 3.30078125f);
|
||||
@@ -382,14 +328,13 @@ public:
|
||||
introTimer = 13800;
|
||||
break;
|
||||
case 8:
|
||||
me->SetFlying(false);
|
||||
me->SetLevitate(false);
|
||||
me->SendMovementFlagUpdate();
|
||||
pos.Relocate(me);
|
||||
pos.m_positionX = me->GetHomePosition().GetPositionX();
|
||||
pos.m_positionY = me->GetHomePosition().GetPositionY();
|
||||
pos.m_positionZ = 90.6065f;
|
||||
me->GetMotionMaster()->MoveLand(0, pos, 6.247422f);
|
||||
me->SetDisableGravity(false, true);
|
||||
me->SetHover(true);
|
||||
++introPhase;
|
||||
introTimer = 3000;
|
||||
break;
|
||||
@@ -403,7 +348,8 @@ public:
|
||||
break;
|
||||
}
|
||||
}
|
||||
else introTimer -= diff;
|
||||
else
|
||||
introTimer -= diff;
|
||||
|
||||
return;
|
||||
}
|
||||
@@ -414,33 +360,29 @@ public:
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
if (me->IsWithinMeleeRange(me->getVictim()) && me->HasUnitMovementFlag(MOVEMENTFLAG_LEVITATING))
|
||||
{
|
||||
me->SetFlying(false);
|
||||
me->SetLevitate(false);
|
||||
me->SendMovementFlagUpdate();
|
||||
}
|
||||
|
||||
if (sinsterStrikeTimer <= diff)
|
||||
{
|
||||
DoCast(me->getVictim(), SPELL_SINSTER_STRIKE);
|
||||
sinsterStrikeTimer = urand(5 * IN_MILLISECONDS, 9 * IN_MILLISECONDS);
|
||||
} else sinsterStrikeTimer -= diff;
|
||||
}
|
||||
else
|
||||
sinsterStrikeTimer -= diff;
|
||||
|
||||
if (callFlamesTimer <= diff)
|
||||
{
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true))
|
||||
{
|
||||
DoCast(target, SPELL_CALL_FLAMES);
|
||||
callFlamesTimer = urand(10 * IN_MILLISECONDS, 20 * IN_MILLISECONDS);
|
||||
}
|
||||
} else callFlamesTimer -= diff;
|
||||
}
|
||||
else callFlamesTimer -= diff;
|
||||
|
||||
if (!sacrificed)
|
||||
{
|
||||
if (HealthBelowPct(50))
|
||||
{
|
||||
if (Unit* sacrificeTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 80, true))
|
||||
if (Unit* sacrificeTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 80.0f, true))
|
||||
{
|
||||
if (instance)
|
||||
instance->SetData64(DATA_SACRIFICED_PLAYER, sacrificeTarget->GetGUID());
|
||||
@@ -450,8 +392,6 @@ public:
|
||||
DoCast(sacrificeTarget, SPELL_RITUAL_PREPARATION);
|
||||
|
||||
SetCombatMovement(false);
|
||||
me->SetFlying(true);
|
||||
me->SetLevitate(true);
|
||||
|
||||
Phase = SACRIFICING;
|
||||
sacrePhase = 0;
|
||||
|
||||
@@ -218,7 +218,7 @@ public:
|
||||
m_uiActivedCreatureGUID = temp->GetGUID();
|
||||
temp->CastSpell(me, SPELL_CHANNEL_SPIRIT_TO_YMIRON, true);
|
||||
temp->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
|
||||
temp->SetLevitate(true);
|
||||
temp->SetDisableGravity(true);
|
||||
switch (m_uiActiveOrder[m_uiActivedNumber])
|
||||
{
|
||||
case 0: m_bIsActiveWithBJORN = true; break;
|
||||
|
||||
@@ -92,7 +92,7 @@ public:
|
||||
me->RemoveUnitMovementFlag(MOVEMENTFLAG_SWIMMING);
|
||||
me->RemoveUnitMovementFlag(MOVEMENTFLAG_JUMPING);
|
||||
me->SetSpeed(MOVE_SWIM, 0.85f, true);
|
||||
me->AddUnitMovementFlag(MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_LEVITATING);
|
||||
me->AddUnitMovementFlag(MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_DISABLE_GRAVITY);
|
||||
break;
|
||||
case 19:
|
||||
me->SetUnitMovementFlags(MOVEMENTFLAG_JUMPING);
|
||||
|
||||
Reference in New Issue
Block a user