-- [[ Rscripts Risk Notice ]] -- This script is not verified by rscripts.net. Deal with caution. -- -- Stay safe: -- • Never log in on unofficial Roblox sites or lookalike domains. -- • Real Roblox links use roblox.com (check the .com ending). -- • Treat fake Roblox login / "claim reward" pages as phishing. -- [[ End Rscripts Risk Notice ]] local Players = game:GetService("Players") local Workspace = game:GetService("Workspace") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local CoreGui = game:GetService("CoreGui") local VirtualUser = game:GetService("VirtualUser") local Camera = Workspace.CurrentCamera local Player = Players.LocalPlayer -- Clean UI & Visual FOV Lama Kalau Ada if CoreGui:FindFirstChild("AssassinFOVUI") then CoreGui.AssassinFOVUI:Destroy() end if getgenv().TitanFOVCircle then pcall(function() getgenv().TitanFOVCircle:Remove() end) end -- ========================================== -- SETUP UI BARU (FOV SYSTEM + LOCK UI) -- ========================================== local ScreenGui = Instance.new("ScreenGui", CoreGui) ScreenGui.Name = "AssassinFOVUI" local MainFrame = Instance.new("Frame", ScreenGui) MainFrame.Size = UDim2.new(0, 220, 0, 185) MainFrame.Position = UDim2.new(0.5, -110, 0.7, 0) MainFrame.BackgroundColor3 = Color3.fromRGB(15, 10, 20) MainFrame.Active = true Instance.new("UICorner", MainFrame) local StatusTxt = Instance.new("TextLabel", MainFrame) StatusTxt.Size = UDim2.new(1, 0, 0.14, 0) StatusTxt.Text = "👑 GOD ODM COMBO" StatusTxt.TextColor3 = Color3.fromRGB(255, 215, 0) StatusTxt.BackgroundTransparency = 1 StatusTxt.Font = Enum.Font.GothamBold -- Lock / Unlock UI Button local LockBtn = Instance.new("TextButton", MainFrame) LockBtn.Size = UDim2.new(0.9, 0, 0.15, 0) LockBtn.Position = UDim2.new(0.05, 0, 0.15, 0) LockBtn.Text = "🔓 UI: UNLOCKED" LockBtn.BackgroundColor3 = Color3.fromRGB(50, 150, 80) LockBtn.TextColor3 = Color3.new(1, 1, 1) LockBtn.Font = Enum.Font.GothamBold Instance.new("UICorner", LockBtn) -- FOV Toggle Button local FovToggleBtn = Instance.new("TextButton", MainFrame) FovToggleBtn.Size = UDim2.new(0.9, 0, 0.15, 0) FovToggleBtn.Position = UDim2.new(0.05, 0, 0.33, 0) FovToggleBtn.Text = "🎯 FOV TARGET: OFF" FovToggleBtn.BackgroundColor3 = Color3.fromRGB(60, 40, 80) FovToggleBtn.TextColor3 = Color3.new(1, 1, 1) FovToggleBtn.Font = Enum.Font.GothamBold Instance.new("UICorner", FovToggleBtn) -- FOV Size Controls (- / Value / +) local FovMinusBtn = Instance.new("TextButton", MainFrame) FovMinusBtn.Size = UDim2.new(0.2, 0, 0.15, 0) FovMinusBtn.Position = UDim2.new(0.05, 0, 0.51, 0) FovMinusBtn.Text = "➖" FovMinusBtn.BackgroundColor3 = Color3.fromRGB(40, 40, 60) FovMinusBtn.TextColor3 = Color3.new(1, 1, 1) FovMinusBtn.Font = Enum.Font.GothamBold Instance.new("UICorner", FovMinusBtn) local FovLabel = Instance.new("TextLabel", MainFrame) FovLabel.Size = UDim2.new(0.5, 0, 0.15, 0) FovLabel.Position = UDim2.new(0.25, 0, 0.51, 0) FovLabel.Text = "FOV: 150" FovLabel.TextColor3 = Color3.fromRGB(200, 200, 255) FovLabel.BackgroundTransparency = 1 FovLabel.Font = Enum.Font.GothamBold local FovPlusBtn = Instance.new("TextButton", MainFrame) FovPlusBtn.Size = UDim2.new(0.2, 0, 0.15, 0) FovPlusBtn.Position = UDim2.new(0.75, 0, 0.51, 0) FovPlusBtn.Text = "➕" FovPlusBtn.BackgroundColor3 = Color3.fromRGB(40, 40, 60) FovPlusBtn.TextColor3 = Color3.new(1, 1, 1) FovPlusBtn.Font = Enum.Font.GothamBold Instance.new("UICorner", FovPlusBtn) -- Button khas Mobile (Q & E) local QBtn = Instance.new("TextButton", MainFrame) QBtn.Size = UDim2.new(0.425, 0, 0.22, 0) QBtn.Position = UDim2.new(0.05, 0, 0.71, 0) QBtn.Text = "⚡ DASH Q" QBtn.BackgroundColor3 = Color3.fromRGB(40, 90, 160) QBtn.TextColor3 = Color3.new(1, 1, 1) QBtn.Font = Enum.Font.GothamBold Instance.new("UICorner", QBtn) local EBtn = Instance.new("TextButton", MainFrame) EBtn.Size = UDim2.new(0.425, 0, 0.22, 0) EBtn.Position = UDim2.new(0.525, 0, 0.71, 0) EBtn.Text = "⚡ DASH E" EBtn.BackgroundColor3 = Color3.fromRGB(40, 90, 160) EBtn.TextColor3 = Color3.new(1, 1, 1) EBtn.Font = Enum.Font.GothamBold Instance.new("UICorner", EBtn) -- ========================================== -- STATE VARIABLES & LOCK DRAG LOGIC -- ========================================== local isLocked = false local isFovEnabled = false local fovRadius = 150 local attackState = "IDLE" local currentTarget = nil local retreatEndTime = 0 local curveDirection = 1 local startDist = 0 -- Sistem Drag UI (Boleh Kunci / Unlock) local dragging, dragInput, mousePos, framePos MainFrame.InputBegan:Connect(function(input) if isLocked then return end -- Tak boleh heret kalau UI dah KUNCI if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragInput = input mousePos = input.Position framePos = MainFrame.Position input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging = false end end) end end) UserInputService.InputChanged:Connect(function(input) if input == dragInput and dragging and not isLocked then local delta = input.Position - mousePos MainFrame.Position = UDim2.new(framePos.X.Scale, framePos.X.Offset + delta.X, framePos.Y.Scale, framePos.Y.Offset + delta.Y) end end) LockBtn.MouseButton1Click:Connect(function() isLocked = not isLocked LockBtn.Text = isLocked and "🔒 UI: LOCKED" or "🔓 UI: UNLOCKED" LockBtn.BackgroundColor3 = isLocked and Color3.fromRGB(180, 50, 50) or Color3.fromRGB(50, 150, 80) end) -- ========================================== -- FOV CIRCLE DRAWING (VISUAL BULATAN) -- ========================================== local fovCircle = nil pcall(function() fovCircle = Drawing.new("Circle") fovCircle.Thickness = 1.5 fovCircle.NumSides = 36 fovCircle.Radius = fovRadius fovCircle.Filled = false fovCircle.Color = Color3.fromRGB(255, 215, 0) fovCircle.Visible = false getgenv().TitanFOVCircle = fovCircle end) local function updateFovUI() FovLabel.Text = "FOV: " .. tostring(fovRadius) if fovCircle then fovCircle.Radius = fovRadius fovCircle.Visible = isFovEnabled end end FovToggleBtn.MouseButton1Click:Connect(function() isFovEnabled = not isFovEnabled FovToggleBtn.Text = isFovEnabled and "🎯 FOV TARGET: ON" or "🎯 FOV TARGET: OFF" FovToggleBtn.BackgroundColor3 = isFovEnabled and Color3.fromRGB(150, 50, 255) or Color3.fromRGB(60, 40, 80) updateFovUI() end) FovMinusBtn.MouseButton1Click:Connect(function() fovRadius = math.clamp(fovRadius - 20, 10, 500) updateFovUI() end) FovPlusBtn.MouseButton1Click:Connect(function() fovRadius = math.clamp(fovRadius + 20, 10, 500) updateFovUI() end) -- Update kedudukan bulatan FOV di skrin RunService.RenderStepped:Connect(function() if fovCircle then local center = Vector2.new(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y / 2) fovCircle.Position = center end end) -- ========================================== -- SMART TARGET SCAN (WITH FOV LIMIT) -- ========================================== local function getClosestNape(hrp) local closestNape = nil local bestDist = math.huge local viewportCenter = Vector2.new(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y / 2) local TitansFolder = Workspace:FindFirstChild("Titans") if TitansFolder then for _, titan in pairs(TitansFolder:GetChildren()) do local hitboxes = titan:FindFirstChild("Hitboxes") local hit = hitboxes and hitboxes:FindFirstChild("Hit") local nape = hit and hit:FindFirstChild("Nape") if nape and nape.Parent then local screenPos, onScreen = Camera:WorldToViewportPoint(nape.Position) -- Semak syarat FOV jika FOV di-ON-kan local inFov = true if isFovEnabled then if not onScreen then inFov = false else local screenDist = (Vector2.new(screenPos.X, screenPos.Y) - viewportCenter).Magnitude if screenDist > fovRadius then inFov = false end end end if inFov then local dist = (nape.Position - hrp.Position).Magnitude if dist < bestDist then bestDist = dist closestNape = nape end end end end end return closestNape end -- ========================================== -- TRIGGER DASH LOGIC -- ========================================== local function triggerDash() local char = Player.Character local hrp = char and char:FindFirstChild("HumanoidRootPart") if not hrp then return end local target = getClosestNape(hrp) if target then currentTarget = target startDist = (currentTarget.Position - hrp.Position).Magnitude attackState = "DASHING" curveDirection = math.random(1, 2) == 1 and 1 or -1 hrp.AssemblyLinearVelocity = Vector3.new(0, 0, 0) hrp.AssemblyAngularVelocity = Vector3.new(0, 0, 0) elseif attackState == "DASHING" then attackState = "IDLE" currentTarget = nil end end -- Mobile UI Click Events QBtn.MouseButton1Click:Connect(triggerDash) EBtn.MouseButton1Click:Connect(triggerDash) -- Keyboard Inputs (PC) UserInputService.InputBegan:Connect(function(input, isTyping) if isTyping then return end local char = Player.Character local hrp = char and char:FindFirstChild("HumanoidRootPart") if not hrp then return end if input.KeyCode == Enum.KeyCode.Q or input.KeyCode == Enum.KeyCode.E then triggerDash() end -- Tekan Space bar untuk cancel if input.KeyCode == Enum.KeyCode.Space then if attackState == "DASHING" or attackState == "RETREATING" then attackState = "IDLE" currentTarget = nil hrp.MaxForce = Vector3.new(0, 0, 0) end end end) -- ========================================== -- HEARTBEAT (CURVED DASH & RETREAT ENGINE) -- ========================================== RunService.Heartbeat:Connect(function() local char = Player.Character local hrp = char and char:FindFirstChild("HumanoidRootPart") if not hrp then return end if attackState == "DASHING" then if not currentTarget or not currentTarget.Parent then attackState = "IDLE" return end local dist = (currentTarget.Position - hrp.Position).Magnitude local toTarget = (currentTarget.Position - hrp.Position).Unit hrp.CFrame = CFrame.new(hrp.Position, currentTarget.Position) if dist > 15 then -- FASA 1: LERP LENGKUNGAN ARC local progress = math.clamp(dist / (startDist > 0 and startDist or 1), 0, 1) local curveFactor = math.sin(progress * math.pi) * 350 local sideVector = toTarget:Cross(Vector3.new(0, 1, 0)).Unit * curveDirection local swoopDir = (toTarget * 400 + sideVector * curveFactor).Unit hrp.Velocity = swoopDir * 480 hrp.MaxForce = Vector3.new(100000, 100000, 100000) else -- FASA 2: INSTANT SLASH & RETREAT hrp.Velocity = toTarget * 480 pcall(function() if mouse1click then mouse1click() else VirtualUser:Button1Down(Vector2.new(0,0)) VirtualUser:Button1Up(Vector2.new(0,0)) end end) attackState = "RETREATING" retreatEndTime = tick() + 0.35 end elseif attackState == "RETREATING" then -- FASA 3: BACKFLIP RETREAT if tick() < retreatEndTime then local speed = 450 local flipVel = (-Camera.CFrame.LookVector * (speed / 1.2)) + (hrp.CFrame.UpVector * (speed / 2.6)) hrp.AssemblyLinearVelocity = Vector3.new(0, 0, 0) hrp.Velocity = flipVel else attackState = "IDLE" currentTarget = nil hrp.MaxForce = Vector3.new(0, 0, 0) end end end)