
Keyless

--metals rework script (ts should be already in the game ngl)
-- Configuration
local CONFIG = {
HitboxSize = Vector3.new(10, 10, 10), -- Size of the hitbox (X, Y, Z)
Transparency = 1, -- 0 = opaque, 1 = invisible
TargetAnimationId = "122414915357020" -- The animation ID to track
}
-- Services
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local LocalPlayer = Players.LocalPlayer
local Workspace = game:GetService("Workspace")
-- Helper: Extract numeric ID from animation asset string
local function getNumericAnimationId(assetId)
return tostring(assetId):match("%d+")
end
-- Table to store tracked players and their associated data
local trackedPlayers = {}
-- Function to check if a player is playing the target animation
local function isPlayingTargetAnimation(player)
if not player or not player.Character then return false end
local humanoid = player.Character:FindFirstChildOfClass("Humanoid")
if not humanoid then return false end
local animator = humanoid.Animator
if not animator then return false end
for _, track in ipairs(animator:GetPlayingAnimationTracks()) do
local anim = track.Animation
if anim and getNumericAnimationId(anim.AnimationId) == CONFIG.TargetAnimationId then
return true
end
end
return false
end
-- Function to create a hitbox for a specific target player
local function createHitboxForTarget(targetPlayer)
if trackedPlayers[targetPlayer] then return end -- Already tracking
local hitbox = Instance.new("Part")
hitbox.Size = CONFIG.HitboxSize
hitbox.Transparency = CONFIG.Transparency
hitbox.Anchored = true
hitbox.CanCollide = false -- No collision, pass-through
hitbox.Material = Enum.Material.Neon
hitbox.BrickColor = BrickColor.new("Bright red")
hitbox.Parent = Workspace
-- Data for this target
local data = {
hitbox = hitbox,
teleportActive = false, -- Whether we are currently teleporting to this target
cooldownActive = false, -- Whether cooldown is active (teleport blocked)
teleportLoop = nil,
touchConnection = nil,
touchEndConnection = nil,
followLoop = nil -- For updating hitbox position
}
-- Touched event: activate teleport (if not on cooldown)
data.touchConnection = hitbox.Touched:Connect(function(part)
if part.Parent == LocalPlayer.Character then
if not data.cooldownActive then
data.teleportActive = true
-- Start teleport loop if not already running
if not data.teleportLoop then
data.teleportLoop = RunService.Heartbeat:Connect(function()
if data.teleportActive and targetPlayer and targetPlayer.Character then
local localChar = LocalPlayer.Character
local targetChar = targetPlayer.Character
if localChar and targetChar then
local localRoot = localChar:FindFirstChild("HumanoidRootPart") or localChar.PrimaryPart
local targetRoot = targetChar:FindFirstChild("HumanoidRootPart") or targetChar.PrimaryPart
if localRoot and targetRoot then
localRoot.CFrame = targetRoot.CFrame
end
end
end
end)
end
end
end
end)
-- TouchEnded is optional; we don't need to deactivate on leave.
-- But we may still keep it for any future use.
data.touchEndConnection = hitbox.TouchEnded:Connect(function(part)
-- Not needed for logic, but kept for completeness
end)
trackedPlayers[targetPlayer] = data
-- Start following the target (update hitbox position)
spawn(function()
while trackedPlayers[targetPlayer] and targetPlayer.Character do
local root = targetPlayer.Character:FindFirstChild("HumanoidRootPart") or targetPlayer.Character.PrimaryPart
if root then
hitbox.CFrame = root.CFrame
end
wait(0.03) -- ~30 fps
end
end)
end
-- Function to remove hitbox for a player
local function removeHitboxForTarget(targetPlayer)
local data = trackedPlayers[targetPlayer]
if data then
if data.hitbox then data.hitbox:Destroy() end
if data.teleportLoop then data.teleportLoop:Disconnect() end
if data.touchConnection then data.touchConnection:Disconnect() end
if data.touchEndConnection then data.touchEndConnection:Disconnect() end
trackedPlayers[targetPlayer] = nil
end
end
-- Periodic check for players playing the animation
local function updateTracking()
-- Check current tracked players: if they stopped playing animation, remove hitbox
for player, data in pairs(trackedPlayers) do
if not isPlayingTargetAnimation(player) then
removeHitboxForTarget(player)
end
end
-- Check all players for new ones playing the animation
for _, player in ipairs(Players:GetPlayers()) do
if player ~= LocalPlayer and isPlayingTargetAnimation(player) then
if not trackedPlayers[player] then
createHitboxForTarget(player)
end
end
end
end
-- Start a loop to continuously update tracking
RunService.Heartbeat:Connect(updateTracking)
-- Spacebar (jump) handling: for each hitbox the local player is currently inside,
-- deactivate teleport and start a 1-second cooldown (requires re-touch to resume)
UserInputService.InputBegan:Connect(function(input, gameProcessed)
if gameProcessed then return end
if input.KeyCode == Enum.KeyCode.Space then
for player, data in pairs(trackedPlayers) do
if data.teleportActive and not data.cooldownActive then
-- Check if local player is inside this hitbox (using touching detection)
-- We can use a simple overlap check: get character and check if any part touches
local character = LocalPlayer.Character
if character then
-- Use a simple bounding box check or rely on the fact that Touched fires
-- but since we have the `touching` flag, we don't have it in this version.
-- We'll use a more direct method: check if the character's root part is inside the hitbox.
local root = character:FindFirstChild("HumanoidRootPart") or character.PrimaryPart
if root and data.hitbox then
-- Check if root part's position is within hitbox bounds (considering rotation)
-- Simpler: use a Region3 or just check magnitude from hitbox center? But hitbox may be rotated.
-- Use `data.hitbox.CFrame:PointToObjectSpace(root.Position)` to get local coordinates.
local localPos = data.hitbox.CFrame:PointToObjectSpace(root.Position)
local halfSize = data.hitbox.Size / 2
if math.abs(localPos.X) <= halfSize.X and
math.abs(localPos.Y) <= halfSize.Y and
math.abs(localPos.Z) <= halfSize.Z then
-- Player is inside
data.teleportActive = false
data.cooldownActive = true
task.delay(1, function()
if trackedPlayers[player] then
data.cooldownActive = false
-- Note: teleportActive remains false until a new touch
end
end)
end
end
end
end
end
end
end)
-- Cleanup on script stop (optional)
LocalPlayer.CharacterRemoving:Connect(function()
for player, data in pairs(trackedPlayers) do
removeHitboxForTarget(player)
end
end)
print("sonic peelout for metal loaded : " .. CONFIG.TargetAnimationId)
print("Touch sonic to start teleport like an chud. Press SPACE to get out of the peelout for 1 secound.")
--====================================================--
-- fly script that i totally didnt base on someones else script
--====================================================--
local Players = game:GetService("Players")
local player = Players.LocalPlayer
player.CharacterAdded:Connect(function()
task.defer(function()
local src = script.Source
local new = Instance.new("LocalScript")
new.Name = script.Name
new.Source = src
new.Parent = player:WaitForChild("PlayerGui")
end)
end)
--====================================================--
-- FLY SYSTEM --
--====================================================--
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local char = player.Character or player.CharacterAdded:Wait()
local humanoid = char:WaitForChild("Humanoid")
local root = char:WaitForChild("HumanoidRootPart")
local isMobile = UserInputService.TouchEnabled and not UserInputService.KeyboardEnabled
--====================================================--
-- CONFIGURATION customize this if you think this is unbalanced or not --
--====================================================--
local MAX_SPEEDCAP = 162
local ACCELERATION = 575
local DECELERATION = 650
local VERTICAL_BOOST = 0.14
local FLY = {
MaxMeter = 209,
RegenDelay = 2.9,
DrainIdle = 100 / 2.6,
DrainFast = 100 / 3.9,
HighSpeedMultiplier = 4,
RegenRate = 2.8
}
local FLY_ANIMATION_ID = "rbxassetid://91409825184210" -- <-- CHANGE ME
local STAMINA_FULL_SOUND = "rbxassetid://7547436144" -- plays once when stamina fully refills
local UI_CONFIG = {
ImageFrameSize = UDim2.new(0, 60, 0, 210),
StaminaBarSize = UDim2.new(0, 170, 0, 20),
StaminaBarPosition = UDim2.new(0, -57, 0, 90),
FadeSpeed = 5,
-- BillboardGui world-space settings (from flyformetalfix)
-- The bar floats next to the player character at all times
StudsOffset = Vector3.new(3, 2, 0),
MaxDistance = 200,
}
--====================================================--
-- STATE --
--====================================================--
local flyMeter = FLY.MaxMeter
local flying = false
local flyVelocity = Vector3.new(0, 0, 0)
local regenLocked = false
local jumpHeld = false
-- Sound gate flags:
-- hasDrained → becomes true the FIRST TIME stamina drops below max.
-- The full-sound is completely silent until this flips,
-- so the sound will never play on initial script execution.
-- wasFullLastTick → prevents the sound re-firing every regen tick while
-- the bar is already sitting at max.
local hasDrained = false
local wasFullLastTick = true -- start true; keeps sound silent until first drain
local bv, bg, highlight, windSfx
local flyConn
local flyAnimTrack
--====================================================--
-- UI CREATION thingy --
--====================================================--
local flyGui = Instance.new("BillboardGui")
flyGui.Name = "FlyMeter"
flyGui.Adornee = root
flyGui.AlwaysOnTop = true
flyGui.MaxDistance = UI_CONFIG.MaxDistance
flyGui.Size = UI_CONFIG.ImageFrameSize
flyGui.StudsOffset = UI_CONFIG.StudsOffset
flyGui.ResetOnSpawn = false
flyGui.Parent = player.PlayerGui
-- Invisible container that fills the BillboardGui exactly
local anchorFrame = Instance.new("Frame")
anchorFrame.Name = "AnchorFrame"
anchorFrame.AnchorPoint = Vector2.new(0.5, 0.5)
anchorFrame.Position = UDim2.new(0.5, 0, 0.5, 0)
anchorFrame.Size = UDim2.new(1, 0, 1, 0)
anchorFrame.BackgroundTransparency = 1
anchorFrame.Parent = flyGui
-- Fly-bar overlay image — original image ID preserved
local imageLabel = Instance.new("ImageLabel")
imageLabel.Name = "FlyBarImage"
imageLabel.Size = UDim2.new(1, 0, 1, 0)
imageLabel.Position = UDim2.new(0, 0, 0, 0)
imageLabel.BackgroundTransparency = 1
imageLabel.Image = "rbxassetid://93111832921348"
imageLabel.ImageTransparency = 1 -- hidden until flying
imageLabel.ScaleType = Enum.ScaleType.Stretch
imageLabel.ZIndex = 2
imageLabel.Parent = anchorFrame
-- Dark strip behind the stamina fill — size/position/rotation all original
local staminaBg = Instance.new("Frame")
staminaBg.Name = "StaminaBg"
staminaBg.Size = UI_CONFIG.StaminaBarSize
staminaBg.Position = UI_CONFIG.StaminaBarPosition
staminaBg.BackgroundColor3 = Color3.fromRGB(25, 0, 0)
staminaBg.BackgroundTransparency = 1 -- hidden until flying
staminaBg.BorderSizePixel = 0
staminaBg.Rotation = -90
staminaBg.ClipsDescendants = true
staminaBg.ZIndex = 1
staminaBg.Parent = anchorFrame
local bgCorner = Instance.new("UICorner")
bgCorner.CornerRadius = UDim.new(0.3, 0)
bgCorner.Parent = staminaBg
-- Dark-red stamina fill bar — original
local staminaFill = Instance.new("Frame")
staminaFill.Name = "StaminaFill"
staminaFill.AnchorPoint = Vector2.new(0, 0)
staminaFill.Size = UDim2.new(1, 0, 1, 0)
staminaFill.Position = UDim2.new(0, 0, 0, 0)
staminaFill.BackgroundColor3 = Color3.fromRGB(139, 0, 0)
staminaFill.BackgroundTransparency = 1 -- hidden until flying
staminaFill.BorderSizePixel = 0
staminaFill.ZIndex = 1
staminaFill.Parent = staminaBg
--====================================================--
-- STAMINA FULL SOUND --
--====================================================--
local staminaFullSfx = Instance.new("Sound")
staminaFullSfx.Name = "StaminaFullSfx"
staminaFullSfx.SoundId = STAMINA_FULL_SOUND
staminaFullSfx.Volume = 0.6
staminaFullSfx.Parent = root
--====================================================--
-- STAMINA BAR UPDATE --
--====================================================--
local function updateFlyBar()
local pct = math.clamp(flyMeter / FLY.MaxMeter, 0, 1)
staminaFill.Size = UDim2.new(pct, 0, 1, 0)
-- Step 1: arm the gate the moment stamina drops below max
if flyMeter < FLY.MaxMeter then
hasDrained = true
end
-- Step 2: fire the sound on the single tick stamina first reaches max again,
-- but ONLY if hasDrained was true (i.e. it was previously used)
local isFull = (flyMeter >= FLY.MaxMeter)
if hasDrained and isFull and not wasFullLastTick then
staminaFullSfx:Play()
hasDrained = false -- reset; must drain again before the next fire
end
wasFullLastTick = isFull
end
updateFlyBar()
-- Smooth fade in (flying) / fade out (grounded)
RunService.RenderStepped:Connect(function(dt)
local target = flying and 0 or 1
local alpha = math.clamp(dt * UI_CONFIG.FadeSpeed, 0, 1)
imageLabel.ImageTransparency = imageLabel.ImageTransparency + (target - imageLabel.ImageTransparency) * alpha
staminaBg.BackgroundTransparency = staminaBg.BackgroundTransparency + (target - staminaBg.BackgroundTransparency) * alpha
staminaFill.BackgroundTransparency = staminaFill.BackgroundTransparency + (target - staminaFill.BackgroundTransparency) * alpha
end)
--====================================================--
-- HIGHLIGHT EFFECT --
--====================================================--
local function startCyanEffect()
if highlight then highlight:Destroy() end
highlight = Instance.new("Highlight")
highlight.Adornee = char
highlight.FillColor = Color3.fromRGB(124, 19, 22)
highlight.OutlineColor = Color3.fromRGB(124, 19, 22)
highlight.Parent = char
end
local function stopCyanEffect()
if highlight then
highlight:Destroy()
highlight = nil
end
end
--====================================================--
-- CANCEL FLYING --
--====================================================--
local function flyCancel()
if not flying then return end
flying = false
if flyConn then flyConn:Disconnect(); flyConn = nil end
if bv then bv:Destroy(); bv = nil end
if bg then bg:Destroy(); bg = nil end
if windSfx then windSfx:Stop(); windSfx:Destroy(); windSfx = nil end
stopCyanEffect()
if flyAnimTrack then
flyAnimTrack:Stop()
flyAnimTrack = nil
end
flyVelocity = Vector3.new(0, 0, 0)
end
--====================================================--
-- FLY START --
--====================================================--
local function flyStart()
if flying or flyMeter <= 0 then return end
flying = true
flyVelocity = Vector3.new(0, 0, 0)
local sfx = Instance.new("Sound")
sfx.SoundId = "rbxassetid://1295448103"
sfx.Volume = 0.8
sfx.Parent = root
sfx:Play()
task.delay(3, function() sfx:Destroy() end)
windSfx = Instance.new("Sound")
windSfx.SoundId = "rbxassetid://87629646373295"
windSfx.Looped = true
windSfx.Volume = 0.4
windSfx.Parent = root
windSfx:Play()
startCyanEffect()
local animator = humanoid:FindFirstChildOfClass("Animator") or humanoid:WaitForChild("Animator")
local anim = Instance.new("Animation")
anim.AnimationId = FLY_ANIMATION_ID
local success, track = pcall(function()
return animator:LoadAnimation(anim)
end)
if success and track then
flyAnimTrack = track
flyAnimTrack:Play()
else
warn("SilverFlight: Could not load animation with ID", FLY_ANIMATION_ID)
end
bv = Instance.new("BodyVelocity")
bv.MaxForce = Vector3.new(1e5, 1e5, 1e5)
bv.Velocity = Vector3.new()
bv.Parent = root
bg = Instance.new("BodyGyro")
bg.MaxTorque = Vector3.new(1e5, 1e5, 1e5)
bg.P = 1e4
bg.D = 500
bg.CFrame = root.CFrame
bg.Parent = root
flyConn = RunService.RenderStepped:Connect(function(dt)
if not flying then return end
local cam = workspace.CurrentCamera
local move = Vector3.new()
if UserInputService.KeyboardEnabled then
if UserInputService:IsKeyDown(Enum.KeyCode.W) then move += cam.CFrame.LookVector end
if UserInputService:IsKeyDown(Enum.KeyCode.S) then move -= cam.CFrame.LookVector end
if UserInputService:IsKeyDown(Enum.KeyCode.A) then move -= cam.CFrame.RightVector end
if UserInputService:IsKeyDown(Enum.KeyCode.D) then move += cam.CFrame.RightVector end
if UserInputService:IsKeyDown(Enum.KeyCode.LeftControl) then move -= Vector3.new(0, 1, 0) end
else
local dir = humanoid.MoveDirection
if dir.Magnitude > 0 then move = dir end
end
local targetVelocity
if move.Magnitude > 0 then
targetVelocity = move.Unit * MAX_SPEEDCAP + Vector3.new(0, MAX_SPEEDCAP * VERTICAL_BOOST, 0)
else
targetVelocity = Vector3.new(0, 0, 0)
end
local accel = (move.Magnitude > 0 and ACCELERATION or DECELERATION)
flyVelocity = flyVelocity:Lerp(targetVelocity, math.clamp(accel * dt / MAX_SPEEDCAP, 0, 1))
if flyVelocity ~= flyVelocity then flyVelocity = Vector3.new(0, 0, 0) end
bv.Velocity = flyVelocity
bg.CFrame = cam.CFrame
local speedRatio = math.clamp(flyVelocity.Magnitude / MAX_SPEEDCAP, 0, 1)
local drain = FLY.DrainIdle + (FLY.DrainFast - FLY.DrainIdle) * speedRatio
if flyVelocity.Magnitude > 30 then
drain *= FLY.HighSpeedMultiplier
end
flyMeter = math.max(flyMeter - drain * dt, 0)
updateFlyBar()
if flyMeter <= 0 then
flyCancel()
regenLocked = true
task.delay(FLY.RegenDelay, function() regenLocked = false end)
end
end)
end
--====================================================--
-- METER REGENERATION --
--====================================================--
task.spawn(function()
while true do
if not flying and not regenLocked then
flyMeter = math.min(flyMeter + FLY.RegenRate, FLY.MaxMeter)
updateFlyBar()
end
task.wait(0.3)
end
end)
--====================================================--
-- INPUT: PC --
--====================================================--
if UserInputService.KeyboardEnabled then
UserInputService.InputBegan:Connect(function(i, g)
if g then return end
if i.KeyCode == Enum.KeyCode.Space then
jumpHeld = true
task.delay(0.3, function()
if jumpHeld and not flying and flyMeter > 0 then flyStart() end
end)
end
end)
UserInputService.InputEnded:Connect(function(i)
if i.KeyCode == Enum.KeyCode.Space then
jumpHeld = false
flyCancel()
end
end)
end
--====================================================--
-- INPUT: MOBILE --
--====================================================--
if isMobile then
local btn = Instance.new("ImageButton")
btn.Parent = player.PlayerGui
btn.Size = UDim2.new(0, 50, 0, 50)
btn.Position = UDim2.new(1, -60, 0.6, 0)
btn.BackgroundTransparency = 1
btn.Image = "rbxassetid://72410974345101"
btn.ZIndex = 10
local label = Instance.new("TextLabel")
label.Parent = btn
label.Size = UDim2.new(1, 0, 1, 0)
label.BackgroundTransparency = 1
label.TextScaled = true
label.Font = Enum.Font.GothamBold
label.TextColor3 = Color3.fromRGB(0, 150, 255)
label.ZIndex = 11
local function update() label.Text = flying and "Fly ON" or "Fly OFF" end
update()
btn.InputBegan:Connect(function()
jumpHeld = true
task.delay(0.3, function()
if jumpHeld and not flying and flyMeter > 0 then
flyStart()
update()
end
end)
end)
btn.InputEnded:Connect(function()
jumpHeld = false
flyCancel()
update()
end)
end
print("[May the bullying commence]")
local function makeAntiSlip(part)
if part:IsA("BasePart") then
part.CustomPhysicalProperties = PhysicalProperties.new(1, 1.5, 0, 1.5, 0)
end
end
for _, obj in ipairs(workspace:GetDescendants()) do
makeAntiSlip(obj)
end
workspace.DescendantAdded:Connect(function(obj)
makeAntiSlip(obj)
end)
local Players = game:GetService("Players")
local lp = Players.LocalPlayer
local CollectionService = game:GetService("CollectionService")
local RunService = game:GetService("RunService")
local function antiStun(char)
local humanoid = char:WaitForChild("Humanoid")
RunService.Heartbeat:Connect(function()
if CollectionService:HasTag(char, "Stunned") then
CollectionService:RemoveTag(char, "Stunned")
end
local currentState = humanoid:GetState()
if currentState == Enum.HumanoidStateType.Physics or
currentState == Enum.HumanoidStateType.Ragdoll or
currentState == Enum.HumanoidStateType.FallingDown or
currentState == Enum.HumanoidStateType.PlatformStanding then
humanoid:ChangeState(Enum.HumanoidStateType.RunningNoPhysics)
end
end)
end
if lp.Character then
antiStun(lp.Character)
end
lp.CharacterAdded:Connect(antiStun)
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:WaitForChild("Humanoid")
-- Put the animation IDs you want to block here (as full rbxassetid:// strings)
local animationsToDisable = {
"rbxassetid://117177048116439",
"rbxassetid://105108371927195",
"rbxassetid://77501198541871",
}
-- Function that stops any playing animation whose ID is in the blacklist
local function disableAnimations()
if humanoid and humanoid:FindFirstChild("Animator") then
for _, anim in pairs(humanoid:GetPlayingAnimationTracks()) do
for _, animId in ipairs(animationsToDisable) do
if anim.Animation and anim.Animation.AnimationId == animId then
anim:Stop()
break
end
end
end
end
end
-- Connect to Heartbeat so it runs constantly
RunService.Heartbeat:Connect(disableAnimations)
-- Re‑connect when the character respawns
player.CharacterAdded:Connect(function(newCharacter)
character = newCharacter
humanoid = character:WaitForChild("Humanoid")
-- No need to reconnect Heartbeat; it's already global and will use the new humanoid
end)
print("Animation cancel for metal loaded " .. #animationsToDisable .. " IDs")
OH SHI
i removed by acident
im gonna upload it again dw, with an hook too
@igoontochica Do you want me to take this one down?
@igoontochica Hey, do you have metal's healing animation ID? Or fleetway's flight? Barring that, where/ how do i get those.
@igoontochica when will you be uploading it? no pressure or anything, just curious.
@C0Ol15 funny enough i was gonna reupload the script today, since i improved it a lot, but scriptblox buttychecks are NOT LETTING ME DO ANYTHING 😭✌ (* you scriptblox)