So my problem is that whenever the code shown below runs through, it’s supposed reset the player’s walkspeed if it is greater than what it’s supposed to be. However, when I try to say “and not check”, it still runs the code anyway. Is :FindFirstChild() running properly here and I should use a different technique, or is something else happening.
function module.ChangeSpeed(hitCharacter, Duration, Type, Multiplier)
local hitHumanoid = hitCharacter:FindFirstChild("Humanoid")
local walkSpeedStatMax = hitCharacter:FindFirstChild("Stats").SpeedStat.BaseSpeedStat.Value
local curSpeedStat = hitCharacter:FindFirstChild("Stats").SpeedStat
if Type == "SpeedDown" then
local particleEmitter = game.ReplicatedStorage.EffectImages.SpeedEmitter:Clone()
particleEmitter.Parent = workspace
particleEmitter.Size = Vector3.new(hitCharacter.HumanoidRootPart.Size.X, hitCharacter.HumanoidRootPart.Size.Y, hitCharacter.HumanoidRootPart.Size.Z * 2)
particleEmitter.CFrame = hitCharacter.HumanoidRootPart.CFrame
--particleEmitter.ParticleEmitter.Rate = math.floor(particleEmitter.ParticleEmitter.Rate * Multiplier)
local weld = Instance.new("WeldConstraint")
weld.Parent = hitCharacter.HumanoidRootPart
weld.Part0 = hitCharacter.HumanoidRootPart
weld.Part1 = particleEmitter
particleEmitter.ParticleEmitter.EmissionDirection = Enum.NormalId.Bottom
particleEmitter.ParticleEmitter.Rotation = NumberRange.new(180, 180)
local reducedWalkSpeed = math.floor(hitHumanoid.WalkSpeed / Multiplier)
--set the character's walkspeed
hitHumanoid.WalkSpeed = reducedWalkSpeed
curSpeedStat.Value = hitHumanoid.WalkSpeed
wait(Duration)
hitHumanoid.WalkSpeed = hitHumanoid.WalkSpeed * Multiplier
particleEmitter:Destroy()
weld:Destroy()
local check = hitCharacter:FindFirstChild("SpeedEmitter")
if hitHumanoid.WalkSpeed > walkSpeedStatMax and not check then
hitHumanoid.WalkSpeed = walkSpeedStatMax
end
curSpeedStat.Value = hitHumanoid.WalkSpeed
return
elseif Type == "SpeedUp" then
local particleEmitter = game.ReplicatedStorage.EffectImages.SpeedEmitter:Clone()
particleEmitter.Parent = workspace
particleEmitter.Size = Vector3.new(hitCharacter.HumanoidRootPart.Size.X, hitCharacter.HumanoidRootPart.Size.Y, hitCharacter.HumanoidRootPart.Size.Z * 2)
particleEmitter.CFrame = hitCharacter.HumanoidRootPart.CFrame
particleEmitter.ParticleEmitter.Rate = math.floor(particleEmitter.ParticleEmitter.Rate * Multiplier)
local weld = Instance.new("WeldConstraint")
weld.Parent = hitCharacter.HumanoidRootPart
weld.Part0 = hitCharacter.HumanoidRootPart
weld.Part1 = particleEmitter
particleEmitter.ParticleEmitter.EmissionDirection = Enum.NormalId.Top
local IncreasedWalkSpeed = math.floor(hitHumanoid.WalkSpeed * Multiplier)
--set the character's walkspeed
hitHumanoid.WalkSpeed = IncreasedWalkSpeed
curSpeedStat.Value = hitHumanoid.WalkSpeed
wait(Duration)
hitHumanoid.WalkSpeed = hitHumanoid.WalkSpeed - (IncreasedWalkSpeed - walkSpeedStatMax)
particleEmitter:Destroy()
weld:Destroy()
local check = hitCharacter:FindFirstChild("SpeedEmitter")
if hitHumanoid.WalkSpeed < walkSpeedStatMax and not check then
hitHumanoid.WalkSpeed = walkSpeedStatMax
end
curSpeedStat.Value = hitHumanoid.WalkSpeed
return
end
end