Advertisement
aesnike

BENTENGA

Oct 29th, 2024 (edited)
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.99 KB | None | 0 0
  1. local Players = game:GetService("Players")
  2. local RunService = game:GetService("RunService")
  3.  
  4. local SETTINGS = {
  5. SAFE_POSITION_OFFSET = 2,
  6. PART_BOUNDARY_RADIUS_MULTIPLIER = 0.6
  7. }
  8.  
  9. local Player = Players.LocalPlayer
  10. local HumanoidRootPart = Player.Character:WaitForChild("HumanoidRootPart")
  11. local boundaryData = {}
  12.  
  13. local function getBoundaryRadius(part)
  14. local size = part.Size
  15. return math.max(size.X, size.Y, size.Z) * SETTINGS.PART_BOUNDARY_RADIUS_MULTIPLIER
  16. end
  17.  
  18. local function findSafePosition(part, radius)
  19. local direction = (Vector2.new(HumanoidRootPart.Position.X, HumanoidRootPart.Position.Z) - Vector2.new(part.Position.X, part.Position.Z)).Unit
  20. local safePosition2D = Vector2.new(part.Position.X, part.Position.Z) + direction * (radius + SETTINGS.SAFE_POSITION_OFFSET)
  21. return Vector3.new(safePosition2D.X, HumanoidRootPart.Position.Y, safePosition2D.Y)
  22. end
  23.  
  24. local function dodge()
  25. for part, data in pairs(boundaryData) do
  26. if part and part.Parent then
  27. local radius = data.Radius
  28. local distance = (Vector2.new(HumanoidRootPart.Position.X, HumanoidRootPart.Position.Z) - Vector2.new(part.Position.X, part.Position.Z)).Magnitude
  29. if distance < radius then
  30. local safePosition = findSafePosition(part, radius)
  31. HumanoidRootPart.CFrame = CFrame.new(safePosition)
  32. return
  33. end
  34. else
  35. boundaryData[part] = nil
  36. end
  37. end
  38. end
  39.  
  40. local function onCharacterAdded(newCharacter)
  41. HumanoidRootPart = newCharacter:WaitForChild("HumanoidRootPart")
  42. end
  43.  
  44. local function onPartAdded(part)
  45. if part:IsA("BasePart") and part.Material == Enum.Material.Neon then
  46. boundaryData[part] = {Radius = getBoundaryRadius(part)}
  47. end
  48. end
  49.  
  50. workspace.DescendantAdded:Connect(onPartAdded)
  51. Player.CharacterAdded:Connect(onCharacterAdded)
  52.  
  53. RunService.Heartbeat:Connect(function()
  54. if HumanoidRootPart then
  55. dodge()
  56. end
  57. end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement