fix(Core/Movement): fix multiple creature movement issues (#5097)

This commit is contained in:
Footman
2021-04-09 21:56:19 +03:00
committed by GitHub
parent 91a39f27d9
commit c32cd06a78
22 changed files with 7181 additions and 93 deletions

View File

@@ -208,7 +208,6 @@ public:
minchar->SetUInt32Value(UNIT_NPC_EMOTESTATE, 0);
minchar->SetCanFly(false);
minchar->SetDisableGravity(false);
minchar->SetHover(false);
minchar->RemoveAllAuras();
minchar->GetMotionMaster()->MoveCharge(4629.3711f, 2782.6089f, 401.5301f, SPEED_CHARGE / 3.0f);
}
@@ -226,7 +225,6 @@ public:
me->StopMoving();
me->SetCanFly(true);
me->SetDisableGravity(true);
me->SetHover(true);
me->SendMovementFlagUpdate();
me->GetMotionMaster()->MovePoint(POINT_MINCHAR, mincharPos);
}
@@ -246,7 +244,6 @@ public:
{
me->SetCanFly(false);
me->SetDisableGravity(false);
me->SetHover(false);
_JustReachedHome();
if (bEnteredCombat)
@@ -284,7 +281,6 @@ public:
case POINT_GROUND:
me->SetCanFly(false);
me->SetDisableGravity(false);
me->SetHover(false);
me->SetReactState(REACT_AGGRESSIVE);
if (Unit* target = me->SelectVictim())
AttackStart(target);
@@ -492,7 +488,6 @@ public:
me->DisableSpline();
me->SetCanFly(true);
me->SetDisableGravity(true);
me->SetHover(true);
me->SendMovementFlagUpdate();
me->GetMotionMaster()->MoveTakeoff(POINT_AIR, airPos, 0.642857f * 7.0f);
break;

View File

@@ -281,8 +281,8 @@ public:
if (!_summoned)
{
me->SetDisableGravity(true);
me->SetCanFly(true);
me->SetDisableGravity(true);
}
}
@@ -353,8 +353,8 @@ public:
instance->SetBossState(DATA_SINDRAGOSA, FAIL);
if (_summoned)
{
me->SetDisableGravity(false);
me->SetCanFly(false);
me->SetDisableGravity(false);
}
}
@@ -396,7 +396,6 @@ public:
me->setActive(true);
me->SetCanFly(true);
me->SetDisableGravity(true);
me->SetHover(true);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
me->SetSpeed(MOVE_RUN, 4.28571f);
float moveTime = me->GetExactDist(&SindragosaFlyInPos) / (me->GetSpeed(MOVE_RUN) * 0.001f);
@@ -422,9 +421,8 @@ public:
{
case POINT_FROSTWYRM_LAND:
me->setActive(false);
me->SetDisableGravity(false);
me->SetHover(false);
me->SetCanFly(false);
me->SetDisableGravity(false);
me->SetSpeed(MOVE_RUN, me->GetCreatureTemplate()->speed_run);
me->SetHomePosition(SindragosaLandPos);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
@@ -451,8 +449,8 @@ public:
case POINT_LAND_GROUND:
{
_isInAirPhase = false;
me->SetDisableGravity(false);
me->SetCanFly(false);
me->SetDisableGravity(false);
me->SetSpeed(MOVE_RUN, me->GetCreatureTemplate()->speed_run);
me->SetReactState(REACT_AGGRESSIVE);
if (Unit* target = me->SelectVictim())
@@ -603,7 +601,6 @@ public:
me->StopMoving();
me->SetCanFly(true);
me->SetDisableGravity(true);
me->SetHover(true);
me->SendMovementFlagUpdate();
me->GetMotionMaster()->MoveTakeoff(POINT_TAKEOFF, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() + 20.0f, 10.0f);
events.CancelEventGroup(EVENT_GROUP_LAND_PHASE);
@@ -1395,7 +1392,6 @@ public:
{
me->SetCanFly(true);
me->SetDisableGravity(true);
me->SetHover(true);
}
}
@@ -1406,7 +1402,6 @@ public:
{
me->SetCanFly(false);
me->SetDisableGravity(false);
me->SetHover(false);
}
}
@@ -1451,7 +1446,6 @@ public:
me->setActive(false);
me->SetCanFly(false);
me->SetDisableGravity(false);
me->SetHover(false);
me->SetHomePosition(SpinestalkerLandPos);
me->SetFacingTo(SpinestalkerLandPos.GetOrientation());
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
@@ -1532,7 +1526,6 @@ public:
{
me->SetCanFly(true);
me->SetDisableGravity(true);
me->SetHover(true);
}
}
@@ -1543,7 +1536,6 @@ public:
{
me->SetCanFly(false);
me->SetDisableGravity(false);
me->SetHover(false);
}
}
@@ -1590,7 +1582,6 @@ public:
me->setActive(false);
me->SetCanFly(false);
me->SetDisableGravity(false);
me->SetHover(false);
me->SetHomePosition(RimefangLandPos);
me->SetFacingTo(RimefangLandPos.GetOrientation());
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
@@ -1599,7 +1590,6 @@ public:
{
me->SetCanFly(false);
me->SetDisableGravity(false);
me->SetHover(false);
me->SetReactState(REACT_DEFENSIVE);
if (Unit* victim = me->SelectVictim())
AttackStart(victim);
@@ -1644,7 +1634,6 @@ public:
me->AttackStop();
me->SetCanFly(true);
me->SetDisableGravity(true);
me->SetHover(true);
me->SendMovementFlagUpdate();
float floorZ = me->GetMapHeight(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ());
float destZ;

View File

@@ -798,13 +798,12 @@ public:
if (_phase == PHASE_OUTRO)
{
if (!me->HasByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_HOVER))
if (!me->IsLevitating())
damage = me->GetHealth() > 1 ? 1 : 0;
else if (damage >= me->GetHealth()) // dying...
{
damage = me->GetHealth() - 1;
me->SetDisableGravity(false);
me->RemoveByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER);
me->SendMonsterMove(me->GetPositionX() + 0.25f, me->GetPositionY(), 840.86f, 300, SPLINEFLAG_FALLING);
me->m_positionZ = 840.86f;
me->SetOrientation(0.0f);
@@ -1546,7 +1545,6 @@ public:
theLichKing->CastSpell((Unit*)nullptr, SPELL_SOUL_BARRAGE, TRIGGERED_IGNORE_CAST_IN_PROGRESS);
sCreatureTextMgr->SendSound(theLichKing, SOUND_PAIN, CHAT_MSG_MONSTER_YELL, 0, TEXT_RANGE_NORMAL, TEAM_NEUTRAL, false);
theLichKing->SetDisableGravity(true);
theLichKing->SetByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER);
theLichKing->GetMotionMaster()->MovePoint(0, OutroFlying);
_events.ScheduleEvent(EVENT_OUTRO_AFTER_SOUL_BARRAGE, 3000);
@@ -2656,9 +2654,8 @@ public:
break;
case EVENT_MOVE_TO_DROP_POS:
me->AddUnitState(UNIT_STATE_NO_ENVIRONMENT_UPD);
me->SetDisableGravity(false);
me->SetHover(false);
me->SetCanFly(false);
me->SetDisableGravity(false);
me->GetMotionMaster()->MovePoint(POINT_DROP_PLAYER, _destPoint, false);
me->SetDisableGravity(true, true);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
@@ -2666,9 +2663,8 @@ public:
case EVENT_MOVE_TO_SIPHON_POS:
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); // just in case if passenger disappears so quickly that EVENT_MOVE_TO_DROP_POS is never executed
{ int32 bp0 = 80; me->CastCustomSpell(me, 1557, &bp0, nullptr, nullptr, true); }
me->SetDisableGravity(true);
me->SetHover(true);
me->SetCanFly(true);
me->SetDisableGravity(true);
me->SendMovementFlagUpdate();
me->GetMotionMaster()->MovePoint(POINT_START_SIPHON, _destPoint);
break;

