So in my game that i'm trying to make, I have 2 folders set in the player. leaderstats and hiddenstats. hiddenstats is for the hidden stats that make the game work in the background (though they also aren't saving getting to that later) so in my speed pad the player's speed jumps to 30 but when I go to add to the hidden stat extraspeed, and walk again. It does not add the speed onto the player's speed as shown here:

local speedBoost = script.Parent
local mainSpeedValue = 30 -- how much the speed pad changes your speed to
local OriginalValue = 25 -- how much the normal player gets in the game

local function SteppedOn(part)
	local parent = part.Parent
	local data = game.Players:GetPlayerFromCharacter(parent)
	if game.Players:GetPlayerFromCharacter(parent) then
		parent.Humanoid.WalkSpeed = mainSpeedValue + data.hiddenstats.extraspeed.Value
		wait(5)
		parent.Humanoid.WalkSpeed = OriginalValue + data.hiddenstats.extraspeed.Value
	end
end

speedBoost.Touched:connect(SteppedOn)

The launching speed pad also does not work like in Speed Run 4:

debounce = true 
                       -- Debounce variable (so your function doesn't repeat itself)
function YourWalkspeedIsChanged(hit)    -- Function, with "hit" being the argument (or the object that touches your part)
	local player = game.Players:GetPlayerFromCharacter(hit.Parent)
    if hit.Parent:findFirstChild("Humanoid") ~= nil and debounce == true then -- Seeing if there's humanoid
        debounce = false                    -- "Locks" function, so it won't repeat
        hit.Parent.Humanoid.WalkSpeed = 25 + player.hiddenstats.extraspeed.Value  -- Changes the walkspeed
        debounce = true                 -- "Unlocks" function, so the function can run again
    end
end

script.Parent.Touched:connect(YourWalkspeedIsChanged)   -- Connection line, to run the function

My coin will also not work with the other hidden stat, extracoins in hiddenstats:

local db = true
script.Parent.Touched:connect(function(hit)
	if hit.Parent:FindFirstChild("Humanoid") ~= nil then
		if db == true then
			db = false
			script.Parent.Transparency = 1
			local player = game.Players:GetPlayerFromCharacter(hit.Parent)
			local respawntime = script.Parent.RespawnTime.Value
			player.leaderstats.Coins.Value = player.leaderstats.Coins.Value + 5 + player.hiddenstats.extracoins.Value -- change 'Coins' to your currency name.
			script.Sound:Play()
			wait(1)
			script.Parent.Transparency = 1
			wait(respawntime) -- time before respawn
			db = true
			script.Parent.Transparency = 0
		end
	end	
end)

I have no clue why these problems are occuring as it looks to be all connected properly and no errors related to these scripts are occuring in the output.

Credit to whoever I borrowed these codes from as some are from a video and scripting helpers question that I looked up for help.

Sorry if i asked too many questions at once, or it sounds like im begging. But my game will not work because these codes will not work.