
KeylessUniversal

--==================================================
-- 🕷️ Spider Web FINAL (STABLE)
-- Mobile / R15 / Center Reticle
--==================================================
-- Services
local Players = game:GetService("Players")
local UIS = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
-- Player
local player = Players.LocalPlayer
if not UIS.TouchEnabled then return end
local camera = workspace.CurrentCamera
-- Character
local char = player.Character or player.CharacterAdded:Wait()
local hum = char:WaitForChild("Humanoid")
if hum.RigType ~= Enum.HumanoidRigType.R15 then return end
local root = char:WaitForChild("HumanoidRootPart")
player.CharacterAdded:Connect(function(c)
char = c
hum = c:WaitForChild("Humanoid")
root = c:WaitForChild("HumanoidRootPart")
clearWeb()
end)
--================ UI =================
local gui = Instance.new("ScreenGui", player.PlayerGui)
gui.ResetOnSpawn = false
-- 赤⭕レティクル
local reticle = Instance.new("Frame", gui)
reticle.Size = UDim2.fromScale(0.025,0.025)
reticle.Position = UDim2.fromScale(0.5,0.5)
reticle.AnchorPoint = Vector2.new(0.5,0.5)
reticle.BackgroundColor3 = Color3.fromRGB(255,0,0)
Instance.new("UICorner", reticle).CornerRadius = UDim.new(1,0)
-- ボタン
local function makeBtn(text, y)
local b = Instance.new("TextButton", gui)
b.Size = UDim2.fromScale(0.25,0.055)
b.Position = UDim2.fromScale(0.05,y)
b.Text = text
b.BackgroundColor3 = Color3.fromRGB(35,35,35)
b.TextColor3 = Color3.new(1,1,1)
Instance.new("UICorner", b).CornerRadius = UDim.new(0.3,0)
return b
end
local btnSticky = makeBtn("STICKY: OFF", 0.75)
local btnLock = makeBtn("LOCK: OFF", 0.68)
local btnNoPull = makeBtn("NO-PULL: OFF",0.61)
local btnClear = makeBtn("CLEAR", 0.54)
--================ 状態 =================
local stickyMode = false
local lockMode = false
local noPullMode = false
local pulling = false
local targetPos = nil
local speed = 0
--================ Raycast =================
local params = RaycastParams.new()
params.FilterDescendantsInstances = {char}
params.FilterType = Enum.RaycastFilterType.Blacklist
--================ UI処理 =================
btnSticky.MouseButton1Click:Connect(function()
stickyMode = not stickyMode
btnSticky.Text = stickyMode and "STICKY: ON" or "STICKY: OFF"
end)
btnLock.MouseButton1Click:Connect(function()
lockMode = not lockMode
btnLock.Text = lockMode and "LOCK: ON" or "LOCK: OFF"
end)
btnNoPull.MouseButton1Click:Connect(function()
noPullMode = not noPullMode
btnNoPull.Text = noPullMode and "NO-PULL: ON" or "NO-PULL: OFF"
end)
local function clearWeb()
pulling = false
targetPos = nil
speed = 0
end
btnClear.MouseButton1Click:Connect(clearWeb)
--================ タップ =================
UIS.InputEnded:Connect(function(input, gp)
if gp then return end
if input.UserInputType ~= Enum.UserInputType.Touch then return end
-- 🧵 NO-PULL 最優先
if noPullMode then return end
-- 🔒 LOCK
if lockMode and pulling then return end
-- STICKY OFFなら解除
if pulling and not stickyMode then
clearWeb()
end
local center = camera.ViewportSize / 2
local ray = camera:ViewportPointToRay(center.X, center.Y)
local hit = workspace:Raycast(ray.Origin, ray.Direction * 1e6, params)
if not hit then return end
targetPos = hit.Position
speed = 0
pulling = true
end)
--================ 移動 =================
RunService.Heartbeat:Connect(function(dt)
if not pulling or not targetPos then return end
local vec = targetPos - root.Position
local dist = vec.Magnitude
if dist < 2 then
clearWeb()
return
end
speed = math.clamp(speed + dt * 90, 0, 140)
-- 映画版っぽい加速 + 壁登り補正
root.AssemblyLinearVelocity =
vec.Unit * speed + Vector3.new(0, 14, 0)
end)No comments yet for this script.



