
KeylessUniversal

local Player = game.Players.LocalPlayer
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Debris = game:GetService("Debris")
local ScreenGui = Player.PlayerGui:FindFirstChild("MxDurrMobile")
if ScreenGui then ScreenGui:Destroy() end
ScreenGui = Instance.new("ScreenGui", Player.PlayerGui)
ScreenGui.Name = "MxDurrMobile"
ScreenGui.ResetOnSpawn = false
-- UI de Status
local StatusLabel = Instance.new("TextLabel", ScreenGui)
StatusLabel.Size = UDim2.new(0, 150, 0, 40)
StatusLabel.Position = UDim2.new(0.85, 0, 0.1, 0)
StatusLabel.BackgroundTransparency = 0.5
StatusLabel.BackgroundColor3 = Color3.new(0, 0, 0)
StatusLabel.TextColor3 = Color3.fromRGB(255, 165, 0)
StatusLabel.Font = Enum.Font.SourceSansBold
StatusLabel.TextSize = 20
StatusLabel.Text = "Status: Idle"
local EffectsLabel = Instance.new("TextLabel", ScreenGui)
EffectsLabel.Size = UDim2.new(0, 200, 0, 30)
EffectsLabel.Position = UDim2.new(0.05, 0, 0.2, 0)
EffectsLabel.BackgroundTransparency = 0.5
EffectsLabel.BackgroundColor3 = Color3.new(0,0,0)
EffectsLabel.Text = "Efeito: Nenhum"
EffectsLabel.TextColor3 = Color3.new(1, 1, 1)
EffectsLabel.Font = Enum.Font.SourceSansBold
EffectsLabel.TextSize = 16
local GrabProgress = Instance.new("TextLabel", ScreenGui)
GrabProgress.Size = UDim2.new(0, 250, 0, 30)
GrabProgress.Position = UDim2.new(0.4, -25, 0.85, 0)
GrabProgress.BackgroundTransparency = 0.5
GrabProgress.BackgroundColor3 = Color3.new(0.1, 0, 0)
GrabProgress.TextColor3 = Color3.new(1, 1, 1)
GrabProgress.Text = "TARGET PROGRESS: 0/4"
GrabProgress.Font = Enum.Font.SourceSansBold
GrabProgress.TextSize = 18
local function updateStatus(text, color)
StatusLabel.Text = "Status: " .. text
StatusLabel.TextColor3 = color or Color3.fromRGB(255, 165, 0)
end
local function getChar()
return Player.Character or Player.CharacterAdded:Wait()
end
local function ApplyScreenShake(intensity)
local hum = getChar():FindFirstChild("Humanoid")
if hum then
local x = math.random(-intensity, intensity) / 100
local y = math.random(-intensity, intensity) / 100
local z = math.random(-intensity, intensity) / 100
hum.CameraOffset = Vector3.new(x, y, z)
end
end
local function playSound(id, volume, cutDelay)
local char = getChar()
local root = char:FindFirstChild("HumanoidRootPart")
if root then
local s = Instance.new("Sound")
s.SoundId = "rbxassetid://" .. id
s.Parent = root
s.Volume = volume or 1
s:Play()
if cutDelay then
task.delay(cutDelay, function() if s then s:Stop() s:Destroy() end end)
else
s.Ended:Connect(function() s:Destroy() end)
end
return s
end
end
-- SISTEMA DE PASSOS
local lastStep = 0
RunService.Heartbeat:Connect(function()
local char = Player.Character
if not char then return end
local hum = char:FindFirstChild("Humanoid")
local root = char:FindFirstChild("HumanoidRootPart")
if hum and root and hum.MoveDirection.Magnitude > 0 and hum.FloorMaterial ~= Enum.Material.Air and hum.Health > 0 then
local velocity = root.Velocity.Magnitude
local stepInterval = 10 / (velocity + 1)
if tick() - lastStep > stepInterval then
lastStep = tick()
local s = Instance.new("Sound", root)
s.SoundId = "rbxassetid://13550293121"
s.Volume = 0.4
s.PlaybackSpeed = math.clamp(velocity/16, 0.8, 1.6)
s:Play()
Debris:AddItem(s, 1)
end
end
end)
local playerProgress = {}
local m1GlobalCooldown = false
local isM1Active = false
local isGrabActive = false
local chargeBonusSpeed = 0
-- Bloqueia movimento se estiver no Grab
RunService.PreSimulation:Connect(function()
if isGrabActive then
local char = Player.Character
if char then
local hum = char:FindFirstChild("Humanoid")
local root = char:FindFirstChild("HumanoidRootPart")
if hum and root then
hum.WalkSpeed = 0
root.Velocity = Vector3.new(0, root.Velocity.Y, 0) -- Reseta velocidade horizontal
end
end
end
end)
local function createGhostHitbox(size, cframe, duration)
local hb = Instance.new("Part")
hb.Size = size
hb.CFrame = cframe
hb.Transparency = 0.95
hb.Color = Color3.new(1, 0, 0)
hb.Material = Enum.Material.Neon
hb.CanCollide = false
hb.Anchored = true
hb.Parent = workspace
Debris:AddItem(hb, duration)
return hb
end
local function PerformM1(char)
if m1GlobalCooldown or isM1Active or isGrabActive then return end
isM1Active = true
local hum = char.Humanoid
local root = char.HumanoidRootPart
local hitThisClick = false
task.spawn(function()
for i = 1, 12 do
if hitThisClick then break end
local currentCF = root.CFrame * CFrame.new(0, 0, -2.5)
local hb = createGhostHitbox(Vector3.new(5, 6, 6), currentCF, 1)
local target = nil
local results = workspace:GetPartBoundsInBox(currentCF, hb.Size)
for _, p in pairs(results) do
local m = p:FindFirstAncestorOfClass("Model")
if m and m:FindFirstChild("Humanoid") and m ~= char then
target = m
break
end
end
if target then
hitThisClick = true
hb.Color = Color3.new(0, 1, 0)
playSound("128614958817223", 1.5, 3)
task.spawn(function()
local oldSpeed = hum.WalkSpeed
hum.WalkSpeed = 19
EffectsLabel.Text = "Efeito: M1 SPEED BUFF"
task.wait(0.5)
if not isGrabActive then hum.WalkSpeed = 10 end
EffectsLabel.Text = "Efeito: Nenhum"
end)
local tName = target.Name
playerProgress[tName] = (playerProgress[tName] or 0) + 1
GrabProgress.Text = "TARGET ["..tName.."]: " .. playerProgress[tName] .. "/4"
if playerProgress[tName] >= 4 then
playerProgress[tName] = 0
m1GlobalCooldown = true
isGrabActive = true -- Ativa imobilização total
hum.WalkSpeed = 0
updateStatus("GRABBED", Color3.new(1,0,0))
local grabSfx = playSound("131678559751488", 2)
if grabSfx then
if not grabSfx.IsLoaded then grabSfx.Loaded:Wait() end
task.wait(grabSfx.TimeLength)
else
task.wait(4.5)
end
isGrabActive = false -- Libera movimento
hum.WalkSpeed = 30
updateStatus("BUFFED")
task.wait(3)
hum.WalkSpeed = 10
m1GlobalCooldown = false
updateStatus("Idle")
end
end
task.wait(0.15)
end
if not hitThisClick then
playerProgress = {}
GrabProgress.Text = "PROGRESS RESET"
end
isM1Active = false
m1GlobalCooldown = true
task.wait(0.8)
m1GlobalCooldown = false
end)
end
local function createAbilityButton(name, pos, cooldown, callback)
local btn = Instance.new("TextButton", ScreenGui)
btn.Name = name
btn.Size = UDim2.new(0, 75, 0, 75)
btn.Position = pos
btn.BackgroundColor3 = Color3.fromRGB(55, 55, 55)
btn.Text = name
btn.TextColor3 = Color3.new(1, 1, 1)
btn.Font = Enum.Font.SourceSansBold
btn.TextSize = 15
local corner = Instance.new("UICorner", btn)
corner.CornerRadius = UDim.new(0.3, 0)
local stroke = Instance.new("UIStroke", btn)
stroke.Thickness = 2
stroke.Color = Color3.new(0.5, 0.5, 0.5)
local cdLabel = Instance.new("TextLabel", btn)
cdLabel.Size = UDim2.new(1, 0, 1, 0)
cdLabel.BackgroundTransparency = 1
cdLabel.Text = ""
cdLabel.TextColor3 = Color3.new(1, 0, 0)
cdLabel.Font = Enum.Font.SourceSansBold
cdLabel.TextSize = 25
local onCooldown = false
btn.MouseButton1Click:Connect(function()
if onCooldown or isGrabActive or (name == "M1" and (m1GlobalCooldown or isM1Active)) then return end
local char = getChar()
if cooldown > 0 then
onCooldown = true
callback(char)
task.spawn(function()
for i = cooldown, 1, -1 do
cdLabel.Text = i
task.wait(1)
end
cdLabel.Text = ""
onCooldown = false
end)
else
callback(char)
end
end)
end
createAbilityButton("M1", UDim2.new(0.6, 0, 0.5, 0), 0, PerformM1)
createAbilityButton("CHARGE", UDim2.new(0.7, 0, 0.5, 0), 20, function(char)
local hum = char.Humanoid
local root = char.HumanoidRootPart
chargeBonusSpeed = 0
playSound("79933042822660", 1, 3)
hum.WalkSpeed = 0
updateStatus("PREPARING", Color3.new(1, 0.5, 0))
task.wait(2)
local chargeAudio = playSound("119778978041636", 1)
local duration = 4
if chargeAudio then
if not chargeAudio.IsLoaded then chargeAudio.Loaded:Wait() end
duration = chargeAudio.TimeLength
end
local start = tick()
local lastHb = 0
local isCharging = true
local hitList = {}
local hasHitAnyone = false
local connection
connection = RunService.Heartbeat:Connect(function()
if not isCharging then
hum.CameraOffset = Vector3.new(0,0,0)
connection:Disconnect()
return
end
if tick() - start < duration then
ApplyScreenShake(10)
local currentSpeed = math.min(30 + chargeBonusSpeed, 45)
hum.WalkSpeed = currentSpeed
hum:Move(Vector3.new(0,0,-1), true)
updateStatus("CHARGE: " .. currentSpeed, Color3.new(1, 0, 0))
if tick() - lastHb > 0.15 then
lastHb = tick()
local hbCF = root.CFrame * CFrame.new(0,0,-2)
local hb = createGhostHitbox(Vector3.new(5, 6, 6), hbCF, 1)
local results = workspace:GetPartBoundsInBox(hbCF, hb.Size)
for _, p in pairs(results) do
local m = p:FindFirstAncestorOfClass("Model")
if m and m:FindFirstChild("Humanoid") and m ~= char and not hitList[m] then
hitList[m] = true
hasHitAnyone = true
chargeBonusSpeed = chargeBonusSpeed + 5
playSound("128614958817223", 1, 1)
end
end
end
local rayParams = RaycastParams.new()
rayParams.FilterDescendantsInstances = {char}
local ray = workspace:Raycast(root.Position, root.CFrame.LookVector * 4, rayParams)
if ray and ray.Instance and ray.Instance.CanCollide then
isCharging = false
chargeBonusSpeed = 0
if chargeAudio then chargeAudio:Stop() end
playSound("89196971466013", 1.5)
updateStatus("STUNNED", Color3.new(1,1,1))
hum.WalkSpeed = 0
task.wait(3)
hum.WalkSpeed = 10
updateStatus("Idle")
end
else
isCharging = false
if not hasHitAnyone then
updateStatus("FATIGUED", Color3.new(0.5,0.5,0.5))
hum.WalkSpeed = 10
task.wait(3)
end
hum.WalkSpeed = 10
updateStatus("Idle")
end
end)
end)
createAbilityButton("JUMP", UDim2.new(0.8, 0, 0.5, 0), 20, function(char)
local hum = char.Humanoid
local root = char.HumanoidRootPart
updateStatus("READYING JUMP")
task.wait(0.5)
playSound("131465282091340", 2, 3)
local originalJumpPower = hum.JumpPower
hum.JumpPower = 120
hum:ChangeState(Enum.HumanoidStateType.Jumping)
local inAir = true
task.spawn(function()
while inAir do
hum.WalkSpeed = 50
if hum:GetState() == Enum.HumanoidStateType.Landed then
inAir = false
hum.JumpPower = originalJumpPower
hum.WalkSpeed = 0
playSound("93815419052244", 1.5, 2)
local jumpCF = root.CFrame * CFrame.new(0, -3, 0)
local hbSize = Vector3.new(30, 8, 30)
local hb = createGhostHitbox(hbSize, jumpCF, 0.5)
local hit = false
local results = workspace:GetPartBoundsInBox(jumpCF, hbSize)
for _, p in pairs(results) do
local m = p:FindFirstAncestorOfClass("Model")
if m and m:FindFirstChild("Humanoid") and m ~= char then
hit = true
break
end
end
if hit then
hum.WalkSpeed = 19
EffectsLabel.Text = "Efeito: JUMP BUFF (19)"
task.wait(6)
EffectsLabel.Text = "Efeito: Nenhum"
else
task.wait(1)
end
hum.WalkSpeed = 10
updateStatus("Idle")
end
task.wait()
end
end)
end)
createAbilityButton("INNOCENCE", UDim2.new(0.9, 0, 0.5, 0), 20, function(char)
local hum = char.Humanoid
playSound("120152607511520", 1, 3)
hum.WalkSpeed = 0
updateStatus("AURA VISION", Color3.new(1, 1, 0))
local auras = {}
for _, p in pairs(game.Players:GetPlayers()) do
if p ~= Player and p.Character then
local hl = Instance.new("Highlight", p.Character)
hl.FillColor = Color3.fromRGB(255, 0, 0)
hl.OutlineColor = Color3.new(1, 1, 1)
hl.FillTransparency = 0.5
table.insert(auras, hl)
end
end
task.wait(3)
for _, hl in pairs(auras) do hl:Destroy() end
hum.WalkSpeed = 22
EffectsLabel.Text = "Efeito: SPEED BUFF (22)"
task.wait(9)
hum.WalkSpeed = 10
EffectsLabel.Text = "Efeito: Nenhum"
updateStatus("Idle")
end)



Not saying it needs animations but is it suppose to have custom animations, or is it just the abilities with the voicelines and that's it?