
Key Required

local player = game.Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:WaitForChild("Humanoid")
local humanoidRootPart = character:WaitForChild("HumanoidRootPart")
local Debris = game:GetService("Debris")
local cooldown = false
local immunityTag = "SallyRollImmunity"
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "SallyRollGUI"
screenGui.Parent = player:WaitForChild("PlayerGui")
screenGui.ResetOnSpawn = false
local rollButton = Instance.new("ImageButton")
rollButton.Size = UDim2.new(0, 80, 0, 80)
rollButton.Position = UDim2.new(1, -210, 0.5, 0)
rollButton.BackgroundTransparency = 1
rollButton.Name = "RollButton"
rollButton.Parent = screenGui
rollButton.Image = "rbxassetid://5743593320"
local imageOff = "rbxassetid://5743593320"
local imageOn = "rbxassetid://5743593320"
local extraImage = Instance.new("ImageLabel")
extraImage.Size = UDim2.new(0, 60, 0, 60)
extraImage.Position = UDim2.new(1, -201, 0.5, -22)
extraImage.BackgroundTransparency = 1
extraImage.Image = ""
extraImage.Parent = screenGui
local circle = Instance.new("Frame")
circle.Size = UDim2.new(0, 60, 0, 60)
circle.Position = UDim2.new(0.86, -30, 0.88, -30)
circle.AnchorPoint = Vector2.new(0.5, 0.5)
circle.BackgroundColor3 = Color3.new(1, 1, 1)
circle.BackgroundTransparency = 1
circle.ZIndex = 2
circle.Parent = rollButton
local circleCorner = Instance.new("UICorner", circle)
circleCorner.CornerRadius = UDim.new(0.5, 0)
local cooldownImage = Instance.new("ImageLabel")
cooldownImage.Size = UDim2.new(1, 0, 1, 0)
cooldownImage.Position = UDim2.new(0, 0, 0, 0)
cooldownImage.BackgroundTransparency = 1
cooldownImage.Image = ""
cooldownImage.Visible = false
cooldownImage.Parent = circle
local function startCooldown()
cooldown = true
cooldownImage.Visible = true
rollButton.Image = imageOff
circle.BackgroundTransparency = 0.5
wait(26)
rollButton.Image = imageOff
circle.BackgroundTransparency = 1
cooldownImage.Visible = false
cooldown = false
end
local function activateRoll()
if cooldown or not character or not humanoidRootPart then return end
cooldown = true
rollButton.Image = imageOn
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://131093058595075"
local animTrack = humanoid:LoadAnimation(animation)
animTrack:Play()
local direction1 = humanoidRootPart.CFrame.LookVector * 30
local velocity1 = Instance.new("BodyVelocity")
velocity1.Velocity = direction1
velocity1.MaxForce = Vector3.new(100000, 0, 100000)
velocity1.P = 5000
velocity1.Parent = humanoidRootPart
Debris:AddItem(velocity1, 0.3)
wait(0.3)
velocity1:Destroy()
local direction2 = humanoidRootPart.CFrame.LookVector * 55
local velocity2 = Instance.new("BodyVelocity")
velocity2.Velocity = direction2
velocity2.MaxForce = Vector3.new(100000, 0, 100000)
velocity2.P = 5000
velocity2.Parent = humanoidRootPart
Debris:AddItem(velocity2, 0.7)
local immuneTag = Instance.new("BoolValue")
immuneTag.Name = immunityTag
immuneTag.Parent = character
Debris:AddItem(immuneTag, 1)
wait(1)
startCooldown()
end
-- Detectar tanto el clic como la tecla "Z"
rollButton.MouseButton1Click:Connect(activateRoll)
game:GetService("UserInputService").InputBegan:Connect(function(input, gameProcessed)
if gameProcessed then return end
if input.KeyCode == Enum.KeyCode.T then
activateRoll()
end
end)
humanoid.Died:Connect(function()
if screenGui then screenGui:Destroy() end
end)
player.CharacterAdded:Connect(function()
if screenGui then screenGui:Destroy() end
end)
local player = game.Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:WaitForChild("Humanoid")
humanoid:GetPropertyChangedSignal("Health"):Connect(function()
if character:FindFirstChild("SallyRollImmunity") then
humanoid.Health = humanoid.MaxHealth
end
end)



And if you're going to test it: Yes, it can be used in other games, but it doesn't have the slide animation