Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local function startAutoParry()
- local player = game.Players.LocalPlayer
- local character = player.Character or player.CharacterAdded:Wait()
- local replicatedStorage = game:GetService("ReplicatedStorage")
- local runService = game:GetService("RunService")
- local parryButtonPress = replicatedStorage.Remotes.ParryButtonPress
- local ballsFolder = workspace:WaitForChild("Balls")
- local players = game:GetService("Players")
- local localPlayer = players.LocalPlayer
- local function printMessage()
- print("Auto Parry Enabled")
- end
- printMessage()
- local function onCharacterAdded(newCharacter)
- character = newCharacter
- end
- player.CharacterAdded:Connect(onCharacterAdded)
- local focusedBall = nil
- local function chooseNewFocusedBall()
- local balls = ballsFolder:GetChildren()
- focusedBall = nil
- for _, ball in ipairs(balls) do
- if ball:GetAttribute("realBall") == true then
- focusedBall = ball
- break
- end
- end
- end
- chooseNewFocusedBall()
- local function timeUntilImpact(ballVelocity, distanceToPlayer, playerVelocity)
- local directionToPlayer = (character.HumanoidRootPart.Position - focusedBall.Position).Unit
- local velocityTowardsPlayer = ballVelocity:Dot(directionToPlayer) - playerVelocity:Dot(directionToPlayer)
- if velocityTowardsPlayer <= 100 then
- return math.huge
- end
- local distanceToBeCovered = distanceToPlayer - 50
- return distanceToBeCovered / velocityTowardsPlayer
- end
- local BASE_THRESHOLD = 0.15
- local VELOCITY_SCALING_FACTOR = 0
- local function getDynamicThreshold(ballVelocityMagnitude)
- local adjustedThreshold = BASE_THRESHOLD - (ballVelocityMagnitude * VELOCITY_SCALING_FACTOR)
- return math.max(0.17, adjustedThreshold)
- end
- local function checkBallDistance()
- if not character:FindFirstChild("Highlight") then return end
- local charPos = character.PrimaryPart.Position
- local charVel = character.PrimaryPart.Velocity
- if focusedBall and not focusedBall.Parent then
- chooseNewFocusedBall()
- end
- if not focusedBall then return end
- local ball = focusedBall
- local distanceToPlayer = (ball.Position - charPos).Magnitude
- if distanceToPlayer < 26 then
- game.ReplicatedStorage.Remotes.ParryButtonPress:Fire()
- return
- end
- local timeToImpact = timeUntilImpact(ball.Velocity, distanceToPlayer, charVel)
- local dynamicThreshold = getDynamicThreshold(ball.Velocity.Magnitude)
- if timeToImpact < dynamicThreshold then
- parryButtonPress:Fire()
- end
- end
- heartbeatConnection = game:GetService("RunService").Heartbeat:Connect(function()
- checkBallDistance()
- end)
- end
- local function stopAutoParry()
- if heartbeatConnection then
- heartbeatConnection:Disconnect()
- heartbeatConnection = nil
- end
- end
- startAutoParry()
Add Comment
Please, Sign In to add comment