Advertisement
Guest User

Player Interactives (Club Magma)

a guest
Feb 16th, 2020
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.53 KB | None | 0 0
  1. -- // Services \\ --
  2. local ReplicatedStorage = game:GetService("ReplicatedStorage")
  3. local UserInputService = game:GetService("UserInputService")
  4. local Players = game:GetService("Players")
  5. local RunService = game:GetService("RunService")
  6. local TweenService = game:GetService("TweenService")
  7.  
  8. -- // Variables \\ --
  9. local Player = Players.LocalPlayer
  10. local PlayerGui = Player:WaitForChild("PlayerGui")
  11.  
  12. local PlayerInteractivesUI = PlayerGui:WaitForChild("PlayerInteractivesUI")
  13.  
  14. local Character = Player.Character or Player.CharacterAdded:Wait()
  15. local HumRP = Character:WaitForChild("HumanoidRootPart")
  16.  
  17. -- // Main \\ --
  18. local RANGE = 9
  19. local ClosestPlayer = nil
  20. local Pressed = false
  21.  
  22. local OptionEvents = {
  23.     Close = function(options)
  24.         options:TweenSize(UDim2.new(0, 0, 0, 0), "In", "Linear", 0.3, false, function()
  25.             options:Destroy()
  26.             Pressed = false
  27.         end)
  28.     end
  29. }
  30.  
  31. local function GetPlayersInRange(players)
  32.     local PlayersInRange = {}
  33.    
  34.     table.remove(players, table.find(players, Player, 1))
  35.    
  36.     for _,player in pairs(players) do
  37.         local Character = player.Character or nil
  38.         if Character ~= nil then
  39.             local pHumRP = Character:WaitForChild("HumanoidRootPart")
  40.             if (pHumRP.Position-HumRP.Position).Magnitude <= RANGE then
  41.                 table.insert(PlayersInRange, {P = player, R = (pHumRP.Position-HumRP.Position).Magnitude})
  42.             end
  43.         end
  44.     end
  45.    
  46.     if #PlayersInRange > 0 then
  47.         table.sort(PlayersInRange, function(a, b)
  48.             return a.R < b.R
  49.         end)
  50.        
  51.         return PlayersInRange
  52.     else
  53.         return nil
  54.     end
  55. end
  56.  
  57. local function DisplayInteractives(playersInRange)
  58.     for i = 1, #playersInRange do
  59.         local v = playersInRange[i]
  60.         local p = v.P
  61.         local pCharacter = p.Character
  62.            
  63.         local ButtonClone = script.InteractiveUI:Clone()
  64.         ButtonClone.EButton.ClickIcon.Visible = i > 1 and true or false
  65.         ButtonClone.EButton.Label.Visible = not ButtonClone.EButton.ClickIcon.Visible
  66.         ButtonClone.EButton.Player.Value = p.Name
  67.         ButtonClone.Parent = PlayerInteractivesUI
  68.         ButtonClone.Adornee = pCharacter.HumanoidRootPart
  69.        
  70.         print("Displayed on screen!")
  71.     end
  72. end
  73.  
  74. local function DestroyInteractives()
  75.     for _,oldV in pairs(PlayerInteractivesUI:GetChildren()) do
  76.         if oldV.Name ~= "Options" then
  77.             oldV:Destroy()
  78.         end
  79.     end
  80. end
  81.  
  82. UserInputService.InputBegan:Connect(function(Input, GameProcessed)
  83.     if GameProcessed then return end
  84.     if not Pressed and ClosestPlayer ~= nil then
  85.         if Input.KeyCode == Enum.KeyCode.E then
  86.             Pressed = true
  87.             print("Pressed")
  88.             local pCharacter = ClosestPlayer.Character
  89.             local WorldVector = workspace.Camera:WorldToScreenPoint(pCharacter.HumanoidRootPart.Position)
  90.    
  91.             local Connections = {}
  92.            
  93.             local OptionsClone = script.Options:Clone()
  94.             OptionsClone.Position = UDim2.new(0, WorldVector.X, 0, WorldVector.Y)
  95.             OptionsClone.Parent = PlayerInteractivesUI
  96.             OptionsClone:TweenSize(UDim2.new(0.179, 0, 0.39, 0), "Out", "Bounce", 0.4)
  97.            
  98.             for _,option in pairs(OptionsClone:GetChildren()) do
  99.                 if option:IsA("ImageButton") then
  100.                     Connections[option.Name] = option.MouseButton1Click:Connect(function()
  101.                         OptionEvents[option.Name](OptionsClone)
  102.                     end)
  103.                 end
  104.             end
  105.            
  106.         end
  107.     end
  108. end)
  109.  
  110. RunService.RenderStepped:Connect(function()
  111.     DestroyInteractives()
  112.  
  113.     if not Pressed then
  114.         local PlayersInRange = GetPlayersInRange(Players:GetPlayers())
  115.        
  116.         if PlayersInRange ~= nil then
  117.             print("Got players in range!")
  118.             ClosestPlayer = PlayersInRange[1].P
  119.             DisplayInteractives(PlayersInRange)
  120.         else
  121.             ClosestPlayer = nil
  122.             print("Nil")
  123.         end
  124.     end
  125. end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement