Advertisement
HowToRoblox

MinimapHandler

Nov 3rd, 2022 (edited)
2,863
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 6.26 KB | None | 0 0
  1. -------------------------------SETTINGS-------------------------------
  2.  
  3. local zoom = 3
  4. local maxZoom = 20
  5. local canScrollToZoom = true
  6. local zoomSpeed = 1/7
  7.  
  8. local openMapKeys = {Enum.KeyCode.M, Enum.KeyCode.CapsLock}
  9.  
  10. local displayTeams = true
  11.  
  12. local markerSize = UDim2.new(0.04, 0, 0.04, 0)
  13.  
  14. local defaultColor = Color3.fromRGB(115, 115, 115)
  15. local allyColor = Color3.fromRGB(71, 134, 132)
  16. local enemyColor = Color3.fromRGB(116, 59, 59)
  17.  
  18. ----------------------------------------------------------------------
  19.  
  20.  
  21. --Variables
  22. local frame = script.Parent:WaitForChild("MinimapClipping")
  23. local map = frame:WaitForChild("MapImage")
  24. local plrPointer = frame:WaitForChild("PlayerPointer")
  25.  
  26. local uis = game:GetService("UserInputService")
  27. local mapOpen = false
  28.  
  29. local mapCorners = workspace:WaitForChild("MINIMAP CORNERS")
  30. local corner1, corner2 = mapCorners.Corner1, mapCorners.Corner2
  31.  
  32. local xLowerBound, zLowerBound = corner1.Position.X, corner1.Position.Z
  33. local xUpperBound, zUpperBound = corner2.Position.X, corner2.Position.Z
  34.  
  35. local realWidth = xUpperBound - xLowerBound
  36. local realHeight = zUpperBound - zLowerBound
  37.  
  38. local plr = game.Players.LocalPlayer
  39. local char = plr.Character or plr.CharacterAdded:Wait()
  40. local hrp = char:WaitForChild("HumanoidRootPart")
  41.  
  42. local runs = game:GetService("RunService")
  43. local cam = workspace.CurrentCamera
  44.  
  45. local playerMarkersFolder = Instance.new("Folder")
  46. playerMarkersFolder.Name = "PLAYER MARKERS"
  47. playerMarkersFolder.Parent = map
  48.  
  49.  
  50. --Handling markers on the minimap, such as for other players or landmarks on the map
  51. function createMarker(markerName, positionToDisplay, imageToDisplay, colorToDisplay)
  52.  
  53.     local marker = playerMarkersFolder:FindFirstChild(markerName)
  54.     if not marker then
  55.  
  56.         marker = Instance.new("ViewportFrame")
  57.         marker.Name = markerName
  58.         marker.BorderSizePixel = 0
  59.         marker.BackgroundTransparency = 1
  60.         marker.Size = markerSize
  61.  
  62.         local imageDisplay = Instance.new("Part")
  63.         imageDisplay.Shape = Enum.PartType.Cylinder
  64.         imageDisplay.Orientation = Vector3.new(0, -90, 0)
  65.         imageDisplay.Size = Vector3.new(1, 1, 1)
  66.         imageDisplay.Color = colorToDisplay or defaultColor
  67.  
  68.         local decal = Instance.new("Decal", imageDisplay)
  69.         decal.Face = Enum.NormalId.Right
  70.         decal.Texture = imageToDisplay
  71.  
  72.         local vpfCamera = Instance.new("Camera")
  73.         vpfCamera.CFrame = imageDisplay.CFrame * CFrame.Angles(0, math.rad(90), 0) + Vector3.new(0, 0, 1.25)
  74.  
  75.         marker.CurrentCamera = vpfCamera
  76.         vpfCamera.Parent = marker
  77.         imageDisplay.Parent = marker
  78.     end
  79.  
  80.     local x = positionToDisplay.X - xLowerBound
  81.     local z = positionToDisplay.Z - zLowerBound
  82.  
  83.     local xScaled = x / realWidth
  84.     local zScaled = z / realHeight
  85.  
  86.     marker.Position = UDim2.new(xScaled, 0, zScaled, 0)
  87.     marker.Parent = playerMarkersFolder
  88. end
  89.  
  90. function destroyMarker(markerName)
  91.     local marker = playerMarkersFolder:FindFirstChild(markerName)
  92.  
  93.     if marker then
  94.         marker:Destroy()
  95.     end
  96. end
  97.  
  98.  
  99. runs.Heartbeat:Connect(function()
  100.  
  101.     --Moving the map
  102.     if not mapOpen then
  103.         frame.Size = UDim2.new(0.168, 0, 0.311, 0)
  104.         frame.Position = UDim2.new(0.015, 0, 0.971, 0)
  105.  
  106.         map.AnchorPoint = Vector2.new(0.5, 0.5)
  107.         map.Size = UDim2.new(zoom, 0, zoom, 0)
  108.  
  109.         plrPointer.Size = UDim2.new(0.159, 0, 0.159, 0)
  110.  
  111.         local guiSize = map.AbsoluteSize
  112.  
  113.         local plrPos = hrp.Position
  114.         local plrX = xUpperBound - plrPos.X
  115.         local plrZ = zUpperBound - plrPos.Z
  116.  
  117.         local plrXscaled = plrX / realWidth
  118.         local plrZscaled = plrZ / realHeight
  119.  
  120.         plrXscaled = ((plrXscaled - 0.5) * zoom) + 0.5
  121.         plrZscaled = ((plrZscaled - 0.5) * zoom) + 0.5
  122.  
  123.         map.Position = UDim2.new(plrXscaled, 0, plrZscaled, 0)
  124.  
  125.         plrPointer.Position = UDim2.new(0.5, 0, 0.5, 0)
  126.  
  127.     else
  128.         frame.Size = UDim2.new(0.259, 0, 0.605, 0)
  129.         frame.Position = UDim2.new(0.37, 0, 0.739, 0)
  130.  
  131.         map.Size = UDim2.new(1, 0, 1, 0)
  132.         map.Position = UDim2.new(0.5, 0, 0.5, 0)
  133.  
  134.         plrPointer.Size = UDim2.new(0.08, 0, 0.08, 0)
  135.  
  136.         local x = hrp.Position.X - xLowerBound
  137.         local z = hrp.Position.Z - zLowerBound
  138.  
  139.         local xScaled = x / realWidth
  140.         local zScaled = z / realHeight
  141.  
  142.         plrPointer.Position = UDim2.new(xScaled, 0, zScaled, 0)
  143.     end
  144.  
  145.  
  146.     --Rotating the pointer
  147.     plrPointer.AnchorPoint = Vector2.new(0.5, 0.5)
  148.  
  149.     local plrRot = -hrp.Orientation.Y
  150.     plrPointer.Rotation = plrRot
  151.  
  152.  
  153.     --Displaying other players
  154.     for i, plrInGame in pairs(game.Players:GetPlayers()) do
  155.  
  156.         if plrInGame ~= plr and plrInGame.Character then
  157.  
  158.             local inGameChar = plrInGame.Character
  159.             local inGameHRP = inGameChar:FindFirstChild("HumanoidRootPart")
  160.  
  161.             if inGameHRP and inGameChar.Humanoid.Health > 0 then
  162.  
  163.                 local playerImage = game.Players:GetUserThumbnailAsync(plrInGame.UserId, Enum.ThumbnailType.HeadShot, Enum.ThumbnailSize.Size48x48)
  164.  
  165.                 if displayTeams then
  166.                     if plr.Team == plrInGame.Team then
  167.                         createMarker(plrInGame.Name, inGameHRP.Position, playerImage, allyColor)
  168.  
  169.                     else
  170.                         local worldPosition = inGameHRP.Position
  171.                         local _, visible = cam:WorldToScreenPoint(worldPosition)
  172.  
  173.                         if visible then
  174.  
  175.                             local rayParams = RaycastParams.new()
  176.                             rayParams.FilterType = Enum.RaycastFilterType.Blacklist
  177.                             rayParams.FilterDescendantsInstances = {inGameChar, char}
  178.                             local rayResult = workspace:Raycast(cam.CFrame.Position, inGameHRP.Position - cam.CFrame.Position, rayParams)
  179.                            
  180.                             if not rayResult then
  181.                                 createMarker(plrInGame.Name, inGameHRP.Position, playerImage, enemyColor)
  182.                                
  183.                             else
  184.                                 destroyMarker(plrInGame.Name)
  185.                             end
  186.                         else
  187.                             destroyMarker(plrInGame.Name)
  188.                         end
  189.                     end
  190.  
  191.                 else
  192.                     createMarker(plrInGame.Name, inGameHRP.Position, playerImage)
  193.                 end
  194.             end
  195.         end
  196.     end
  197. end)
  198.  
  199. --Detect inputs to expand/minimize the map
  200. uis.InputBegan:Connect(function(input, p)
  201.  
  202.     if not p and table.find(openMapKeys, input.KeyCode) then
  203.         mapOpen = not mapOpen
  204.     end
  205. end)
  206.  
  207. --Detect inputs to change the zoom of the map
  208. uis.InputChanged:Connect(function(input, p)
  209.  
  210.     if canScrollToZoom and input.UserInputType == Enum.UserInputType.MouseWheel then
  211.  
  212.         local mousePos = uis:GetMouseLocation()
  213.         local hovering = plr.PlayerGui:GetGuiObjectsAtPosition(mousePos.X, mousePos.Y)
  214.  
  215.         if table.find(hovering, frame) then
  216.  
  217.             zoom = math.clamp(zoom + (input.Position.Z * zoomSpeed), 1, maxZoom)
  218.         end
  219.     end
  220. end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement