public static void DoFootstepSounds(Mobile mobile, double frame) { MobileSoundData data; if (!m_Data.TryGetValue(mobile.Serial, out data)) { data = new MobileSoundData(mobile); m_Data.Add(mobile.Serial, data); } bool play = (data.LastFootstep < 0.5d && frame >= 0.5d) || (data.LastFootstep > 0.5d && frame < 0.5d); if (mobile.IsMounted && !mobile.IsRunning && frame > 0.5d) play = false; if (play) { if (mobile.IsMounted && mobile.IsRunning) { int sfx = Utility.RandomValue(0, m_StepMountedSFX.Length - 1); m_Audio.PlaySound(m_StepMountedSFX[sfx]); } else { int sfx = Utility.RandomValue(0, m_StepSFX.Length - 1); m_Audio.PlaySound(m_StepSFX[sfx]); } } data.LastFootstep = frame; }
public static void DoFootstepSounds(Mobile mobile, double frame) { if (!mobile.Body.IsHumanoid || mobile.Flags.IsHidden) return; MobileSoundData data; if (!m_Data.TryGetValue(mobile.Serial, out data)) { data = new MobileSoundData(mobile); m_Data.Add(mobile.Serial, data); } bool play = (data.LastFrame < 0.5d && frame >= 0.5d) || (data.LastFrame > 0.5d && frame < 0.5d); if (mobile.IsMounted && !mobile.IsRunning && frame > 0.5d) play = false; if (play) { float volume = 1f; int distanceFromPlayer = Utility.DistanceBetweenTwoPoints(mobile.DestinationPosition.Tile, WorldModel.Entities.GetPlayerEntity().DestinationPosition.Tile); if (distanceFromPlayer > 4) volume = 1f - (distanceFromPlayer - 4) * 0.05f; if (mobile.IsMounted && mobile.IsRunning) { int sfx = Utility.RandomValue(0, m_StepMountedSFX.Length - 1); m_Audio.PlaySound(m_StepMountedSFX[sfx], Core.Audio.AudioEffects.PitchVariation, volume); } else { int sfx = Utility.RandomValue(0, m_StepSFX.Length - 1); m_Audio.PlaySound(m_StepSFX[sfx], Core.Audio.AudioEffects.PitchVariation, volume); } } data.LastFrame = frame; }