can you modify that lua script so all of this will happen when 1 specified player says q also when he says q altplayer1 will start spinning at speed of 5 and 1 specified player will hover 15 studs above the ground and all of that stops when 1 specified player says e, also if he says e he will stop flying above the ground 
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")

-- Your specified players:
local specifiedPlayer = Players:FindFirstChild("desktopitemleader")
local altPlayer1 = Players:FindFirstChild("desktoptoolbox")
local altPlayer2 = Players:FindFirstChild("desktopcardboard")
local altPlayer3 = Players:FindFirstChild("minidesktopspeaker")
local altplayer4 = Players:FindFirstChild("altplayer4")
local altplayer5 = Players:FindFirstChild("altplayer5")

-- Cache humanoid root parts, heads and torsos function for clarity
local function getPart(character, partName)
    if character then
        return character:FindFirstChild(partName)
    end
    return nil
end

local function updateAltPlayer1()
    if specifiedPlayer and specifiedPlayer.Character and altPlayer1 and altPlayer1.Character then
        local specifiedHRP = getPart(specifiedPlayer.Character, "HumanoidRootPart")
        local altHRP = getPart(altPlayer1.Character, "HumanoidRootPart")

        if specifiedHRP and altHRP then
            -- Position altplayer1 4 studs above specifiedPlayer with no rotation
            altHRP.CFrame = CFrame.new(specifiedHRP.Position + Vector3.new(0, 4, 0))
        end
    end
end

local function updateAltPlayer2Head()
    if altPlayer1 and altPlayer1.Character and altPlayer2 and altPlayer2.Character then
        local alt1Head = getPart(altPlayer1.Character, "Head")
        local alt2Head = getPart(altPlayer2.Character, "Head")

        if alt1Head and alt2Head then
            -- altplayer2 head = altplayer1 head rotated 90 degrees up (around X axis)
            local rotatedCFrame = alt1Head.CFrame * CFrame.Angles(-math.rad(90), 0, 0)
            alt2Head.CFrame = rotatedCFrame
        end
    end
end

local function updateAltPlayer3Head()
    if altPlayer1 and altPlayer1.Character and altPlayer3 and altPlayer3.Character then
        local alt1Head = getPart(altPlayer1.Character, "Head")
        local alt3Head = getPart(altPlayer3.Character, "Head")

        if alt1Head and alt3Head then
            -- altplayer3 head = altplayer1 head rotated -90 degrees (90 down) around X axis
            local rotatedCFrame = alt1Head.CFrame * CFrame.Angles(math.rad(90), 0, 0)
            alt3Head.CFrame = rotatedCFrame
        end
    end
end

local function updateAltplayer4And5Heads()
    -- First get torsos of altPlayer2 and altPlayer3
    if altPlayer2 and altPlayer2.Character and altPlayer3 and altPlayer3.Character and altplayer4 and altplayer5 then
        local torso2 = getPart(altPlayer2.Character, "Torso")
        local torso3 = getPart(altPlayer3.Character, "Torso")
        local head4 = altplayer4:FindFirstChild("Head")
        local head5 = altplayer5:FindFirstChild("Head")

        if torso2 and head4 then
            head4.CFrame = torso2.CFrame * CFrame.new(0, -2, 0)
        end

        if torso3 and head5 then
            head5.CFrame = torso3.CFrame * CFrame.new(0, -2, 0)
        end
    end
end

RunService.Heartbeat:Connect(function()
    updateAltPlayer1()
    updateAltPlayer2Head()
    updateAltPlayer3Head()
    updateAltplayer4And5Heads()
end)