Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- // Services \\ --
- local ReplicatedStorage = game:GetService("ReplicatedStorage")
- local UserInputService = game:GetService("UserInputService")
- local Players = game:GetService("Players")
- local RunService = game:GetService("RunService")
- local TweenService = game:GetService("TweenService")
- -- // Variables \\ --
- local Player = Players.LocalPlayer
- local PlayerGui = Player:WaitForChild("PlayerGui")
- local PlayerInteractivesUI = PlayerGui:WaitForChild("PlayerInteractivesUI")
- local Character = Player.Character or Player.CharacterAdded:Wait()
- local HumRP = Character:WaitForChild("HumanoidRootPart")
- -- // Main \\ --
- local RANGE = 9
- local ClosestPlayer = nil
- local Pressed = false
- local OptionEvents = {
- Close = function(options)
- options:TweenSize(UDim2.new(0, 0, 0, 0), "In", "Linear", 0.3, false, function()
- options:Destroy()
- Pressed = false
- end)
- end
- }
- local function GetPlayersInRange(players)
- local PlayersInRange = {}
- table.remove(players, table.find(players, Player, 1))
- for _,player in pairs(players) do
- local Character = player.Character or nil
- if Character ~= nil then
- local pHumRP = Character:WaitForChild("HumanoidRootPart")
- if (pHumRP.Position-HumRP.Position).Magnitude <= RANGE then
- table.insert(PlayersInRange, {P = player, R = (pHumRP.Position-HumRP.Position).Magnitude})
- end
- end
- end
- if #PlayersInRange > 0 then
- table.sort(PlayersInRange, function(a, b)
- return a.R < b.R
- end)
- return PlayersInRange
- else
- return nil
- end
- end
- local function DisplayInteractives(playersInRange)
- for i = 1, #playersInRange do
- local v = playersInRange[i]
- local p = v.P
- local pCharacter = p.Character
- local ButtonClone = script.InteractiveUI:Clone()
- ButtonClone.EButton.ClickIcon.Visible = i > 1 and true or false
- ButtonClone.EButton.Label.Visible = not ButtonClone.EButton.ClickIcon.Visible
- ButtonClone.EButton.Player.Value = p.Name
- ButtonClone.Parent = PlayerInteractivesUI
- ButtonClone.Adornee = pCharacter.HumanoidRootPart
- print("Displayed on screen!")
- end
- end
- local function DestroyInteractives()
- for _,oldV in pairs(PlayerInteractivesUI:GetChildren()) do
- if oldV.Name ~= "Options" then
- oldV:Destroy()
- end
- end
- end
- UserInputService.InputBegan:Connect(function(Input, GameProcessed)
- if GameProcessed then return end
- if not Pressed and ClosestPlayer ~= nil then
- if Input.KeyCode == Enum.KeyCode.E then
- Pressed = true
- print("Pressed")
- local pCharacter = ClosestPlayer.Character
- local WorldVector = workspace.Camera:WorldToScreenPoint(pCharacter.HumanoidRootPart.Position)
- local Connections = {}
- local OptionsClone = script.Options:Clone()
- OptionsClone.Position = UDim2.new(0, WorldVector.X, 0, WorldVector.Y)
- OptionsClone.Parent = PlayerInteractivesUI
- OptionsClone:TweenSize(UDim2.new(0.179, 0, 0.39, 0), "Out", "Bounce", 0.4)
- for _,option in pairs(OptionsClone:GetChildren()) do
- if option:IsA("ImageButton") then
- Connections[option.Name] = option.MouseButton1Click:Connect(function()
- OptionEvents[option.Name](OptionsClone)
- end)
- end
- end
- end
- end
- end)
- RunService.RenderStepped:Connect(function()
- DestroyInteractives()
- if not Pressed then
- local PlayersInRange = GetPlayersInRange(Players:GetPlayers())
- if PlayersInRange ~= nil then
- print("Got players in range!")
- ClosestPlayer = PlayersInRange[1].P
- DisplayInteractives(PlayersInRange)
- else
- ClosestPlayer = nil
- print("Nil")
- end
- end
- end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement