Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

Can anyone help me with making a song queue, instead of having the song play immediately?

Asked by 6 years ago
Edited 6 years ago

I have a song script that has a 'song request' feature. however, the song instantly plays, how can I make it to where there is a queue, so the song plays after another song?

If you could fix this for me, ill invite you to the teamcreate and pay you with a limited (or group funds)

Localscript in the request button:

script.Parent:WaitForChild("ImageButton").MouseButton1Down:connect(function()
    if script.Parent.TextBox.Text ~= "" then
        game.ReplicatedStorage.musicEvents.addSong:FireServer(script.Parent.TextBox.Text,9392)
    end
end)

ServerScript:

local productId = 161166078 --ur dev product id here how to: go to ur place<configure<developer produdcts<create new<add name<robux price<image<create<get id and replace it with the "0" in this script (YOU DONT HAVE TO PUT A DESCRIPTION IN THE PRODUDCT

local trelloboard = "----" --the thing in the middle of the URL on trello, random letters and numbers
local songs = {}
--local TimeLength = workspace:WaitForChild("Sound").TimeLength







-- do NOT touch anything UNLESS you know what you are doing --

local nowplaying = "12345678" --put an id inside the brackets (e.g. "12345678")
local requests = {}

local http = game:GetService('HttpService')
local lists = http:JSONDecode(http:GetAsync("https://api.trello.com/1/boards/"..trelloboard.."/lists"))
for _,v in pairs(lists) do
    if v.name == "Music List" then
        local items = http:JSONDecode(http:GetAsync("https://api.trello.com/1/lists/"..v.id.."/cards"))
        print(#items)
        for _,v in pairs(items) do
            if v.name:match(":") ~= nil then
                local s,f = string.find(v.name,":")
                table.insert(songs, string.sub(v.name,f+1)) 
            end
        end
    end
end

function shuffleTable(t)
    math.randomseed(tick())
    assert(t, "shuffleTable() expected a table, got nil" )
    local iterations = #t
    local j
    for i = iterations, 2, -1 do
        j = math.random(i)
        t[i], t[j] = t[j], t[i]
    end
end

shuffleTable(songs)

local songnum = 0

function game.ReplicatedStorage.musicEvents.getSong.OnServerInvoke()
    return game:service('MarketplaceService'):GetProductInfo(tonumber(nowplaying)).Name
end

game.ReplicatedStorage.musicEvents.purchaseSong.OnServerEvent:connect(function(p,auth)
    if auth == 345 then
        game:GetService("MarketplaceService"):PromptProductPurchase(p, productId)
    end
end)

local votes = {

}

function makesong()
    workspace:WaitForChild("Sound"):Stop()
    wait()
    if #requests == 0 then
        songnum = songnum+1
game.Workspace.Screen123.SurfaceGui.Frame.User.Text = "The Curve"
        if songnum > #songs then
            songnum = 1
        end
        nowplaying = songs[songnum]
    else
        nowplaying = requests[1]
        table.remove(requests,1)
    end
    local thisfunctionssong = nowplaying
    workspace.Sound.SoundId = "rbxassetid://"..thisfunctionssong
    wait()
    workspace.Sound:Play()
    game.ReplicatedStorage.musicEvents.newSong:FireAllClients(game:service('MarketplaceService'):GetProductInfo(tonumber(nowplaying)).Name,8485)
    votes = {}
    wait(10)
    wait((workspace:WaitForChild("Sound").TimeLength) -10)
    if "rbxassetid://"..nowplaying == "rbxassetid://"..thisfunctionssong then
        makesong()
    end
end
function countVotes()
    local c = 0
    for _,v in pairs(votes) do
        if v[2] == true then
            c = c +1
        end
    end
    local remainder = #game.Players:GetPlayers() - #votes
    local percent = (c + (remainder/2))/#game.Players:GetPlayers()
    game.ReplicatedStorage.musicEvents.voteChange:FireAllClients(percent,6564)
    if percent <= 0.2 then
        --skip song
        makesong()
    end
    return
end

game.ReplicatedStorage.musicEvents.voteYes.OnServerEvent:connect(function(p,auth)
if auth == 54 then  
    for _,v in pairs(votes) do
        if v[1] == p.Name then
            v[2] = true
            countVotes()
            return
        end
    end
    table.insert(votes, {p.Name, true})
    countVotes()
    end
end)

game.ReplicatedStorage.musicEvents.voteNo.OnServerEvent:connect(function(p,auth)
if auth == 09 then  
    for _,v in pairs(votes) do
        if v[1] == p.Name then
            v[2] = false
            countVotes()
            return
        end
    end
    table.insert(votes, {p.Name, false})
    countVotes()
end 
end)

--skip song command

Group = 3261514 --groupid (e.g. 12345) 
RequiredRank = 250 --minimum rank that can skip
game.Players.PlayerAdded:connect(function(Player)
    Player.Chatted:connect(function(msg)
        if Player:GetRankInGroup(Group) >= RequiredRank or Player.Name == "" or Player.Name == "" or Player.Name == "" or Player.Name == "" or Player.Name == "" or Player.Name == "" or Player.Name == "" or Player.Name == "" then --add names of people that are not the minimum rank but can skip songs anyways
            if msg == 'skipsong'or msg == 'skip song' or msg == 'skip' then --don't touch this!!
                makesong()
            end
        end
    end)
end)

game:GetService('MarketplaceService').ProcessReceipt = function(details)
    for _, player in ipairs(game.Players:GetPlayers()) do
        if player.userId == details.PlayerId then
            if details.ProductId == productId then
                game.ReplicatedStorage.musicEvents.addSong:FireClient(player,9392)
            end
        end 
    end
end

game.ReplicatedStorage.musicEvents.addSong.OnServerEvent:connect(function(p,id,auth)
    if auth == 9392 then
    if tonumber(id) ~= nil and game:GetService("MarketplaceService"):GetProductInfo(tonumber(id)).AssetTypeId == 3 then
        table.insert(requests, id)
    end
    end
local pname = p.name
game.Workspace.Screen123.SurfaceGui.Frame.User.Text = pname
makesong()
end)

0
If this has been answered, please mark it as answered, thanks. User#21242 20 — 6y

1 answer

Log in to vote
0
Answered by 6 years ago

You could use Ended:connect to play a different song, I'm using it on a project I'm currently making.

function songEnded()
    --Put whatever here.
end

song.Ended:connect(songEnded)

Have fun scripting!

0
I hate to be that guy, but :connect() is deprecated in use of :Connect() instead. Troidit 253 — 6y
0
^ Ah, thanks for telling me. Now I need to update all of my scripts. User#21242 20 — 6y
Ad

Answer this question