mirror of
https://github.com/mangosfour/server.git
synced 2025-12-14 16:37:01 +00:00
[c12646] Fix client movement freeze after map change
This commit is contained in:
parent
bb2e19caeb
commit
94e26af71d
5 changed files with 24 additions and 20 deletions
|
|
@ -8650,7 +8650,7 @@ bool Unit::canDetectInvisibilityOf(Unit const* u) const
|
|||
return false;
|
||||
}
|
||||
|
||||
void Unit::UpdateSpeed(UnitMoveType mtype, bool forced, float ratio)
|
||||
void Unit::UpdateSpeed(UnitMoveType mtype, bool forced, float ratio, bool ignoreChange)
|
||||
{
|
||||
// not in combat pet have same speed as owner
|
||||
switch (mtype)
|
||||
|
|
@ -8662,7 +8662,7 @@ void Unit::UpdateSpeed(UnitMoveType mtype, bool forced, float ratio)
|
|||
{
|
||||
if (Unit* owner = GetOwner())
|
||||
{
|
||||
SetSpeedRate(mtype, owner->GetSpeedRate(mtype), forced);
|
||||
SetSpeedRate(mtype, owner->GetSpeedRate(mtype), forced, ignoreChange);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
@ -8790,7 +8790,7 @@ void Unit::UpdateSpeed(UnitMoveType mtype, bool forced, float ratio)
|
|||
}
|
||||
}
|
||||
|
||||
SetSpeedRate(mtype, speed * ratio, forced);
|
||||
SetSpeedRate(mtype, speed * ratio, forced, ignoreChange);
|
||||
}
|
||||
|
||||
float Unit::GetSpeed(UnitMoveType mtype) const
|
||||
|
|
@ -8800,19 +8800,19 @@ float Unit::GetSpeed(UnitMoveType mtype) const
|
|||
|
||||
struct SetSpeedRateHelper
|
||||
{
|
||||
explicit SetSpeedRateHelper(UnitMoveType _mtype, bool _forced) : mtype(_mtype), forced(_forced) {}
|
||||
void operator()(Unit* unit) const { unit->UpdateSpeed(mtype, forced); }
|
||||
explicit SetSpeedRateHelper(UnitMoveType _mtype, bool _forced, bool _ignoreChange) : mtype(_mtype), forced(_forced), ignoreChange(_ignoreChange) {}
|
||||
void operator()(Unit* unit) const { unit->UpdateSpeed(mtype, forced, 1.0f, ignoreChange); }
|
||||
UnitMoveType mtype;
|
||||
bool forced;
|
||||
bool forced, ignoreChange;
|
||||
};
|
||||
|
||||
void Unit::SetSpeedRate(UnitMoveType mtype, float rate, bool forced)
|
||||
void Unit::SetSpeedRate(UnitMoveType mtype, float rate, bool forced, bool ignoreChange)
|
||||
{
|
||||
if (rate < 0)
|
||||
rate = 0.0f;
|
||||
|
||||
// Update speed only on change
|
||||
if (m_speed_rate[mtype] != rate)
|
||||
if (m_speed_rate[mtype] != rate || ignoreChange)
|
||||
{
|
||||
m_speed_rate[mtype] = rate;
|
||||
propagateSpeedChange();
|
||||
|
|
@ -9023,7 +9023,7 @@ void Unit::SetSpeedRate(UnitMoveType mtype, float rate, bool forced)
|
|||
SendMessageToSet(&data, false);
|
||||
}
|
||||
|
||||
CallForAllControlledUnits(SetSpeedRateHelper(mtype, forced), CONTROLLED_PET | CONTROLLED_GUARDIANS | CONTROLLED_CHARM | CONTROLLED_MINIPET);
|
||||
CallForAllControlledUnits(SetSpeedRateHelper(mtype, forced, ignoreChange), CONTROLLED_PET | CONTROLLED_GUARDIANS | CONTROLLED_CHARM | CONTROLLED_MINIPET);
|
||||
}
|
||||
|
||||
void Unit::SetDeathState(DeathState s)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue