Advertisement
HowToRoblox

PartyGuiHandler

Oct 25th, 2022
2,111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 6.15 KB | None | 0 0
  1. local open = script.Parent:WaitForChild("Open")
  2. local main = script.Parent:WaitForChild("Main"); main.Visible = false
  3. local close = main:WaitForChild("Close")
  4.  
  5. local rs = game.ReplicatedStorage:WaitForChild("PartyRS")
  6. local re = rs:WaitForChild("RE")
  7. local parties = rs:WaitForChild("Parties")
  8.  
  9. local inParty = nil
  10.  
  11.  
  12. function formatSeconds(totalSecs)
  13.    
  14.     local mins = tostring(math.floor(totalSecs / 60))
  15.     local secs = tostring(totalSecs - (mins * 60))
  16.    
  17.     if string.len(mins) < 2 then
  18.         mins = "0" .. mins
  19.     end
  20.     if string.len(secs) < 2 then
  21.         secs = "0" .. secs
  22.     end
  23.    
  24.     local formatted = mins .. ":" .. secs
  25.     return formatted
  26. end
  27.  
  28. function displayPage(requestedPage)
  29.     for i, page in pairs(main:GetChildren()) do
  30.        
  31.         if page:IsA("Frame") then
  32.             if page.Name == requestedPage.Name then
  33.                 page.Visible = true
  34.             else
  35.                 page.Visible = false
  36.             end
  37.         end
  38.     end
  39. end
  40.  
  41. function getAvatar(playerName)
  42.     if game.Players:FindFirstChild(playerName) then
  43.         local uid = game.Players[playerName].UserId
  44.        
  45.         local image = game.Players:GetUserThumbnailAsync(uid, Enum.ThumbnailType.HeadShot, Enum.ThumbnailSize.Size100x100)
  46.         return image
  47.     end
  48. end
  49.  
  50. function displayParties()
  51.     for i, partyFrame in pairs(main.PartiesPage.PartiesList:GetChildren()) do
  52.         if partyFrame:IsA("Frame") then
  53.             partyFrame:Destroy()
  54.         end
  55.     end
  56.    
  57.     local partyFrames = {}
  58.    
  59.     for i, party in pairs(parties:GetChildren()) do
  60.         local partyFrame = script.PartyPageParty:Clone()
  61.         table.insert(partyFrames, partyFrame)
  62.        
  63.         local function updatePartyFrame()          
  64.             partyFrame:WaitForChild("NameLabel").Text = party.Name
  65.            
  66.             local leader = nil
  67.             local members = {}
  68.            
  69.             for x, member in pairs(party.Members:GetChildren()) do
  70.                 if member:FindFirstChild("Leader") then
  71.                     leader = member.Name
  72.                 else
  73.                     table.insert(members, member.Name)
  74.                 end
  75.             end
  76.            
  77.             partyFrame.Leader.Image = getAvatar(leader)
  78.            
  79.             table.sort(members, function(a, b)
  80.                 return a < b
  81.             end)
  82.             for x, member in pairs(members) do
  83.                 local memberImage = script.PartyPageMember:Clone()
  84.                 memberImage.Image = getAvatar(member)
  85.                
  86.                 memberImage.Parent = partyFrame.MembersList
  87.             end
  88.            
  89.             partyFrame.NumberOfMembers.Text = #party.Members:GetChildren() .. "/" .. party.MaximumMembers.Value
  90.         end
  91.         updatePartyFrame()
  92.         party.Members.ChildAdded:Connect(updatePartyFrame)
  93.         party.Members.ChildRemoved:Connect(updatePartyFrame)
  94.        
  95.         partyFrame.Join.MouseButton1Click:Connect(function()
  96.             re:FireServer("JOIN", party.Name)
  97.         end)
  98.     end
  99.    
  100.     table.sort(partyFrames, function(a, b)
  101.         return a.NameLabel.Text < b.NameLabel.Text
  102.     end)
  103.     for i, partyFrame in pairs(partyFrames) do
  104.         partyFrame.Parent = main.PartiesPage.PartiesList
  105.     end
  106.    
  107.     displayPage(main.PartiesPage)
  108. end
  109.  
  110. function displayInParty(party)
  111.     local partyFolder = typeof(party) == "string" and parties[party] or party
  112.    
  113.     local function updatePartyFrame()
  114.         for i, memberFrame in pairs(main.InPartyPage.MembersList:GetChildren()) do
  115.             if memberFrame:IsA("Frame") then
  116.                 memberFrame:Destroy()
  117.             end
  118.         end
  119.        
  120.         main.InPartyPage.NameLabel.Text = partyFolder.Name
  121.        
  122.         local leader = nil
  123.         local members = {}
  124.        
  125.         for i, member in pairs(partyFolder.Members:GetChildren()) do
  126.             if member:FindFirstChild("Leader") then
  127.                 leader = member.Name
  128.             else
  129.                 table.insert(members, member.Name)
  130.             end
  131.         end
  132.         table.sort(members, function(a, b)
  133.             return a < b
  134.         end)
  135.        
  136.         local leaderFrame = script.InPartyPageMember:Clone()
  137.         leaderFrame.NameLabel.Text = leader
  138.         leaderFrame.Avatar.Image = getAvatar(leader)
  139.         leaderFrame.Kick.Visible = false
  140.        
  141.         leaderFrame.Parent = main.InPartyPage.MembersList
  142.        
  143.         if leader == game.Players.LocalPlayer.Name then
  144.             leaderFrame.BackgroundColor3 = Color3.fromRGB(244, 236, 193)
  145.             main.InPartyPage.Queue.BackgroundColor3 = Color3.fromRGB(67, 168, 87)
  146.         else
  147.             main.InPartyPage.Queue.BackgroundColor3 = Color3.fromRGB(172, 167, 165)
  148.         end
  149.        
  150.         for i, member in pairs(members) do
  151.             local memberFrame = script.InPartyPageMember:Clone()
  152.            
  153.             memberFrame.NameLabel.Text = member
  154.             memberFrame.Avatar.Image = getAvatar(member)
  155.             memberFrame.Leader.Visible = false
  156.            
  157.             if member == game.Players.LocalPlayer.Name then
  158.                 memberFrame.BackgroundColor3 = Color3.fromRGB(244, 236, 193)
  159.             end
  160.            
  161.             if leader == game.Players.LocalPlayer.Name then
  162.                 memberFrame.Kick.Visible = true
  163.                
  164.                 memberFrame.Kick.MouseButton1Click:Connect(function()
  165.                     re:FireServer("KICK", member)
  166.                 end)
  167.             end
  168.            
  169.             memberFrame.Parent = main.InPartyPage.MembersList
  170.         end
  171.     end
  172.     updatePartyFrame()
  173.     party.Members.ChildAdded:Connect(updatePartyFrame)
  174.     party.Members.ChildRemoved:Connect(updatePartyFrame)
  175.    
  176.     displayPage(main.InPartyPage)
  177.    
  178.     while inParty == party do
  179.         if party:FindFirstChild("IN QUEUE") then
  180.             main.InPartyPage.Queue.Text = formatSeconds(party["IN QUEUE"].Value)
  181.            
  182.         else
  183.             main.InPartyPage.Queue.Text = "Queue"
  184.         end
  185.         task.wait(0.2)
  186.     end
  187. end
  188.  
  189. function displayCreateParty()
  190.     displayPage(main.CreatePage)
  191.    
  192.     main.CreatePage.MaxMembers.Text = ""
  193. end
  194.  
  195.  
  196. open.MouseButton1Click:Connect(function()
  197.    
  198.     if main.Visible == false then
  199.         main.Visible = true
  200.        
  201.         if inParty then
  202.             displayInParty(inParty)
  203.         else
  204.             displayParties()
  205.         end
  206.        
  207.     else
  208.         main.Visible = false
  209.     end
  210. end)
  211. close.MouseButton1Click:Connect(function()
  212.     main.Visible = false
  213. end)
  214.  
  215.  
  216. main.PartiesPage.Create.MouseButton1Click:Connect(function()
  217.     displayCreateParty()
  218. end)
  219.  
  220. main.CreatePage.Back.MouseButton1Click:Connect(function()
  221.     displayParties()
  222. end)
  223.  
  224. main.CreatePage.Create.MouseButton1Click:Connect(function()
  225.     local maxMembers = tonumber(main.CreatePage.MaxMembers.Text)
  226.     if maxMembers then
  227.        
  228.         re:FireServer("CREATE", maxMembers)
  229.     end
  230. end)
  231.  
  232.  
  233. main.InPartyPage.Leave.MouseButton1Click:Connect(function()
  234.     re:FireServer("LEAVE")
  235. end)
  236.  
  237. main.InPartyPage.Queue.MouseButton1Click:Connect(function()
  238.     re:FireServer("QUEUE")
  239. end)
  240.  
  241.  
  242. re.OnClientEvent:Connect(function(instruction, party)
  243.    
  244.     if instruction == "JOIN" then
  245.         inParty = party
  246.         displayInParty(party)
  247.        
  248.     elseif instruction == "LEAVE" then
  249.         inParty = nil
  250.         displayParties()
  251.     end
  252. end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement