float CHARACTER::GetMoveMotionSpeed() const
{
DWORD dwMode = GetMotionMode();
const CMotion * pkMotion = NULL;
if (!GetMountVnum())
pkMotion = CMotionManager::instance().GetMotion(GetRaceNum(), MAKE_MOTION_KEY(dwMode, (IsWalking() && IsPC()) ? MOTION_WALK : MOTION_RUN));
else
{
pkMotion = CMotionManager::instance().GetMotion(GetMountVnum(), MAKE_MOTION_KEY(MOTION_MODE_GENERAL, (IsWalking() && IsPC()) ? MOTION_WALK : MOTION_RUN));
if (!pkMotion)
pkMotion = CMotionManager::instance().GetMotion(GetRaceNum(), MAKE_MOTION_KEY(MOTION_MODE_HORSE, (IsWalking() && IsPC()) ? MOTION_WALK : MOTION_RUN));
}
if (pkMotion)
return -pkMotion->GetAccumVector().y / pkMotion->GetDuration();
else
{
#ifdef ENABLE_MOUNT_COSTUME_SYSTEM
if (GetRaceNum() >= 20101 && GetRaceNum() <=20299)
return 300.0f;
#endif
#ifdef ENABLE_PET_COSTUME_SYSTEM
if (GetRaceNum() >= 34001 && GetRaceNum() <=34099)
return 300.0f;
#endif
sys_err("cannot find motion (name %s race %d mode %d)", GetName(), GetRaceNum(), dwMode);
return 300.0f;
}
}