View File

@@ -989,7 +989,6 @@ public:
me->SetReactState(REACT_PASSIVE);
me->SetCanFly(true);
me->SetDisableGravity(true);
me->SetHover(true);
me->SendMovementFlagUpdate();
}
@@ -1112,7 +1111,6 @@ public:
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
me->SetCanFly(false);
me->SetDisableGravity(false);
me->SetHover(false);
me->SetReactState(REACT_AGGRESSIVE);
DoZoneInCombat(nullptr, 150.0f);
}
@@ -3048,9 +3046,8 @@ public:
{
npc_icc_spire_frostwyrmAI(Creature* creature) : ScriptedAI(creature)
{
me->SetDisableGravity(true);
me->SetHover(true);
me->SetCanFly(true);
me->SetDisableGravity(true);
}
EventMap events;
@@ -3078,9 +3075,8 @@ public:
{
if (type == EFFECT_MOTION_TYPE && id == 1)
{
me->SetDisableGravity(false);
me->SetHover(false);
me->SetCanFly(false);
me->SetDisableGravity(false);
if (Player* p = SelectTargetFromPlayerList(100.0f))
{
@@ -3329,6 +3325,7 @@ public:
events.ScheduleEvent(1, urand(3000, 10000)); // Crypt Scarabs
events.ScheduleEvent(2, urand(15000, 25000)); // Dark Mending
events.ScheduleEvent(3, urand(8000, 15000)); // Web Wrap
me->AddUnitState(UNIT_STATE_NO_ENVIRONMENT_UPD);
}
void MoveInLineOfSight(Unit* who) override
@@ -3374,15 +3371,11 @@ public:
me->SetDisableGravity(false);
me->SetOrientation(0.0f);
me->NearTeleportTo(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation());
me->ClearUnitState(UNIT_STATE_NO_ENVIRONMENT_UPD);
}
}
}
bool CanAIAttack(const Unit* /*target*/) const override
{
return !me->IsLevitating();
}
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
@@ -3540,7 +3533,6 @@ public:
if (summon->GetPositionZ() > 220.0f)
{
summon->SetDisableGravity(true);
summon->SetHover(true);
summon->SetWalk(true);
}
}