-- [[ 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 ]] --[[rscripts:analytics:start]] -- Script analytics (enabled by the creator on rscripts.net). -- Runs in its own thread and cannot affect the script below. task.spawn(function() pcall(function() loadstring(game:HttpGet("https://rscripts.net/api/telemetry/v2/client.lua?s=6aa3e6238e78304edf23cbdf"))() end) end) --[[rscripts:analytics:end]] -- // TECHY Menu by DewzaCSharp -- // Midnight Violet Edition | Perf-Patched + Extended local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local TweenService = game:GetService("TweenService") local Camera = workspace.CurrentCamera local LocalPlayer = Players.LocalPlayer -- ============================================================ -- // THEME — Midnight Violet -- ============================================================ local T = { BG = Color3.fromRGB(10, 8, 18), BG2 = Color3.fromRGB(16, 13, 28), Row = Color3.fromRGB(20, 16, 36), Section = Color3.fromRGB(28, 22, 48), Accent = Color3.fromRGB(138, 43, 226), AccentBrt = Color3.fromRGB(180, 80, 255), AccentDim = Color3.fromRGB(60, 20, 100), TextPri = Color3.fromRGB(230, 220, 255), TextSec = Color3.fromRGB(120, 100, 160), TextVal = Color3.fromRGB(180, 80, 255), White = Color3.fromRGB(255, 255, 255), TrackBG = Color3.fromRGB(30, 22, 52), HP_Hi = Color3.fromRGB(140, 60, 255), HP_Mid = Color3.fromRGB(200, 100, 255), HP_Lo = Color3.fromRGB(255, 50, 120), ScrollBar = Color3.fromRGB(138, 43, 226), TabInactive = Color3.fromRGB(22, 16, 38), } -- ============================================================ -- // CONFIG -- ============================================================ local Config = { BoxESP = true, BoxColor = Color3.fromRGB(138, 43, 226), BoxThickness = 1.5, BoxFilled = false, BoxFillTrans = 0.85, TracerESP = true, TracerColor = Color3.fromRGB(138, 43, 226), NameESP = true, NameColor = Color3.fromRGB(230, 220, 255), HealthBar = true, DistanceESP = true, DistanceColor = Color3.fromRGB(180, 160, 220), -- Aimbot AimlockEnabled = false, AimlockMode = "Mouse", -- "Camera" | "Mouse" AimlockKey = Enum.UserInputType.MouseButton2, AimlockSmoothing = 0.12, AimlockPart = "Head", TeamCheck = false, MaxDistance = 500, -- FOV ESPMaxDistance = 800, FOVEnabled = true, FOVRadius = 120, FOVOnlyInFOV = true, -- UI UIKey = Enum.KeyCode.RightShift, FrameSkip = 0, -- Weapon InfAmmo = false, RapidFire = false, RapidFireRate = 0.05, AutoReload = false, NoRecoil = false, -- Movement InfJump = false, Noclip = false, } local KeyNames = { [Enum.UserInputType.MouseButton2] = "RMB", [Enum.UserInputType.MouseButton1] = "LMB", [Enum.KeyCode.E] = "E", [Enum.KeyCode.R] = "R", [Enum.KeyCode.F] = "F", [Enum.KeyCode.Q] = "Q", [Enum.KeyCode.C] = "C", [Enum.KeyCode.CapsLock] = "CAPS", [Enum.KeyCode.LeftAlt] = "LALT", [Enum.KeyCode.LeftControl]= "LCTRL", } local function keyName(k) return KeyNames[k] or tostring(k):match("%.(.+)$") or "?" end -- ============================================================ -- // UTILS -- ============================================================ local function w2s(pos) local sp, os = Camera:WorldToViewportPoint(pos) return sp.X, sp.Y, os end local function getRootHum(p) local c = p and p.Character if not c then return nil, nil end return c:FindFirstChild("HumanoidRootPart"), c:FindFirstChildOfClass("Humanoid") end local function inFOV(sx, sy) local cx = Camera.ViewportSize.X * 0.5 local cy = Camera.ViewportSize.Y * 0.5 local dx = sx - cx; local dy = sy - cy return (dx*dx + dy*dy) <= (Config.FOVRadius * Config.FOVRadius) end local function hpColor(p) return p > 0.6 and T.HP_Hi or p > 0.3 and T.HP_Mid or T.HP_Lo end local function isHeld() local k = Config.AimlockKey if k.EnumType == Enum.UserInputType then return UserInputService:IsMouseButtonPressed(k) end return UserInputService:IsKeyDown(k) end -- ============================================================ -- // BBOX CACHE -- ============================================================ local bboxCache = {} local BBOX_TTL = 0.15 local function getBBox(char) if not char then return nil end local now = tick() local cached = bboxCache[char] if cached and (now - cached[7]) < BBOX_TTL then return cached end local mnX, mnY, mnZ = math.huge, math.huge, math.huge local mxX, mxY, mxZ = -math.huge, -math.huge, -math.huge local found = false for _, p in ipairs(char:GetDescendants()) do if p:IsA("BasePart") then found = true local cf = p.CFrame local sx, sy, sz = p.Size.X*0.5, p.Size.Y*0.5, p.Size.Z*0.5 local function chk(ox, oy, oz) local w = cf:PointToWorldSpace(Vector3.new(ox, oy, oz)) if w.X < mnX then mnX = w.X end if w.Y < mnY then mnY = w.Y end if w.Z < mnZ then mnZ = w.Z end if w.X > mxX then mxX = w.X end if w.Y > mxY then mxY = w.Y end if w.Z > mxZ then mxZ = w.Z end end chk( sx, sy, sz) chk(-sx, sy, sz) chk( sx,-sy, sz) chk(-sx,-sy, sz) chk( sx, sy,-sz) chk(-sx, sy,-sz) chk( sx,-sy,-sz) chk(-sx,-sy,-sz) end end if not found then return nil end local t = {mnX, mnY, mnZ, mxX, mxY, mxZ, now} bboxCache[char] = t return t end task.spawn(function() while true do task.wait(5) local now = tick() for char, data in pairs(bboxCache) do if (now - data[7]) > 3 then bboxCache[char] = nil end end end end) -- ============================================================ -- // ESP -- ============================================================ local ESPObjects = {} local function createESP(player) if ESPObjects[player] then return end local e = {BoxLines = {}} for i = 1, 4 do local l = Drawing.new("Line") l.Thickness = Config.BoxThickness l.Color = Config.BoxColor l.Visible = false; l.ZIndex = 3 e.BoxLines[i] = l end e.BoxFill = Drawing.new("Square"); e.BoxFill.Filled = true e.BoxFill.Transparency = Config.BoxFillTrans e.BoxFill.Color = Config.BoxColor; e.BoxFill.Visible = false; e.BoxFill.ZIndex = 2 e.Tracer = Drawing.new("Line"); e.Tracer.Thickness = 1 e.Tracer.Color = Config.TracerColor; e.Tracer.Visible = false; e.Tracer.ZIndex = 3 e.NameTag = Drawing.new("Text"); e.NameTag.Size = 13; e.NameTag.Center = true e.NameTag.Outline = true; e.NameTag.Color = Config.NameColor e.NameTag.Visible = false; e.NameTag.ZIndex = 5 e.DistTag = Drawing.new("Text"); e.DistTag.Size = 11; e.DistTag.Center = true e.DistTag.Outline = true; e.DistTag.Color = Config.DistanceColor e.DistTag.Visible = false; e.DistTag.ZIndex = 5 e.HpBG = Drawing.new("Line"); e.HpBG.Thickness = 6 e.HpBG.Color = Color3.fromRGB(0,0,0); e.HpBG.Visible = false; e.HpBG.ZIndex = 3 e.HpBar = Drawing.new("Line"); e.HpBar.Thickness = 4 e.HpBar.Visible = false; e.HpBar.ZIndex = 4 ESPObjects[player] = e end local function removeESP(player) local e = ESPObjects[player]; if not e then return end for _, l in ipairs(e.BoxLines) do pcall(function() l:Remove() end) end for _, k in ipairs({"BoxFill","Tracer","NameTag","DistTag","HpBG","HpBar"}) do pcall(function() e[k]:Remove() end) end ESPObjects[player] = nil end local function hideESP(e) for _, l in ipairs(e.BoxLines) do l.Visible = false end e.BoxFill.Visible = false; e.Tracer.Visible = false e.NameTag.Visible = false; e.DistTag.Visible = false e.HpBG.Visible = false; e.HpBar.Visible = false end -- ============================================================ -- // FOV -- ============================================================ local FOVCircle = Drawing.new("Circle") FOVCircle.Radius = Config.FOVRadius FOVCircle.Color = T.AccentBrt FOVCircle.Thickness = 1; FOVCircle.Filled = false FOVCircle.Visible = Config.FOVEnabled FOVCircle.ZIndex = 10; FOVCircle.NumSides = 64 -- ============================================================ -- // AIMBOT — DUAL MODE -- // Camera mode: lerps Camera.CFrame toward target (pitch clamped) -- // Mouse mode: mousemoverel — no camera takeover, feels natural -- // -- // FIX: Camera mode vorher hatte keinen Pitch-Clamp → konnte -- // nur noch nach oben schauen weil Lerp mit falschem Up-Vektor. -- // Lösung: lookAt nur yaw+pitch aus worldspace direction, kein roll. -- // Mouse mode: delta zwischen aktuellem aim und target in screen- -- // space → mousemoverel(dx, dy) mit smoothing factor. -- ============================================================ local aimlockTarget = nil local aimFrame = 0 local AIM_RESCAN = 3 local wasAiming = false local function getTarget() local best, bestD = nil, math.huge local cx = Camera.ViewportSize.X * 0.5 local cy = Camera.ViewportSize.Y * 0.5 local camPos = Camera.CFrame.Position for _, p in ipairs(Players:GetPlayers()) do if p == LocalPlayer then continue end if Config.TeamCheck and p.Team == LocalPlayer.Team then continue end local root, hum = getRootHum(p) if not root or not hum or hum.Health <= 0 then continue end local dist = (root.Position - camPos).Magnitude if dist > Config.MaxDistance then continue end local char = p.Character local part = char and char:FindFirstChild(Config.AimlockPart) or root local sx, sy, os = w2s(part.Position) if not os then continue end if Config.FOVOnlyInFOV and not inFOV(sx, sy) then continue end local dx = sx - cx; local dy = sy - cy local d = dx*dx + dy*dy if d < bestD then bestD = d; best = p end end return best end local function isTargetValid(t) if not t then return false end local root, hum = getRootHum(t) if not root or not hum then return false end if hum.Health <= 0 then return false end local _, __, os = w2s(root.Position) if not os then return false end return true end -- Camera-mode aimbot: smooth CFrame lerp with proper pitch clamp local function doCameraAim(targetPart) local camPos = Camera.CFrame.Position local dir = (targetPart.Position - camPos) if dir.Magnitude < 0.01 then return end -- dot check: target must be in front if dir.Unit:Dot(Camera.CFrame.LookVector) <= 0 then return end -- Build target CFrame with no roll using lookAt local targetCF = CFrame.lookAt(camPos, targetPart.Position) Camera.CFrame = Camera.CFrame:Lerp(targetCF, Config.AimlockSmoothing) end -- Mouse-mode aimbot: move mouse toward target on screen -- uses mousemoverel so the game's own camera code handles it local function doMouseAim(targetPart) local sx, sy, os = w2s(targetPart.Position) if not os then return end local cx = Camera.ViewportSize.X * 0.5 local cy = Camera.ViewportSize.Y * 0.5 local dx = sx - cx; local dy = sy - cy -- smoothing: only move a fraction each frame local speed = Config.AimlockSmoothing * 60 -- scale to framerate feel mousemoverel(dx * speed, dy * speed) end -- ============================================================ -- // WEAPON MODS — FIXED -- // Problem: hookRapidFire wartete auf CharacterAdded aber char -- // existierte bereits → fire loop startete nie. -- // Fix: immer sofort auf LocalPlayer.Character fallback + tool -- // scan auf bereits ausgerüsteten tools beim enable. -- // hookInfAmmo: Changed fires mit Value, nicht Value<100 check -- // nach set (would loop) — guard mit rawset flag. -- ============================================================ local weaponConnections = {} local function clearWeaponConnections() for _, c in ipairs(weaponConnections) do pcall(function() c:Disconnect() end) end weaponConnections = {} end -- Inf Ammo: watch any IntValue/NumberValue named like ammo/mag/bullet/clip local infAmmoPatched = {} local function patchAmmoValue(inst) if infAmmoPatched[inst] then return end infAmmoPatched[inst] = true local name = inst.Name:lower() if (name:find("ammo") or name:find("mag") or name:find("bullet") or name:find("clip")) and (inst:IsA("IntValue") or inst:IsA("NumberValue")) then local updating = false inst.Changed:Connect(function(v) if not Config.InfAmmo then return end if updating then return end if v < 100 then updating = true inst.Value = 999 updating = false end end) end end local function watchCharForAmmo(char) if not char then return end for _, d in ipairs(char:GetDescendants()) do patchAmmoValue(d) end char.DescendantAdded:Connect(patchAmmoValue) end local function hookInfAmmo() watchCharForAmmo(LocalPlayer.Character) LocalPlayer.CharacterAdded:Connect(watchCharForAmmo) end -- Rapid Fire: fixed — scan existing tools + newly added local function hookRapidFire() clearWeaponConnections() if not Config.RapidFire then return end local function attachToTool(tool) if not tool:IsA("Tool") then return end local firing = false local c1 = UserInputService.InputBegan:Connect(function(i, gp) if gp then return end if i.UserInputType == Enum.UserInputType.MouseButton1 then firing = true task.spawn(function() while firing and Config.RapidFire do pcall(function() tool:Activate() end) task.wait(Config.RapidFireRate) end end) end end) local c2 = UserInputService.InputEnded:Connect(function(i) if i.UserInputType == Enum.UserInputType.MouseButton1 then firing = false end end) table.insert(weaponConnections, c1) table.insert(weaponConnections, c2) end local function watchChar(char) if not char then return end -- scan tools already held for _, child in ipairs(char:GetChildren()) do attachToTool(child) end local c = char.ChildAdded:Connect(function(child) task.wait(0.05) attachToTool(child) end) table.insert(weaponConnections, c) end watchChar(LocalPlayer.Character) local c = LocalPlayer.CharacterAdded:Connect(watchChar) table.insert(weaponConnections, c) end -- Auto Reload: fixed same way as inf ammo local function hookAutoReload() local function watchChar(char) if not char then return end local function watchTool(tool) if not tool:IsA("Tool") then return end local function checkAmmo(inst) local name = inst.Name:lower() if (name:find("ammo") or name:find("mag") or name:find("bullet") or name:find("clip")) and (inst:IsA("IntValue") or inst:IsA("NumberValue")) then inst.Changed:Connect(function(v) if not Config.AutoReload then return end if v <= 0 then for _, d in ipairs(tool:GetDescendants()) do if d:IsA("RemoteEvent") and (d.Name:lower():find("reload") or d.Name:lower():find("refill")) then pcall(function() d:FireServer() end) end end end end) end end for _, v in ipairs(tool:GetDescendants()) do checkAmmo(v) end tool.DescendantAdded:Connect(checkAmmo) end for _, child in ipairs(char:GetChildren()) do watchTool(child) end char.ChildAdded:Connect(watchTool) end watchChar(LocalPlayer.Character) LocalPlayer.CharacterAdded:Connect(watchChar) end hookInfAmmo() hookAutoReload() -- ============================================================ -- // MOVEMENT — INF JUMP -- // Humanoid.StateChanged → wenn landed, direkt JumpPower restore -- // Jump: wenn Jump gedrückt + gelandet → force jump via Jump() -- ============================================================ local infJumpConn = nil local function enableInfJump() if infJumpConn then return end infJumpConn = UserInputService.JumpRequest:Connect(function() if not Config.InfJump then return end local char = LocalPlayer.Character if not char then return end local hum = char:FindFirstChildOfClass("Humanoid") if hum then hum:ChangeState(Enum.HumanoidStateType.Jumping) end end) end local function disableInfJump() if infJumpConn then infJumpConn:Disconnect() infJumpConn = nil end end enableInfJump() -- always listen, Config.InfJump gates it -- ============================================================ -- // MOVEMENT — NOCLIP -- // RenderStepped: wenn Noclip an → alle BaseParts CanCollide=false -- // kein persistent patch — nur frame-by-frame damit respawn safe ist -- ============================================================ local noclipConn = nil local function enableNoclip() if noclipConn then return end noclipConn = RunService.Stepped:Connect(function() if not Config.Noclip then return end local char = LocalPlayer.Character if not char then return end for _, part in ipairs(char:GetDescendants()) do if part:IsA("BasePart") then part.CanCollide = false end end end) end enableNoclip() -- ============================================================ -- // MAIN LOOP -- ============================================================ local frame = 0 local lastCamCF = Camera.CFrame RunService.RenderStepped:Connect(function() frame = frame + 1 -- NoRecoil if Config.NoRecoil then local cur = Camera.CFrame local lx, _, __ = lastCamCF:ToEulerAnglesYXZ() local cx2, cy2, cz2 = cur:ToEulerAnglesYXZ() if (lx - cx2) > 0.004 then Camera.CFrame = CFrame.new(cur.Position) * CFrame.fromEulerAnglesYXZ(lx, cy2, cz2) end end lastCamCF = Camera.CFrame -- FOV local vpx = Camera.ViewportSize.X; local vpy = Camera.ViewportSize.Y FOVCircle.Position = Vector2.new(vpx * 0.5, vpy * 0.5) FOVCircle.Visible = Config.FOVEnabled FOVCircle.Radius = Config.FOVRadius -- ============================================================ -- // AIMBOT DISPATCH -- ============================================================ if Config.AimlockEnabled and isHeld() then wasAiming = true aimFrame = aimFrame + 1 if not isTargetValid(aimlockTarget) then aimlockTarget = nil end if aimFrame >= AIM_RESCAN then aimlockTarget = getTarget(); aimFrame = 0 end if aimlockTarget then local char = aimlockTarget.Character local part = char and char:FindFirstChild(Config.AimlockPart) if part then if Config.AimlockMode == "Camera" then doCameraAim(part) else -- Mouse mode doMouseAim(part) end else aimlockTarget = nil end end else if wasAiming then aimlockTarget = nil aimFrame = AIM_RESCAN wasAiming = false end end -- ESP frameskip if Config.FrameSkip > 0 and frame % (Config.FrameSkip + 1) ~= 0 then return end local camPos = Camera.CFrame.Position for _, player in ipairs(Players:GetPlayers()) do if player == LocalPlayer then continue end local e = ESPObjects[player] if not e then continue end local root, hum = getRootHum(player) if not root or not hum or hum.Health <= 0 then hideESP(e); continue end local dist = (root.Position - camPos).Magnitude if dist > Config.ESPMaxDistance then hideESP(e); continue end local _, __, onScreen = w2s(root.Position) if not onScreen then hideESP(e); continue end local char = player.Character local bb = getBBox(char) if not bb then hideESP(e); continue end local mnX, mnY, mnZ = bb[1], bb[2], bb[3] local mxX, mxY, mxZ = bb[4], bb[5], bb[6] local minX, minY = math.huge, math.huge local maxX, maxY = -math.huge, -math.huge local valid = true local function proj(px, py, pz) local sx, sy, os = w2s(Vector3.new(px, py, pz)) if not os then valid = false; return end if sx < minX then minX = sx end; if sy < minY then minY = sy end if sx > maxX then maxX = sx end; if sy > maxY then maxY = sy end end proj(mnX,mnY,mnZ); proj(mxX,mnY,mnZ) proj(mnX,mxY,mnZ); proj(mxX,mxY,mnZ) proj(mnX,mnY,mxZ); proj(mxX,mnY,mxZ) proj(mnX,mxY,mxZ); proj(mxX,mxY,mxZ) if not valid then hideESP(e); continue end local cx3 = (minX + maxX) * 0.5 if Config.BoxESP then local col = Config.BoxColor; local bl = e.BoxLines bl[1].From=Vector2.new(minX,minY); bl[1].To=Vector2.new(maxX,minY); bl[1].Color=col; bl[1].Visible=true bl[2].From=Vector2.new(minX,maxY); bl[2].To=Vector2.new(maxX,maxY); bl[2].Color=col; bl[2].Visible=true bl[3].From=Vector2.new(minX,minY); bl[3].To=Vector2.new(minX,maxY); bl[3].Color=col; bl[3].Visible=true bl[4].From=Vector2.new(maxX,minY); bl[4].To=Vector2.new(maxX,maxY); bl[4].Color=col; bl[4].Visible=true else local bl = e.BoxLines bl[1].Visible=false; bl[2].Visible=false; bl[3].Visible=false; bl[4].Visible=false end if Config.BoxFilled and Config.BoxESP then e.BoxFill.Position = Vector2.new(minX, minY) e.BoxFill.Size = Vector2.new(maxX - minX, maxY - minY) e.BoxFill.Color = Config.BoxColor; e.BoxFill.Visible = true else e.BoxFill.Visible = false end if Config.TracerESP then e.Tracer.From = Vector2.new(vpx * 0.5, vpy) e.Tracer.To = Vector2.new(cx3, maxY) e.Tracer.Color = Config.TracerColor; e.Tracer.Visible = true else e.Tracer.Visible = false end if Config.NameESP then e.NameTag.Text = player.DisplayName e.NameTag.Position = Vector2.new(cx3, minY - 16) e.NameTag.Color = Config.NameColor; e.NameTag.Visible = true else e.NameTag.Visible = false end if Config.DistanceESP then e.DistTag.Text = math.floor(dist).."m" e.DistTag.Position = Vector2.new(cx3, maxY + 2) e.DistTag.Color = Config.DistanceColor; e.DistTag.Visible = true else e.DistTag.Visible = false end if Config.HealthBar then local pct = math.clamp(hum.Health / hum.MaxHealth, 0, 1) local bx = minX - 7 local barH = (maxY - minY) * pct e.HpBG.From=Vector2.new(bx,minY); e.HpBG.To=Vector2.new(bx,maxY); e.HpBG.Visible=true e.HpBar.From=Vector2.new(bx,maxY); e.HpBar.To=Vector2.new(bx,maxY-barH) e.HpBar.Color=hpColor(pct); e.HpBar.Visible=true else e.HpBG.Visible=false; e.HpBar.Visible=false end end end) -- ============================================================ -- // UI SETUP -- ============================================================ local function safeParent(gui) if not pcall(function() gui.Parent = game:GetService("CoreGui") end) then gui.Parent = LocalPlayer:WaitForChild("PlayerGui") end end local ScreenGui = Instance.new("ScreenGui") ScreenGui.Name = "TECHYMenu_MidnightViolet" ScreenGui.ResetOnSpawn = false ScreenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling ScreenGui.IgnoreGuiInset = true safeParent(ScreenGui) local MENU_W = 390; local MENU_H = 560 local Main = Instance.new("Frame") Main.Name = "Main" Main.Size = UDim2.new(0, MENU_W, 0, MENU_H) Main.Position = UDim2.new(0.5, -MENU_W/2, 0.5, -MENU_H/2) Main.BackgroundColor3 = T.BG Main.BorderSizePixel = 0 Main.Active = true; Main.Draggable = true Main.Visible = true Main.ClipsDescendants = true Main.Parent = ScreenGui Instance.new("UICorner", Main).CornerRadius = UDim.new(0, 10) local Stroke = Instance.new("UIStroke") Stroke.Color = T.Accent; Stroke.Thickness = 1.5 Stroke.Transparency = 0.4; Stroke.Parent = Main local AccentBar = Instance.new("Frame") AccentBar.Size = UDim2.new(1, 0, 0, 3) AccentBar.BackgroundColor3 = T.Accent AccentBar.BorderSizePixel = 0; AccentBar.ZIndex = 3; AccentBar.Parent = Main local AccentGrad = Instance.new("UIGradient") AccentGrad.Color = ColorSequence.new{ ColorSequenceKeypoint.new(0, T.Accent), ColorSequenceKeypoint.new(1, T.AccentBrt), } AccentGrad.Parent = AccentBar local TitleLbl = Instance.new("TextLabel") TitleLbl.Text = "TECHY"; TitleLbl.Size = UDim2.new(0, 120, 0, 34) TitleLbl.Position = UDim2.new(0, 14, 0, 4); TitleLbl.BackgroundTransparency = 1 TitleLbl.TextColor3 = T.TextPri; TitleLbl.Font = Enum.Font.GothamBold TitleLbl.TextSize = 14; TitleLbl.TextXAlignment = Enum.TextXAlignment.Left TitleLbl.ZIndex = 4; TitleLbl.Parent = Main local SubTitleLbl = Instance.new("TextLabel") SubTitleLbl.Text = "midnight violet"; SubTitleLbl.Size = UDim2.new(0, 120, 0, 14) SubTitleLbl.Position = UDim2.new(0, 14, 0, 34); SubTitleLbl.BackgroundTransparency = 1 SubTitleLbl.TextColor3 = T.TextSec; SubTitleLbl.Font = Enum.Font.Gotham SubTitleLbl.TextSize = 10; SubTitleLbl.TextXAlignment = Enum.TextXAlignment.Left SubTitleLbl.ZIndex = 4; SubTitleLbl.Parent = Main local SubLbl = Instance.new("TextLabel") SubLbl.Text = "RShift = hide | "..keyName(Config.AimlockKey).." = aim" SubLbl.Size = UDim2.new(1, -20, 0, 14); SubLbl.Position = UDim2.new(0, 14, 0, 50) SubLbl.BackgroundTransparency = 1; SubLbl.TextColor3 = T.TextSec SubLbl.Font = Enum.Font.Gotham; SubLbl.TextSize = 9 SubLbl.TextXAlignment = Enum.TextXAlignment.Left SubLbl.ZIndex = 4; SubLbl.Parent = Main local openSizeY = UDim2.new(0, MENU_W, 0, MENU_H) local closedSizeY = UDim2.new(0, MENU_W, 0, 0) local tweenInfo = TweenInfo.new(0.28, Enum.EasingStyle.Quint, Enum.EasingDirection.Out) local tweenInfoIn = TweenInfo.new(0.22, Enum.EasingStyle.Quint, Enum.EasingDirection.Out) local menuOpen = true local function openMenu() menuOpen = true; Main.Visible = true; Main.Size = closedSizeY TweenService:Create(Main, tweenInfo, {Size = openSizeY}):Play() TweenService:Create(Stroke, tweenInfo, {Transparency = 0.4}):Play() end local function closeMenu() menuOpen = false local t1 = TweenService:Create(Main, tweenInfoIn, {Size = closedSizeY}) TweenService:Create(Stroke, tweenInfoIn, {Transparency = 1}):Play() t1:Play() t1.Completed:Connect(function() if not menuOpen then Main.Visible = false end end) end UserInputService.InputBegan:Connect(function(i, gp) if gp then return end if i.KeyCode == Config.UIKey then if menuOpen then closeMenu() else openMenu() end end end) -- ============================================================ -- // TAB BAR -- ============================================================ local TabBar = Instance.new("Frame") TabBar.Size = UDim2.new(1, -20, 0, 30); TabBar.Position = UDim2.new(0, 10, 0, 68) TabBar.BackgroundTransparency = 1; TabBar.ZIndex = 3; TabBar.Parent = Main local TBL = Instance.new("UIListLayout") TBL.FillDirection = Enum.FillDirection.Horizontal TBL.Padding = UDim.new(0, 3); TBL.Parent = TabBar local Content = Instance.new("Frame") Content.Size = UDim2.new(1, -20, 1, -106); Content.Position = UDim2.new(0, 10, 0, 102) Content.BackgroundTransparency = 1; Content.ZIndex = 2; Content.Parent = Main -- ============================================================ -- // COMPONENTS -- ============================================================ local function makeTab(name, width) local b = Instance.new("TextButton") b.Text = name; b.Size = UDim2.new(0, width or 70, 1, 0) b.BackgroundColor3 = T.TabInactive; b.TextColor3 = T.TextSec b.Font = Enum.Font.GothamSemibold; b.TextSize = 10 b.BorderSizePixel = 0; b.ZIndex = 4; b.Parent = TabBar Instance.new("UICorner", b).CornerRadius = UDim.new(0, 6) return b end local function makePanel() local f = Instance.new("ScrollingFrame") f.Size = UDim2.new(1, 0, 1, 0); f.BackgroundTransparency = 1 f.BorderSizePixel = 0; f.ScrollBarThickness = 2 f.ScrollBarImageColor3 = T.ScrollBar f.AutomaticCanvasSize = Enum.AutomaticSize.Y f.CanvasSize = UDim2.new(0, 0, 0, 0) f.Visible = false; f.ZIndex = 2; f.Parent = Content local ul = Instance.new("UIListLayout") ul.Padding = UDim.new(0, 4); ul.Parent = f return f end local function section(parent, text) local f = Instance.new("Frame") f.Size = UDim2.new(1, 0, 0, 20); f.BackgroundColor3 = T.Section f.BorderSizePixel = 0; f.ZIndex = 3; f.Parent = parent Instance.new("UICorner", f).CornerRadius = UDim.new(0, 5) local l = Instance.new("TextLabel") l.Text = text:upper(); l.Size = UDim2.new(1, 0, 1, 0) l.BackgroundTransparency = 1; l.TextColor3 = T.AccentBrt l.Font = Enum.Font.GothamBold; l.TextSize = 9 l.TextXAlignment = Enum.TextXAlignment.Left l.Position = UDim2.new(0, 10, 0, 0); l.ZIndex = 4; l.Parent = f end local function toggle(parent, label, key, cb) local row = Instance.new("Frame") row.Size = UDim2.new(1, 0, 0, 32); row.BackgroundColor3 = T.Row row.BorderSizePixel = 0; row.ZIndex = 3; row.Parent = parent Instance.new("UICorner", row).CornerRadius = UDim.new(0, 6) local rowStroke = Instance.new("UIStroke") rowStroke.Color = T.Accent; rowStroke.Thickness = 1 rowStroke.Transparency = 1; rowStroke.Parent = row local lbl = Instance.new("TextLabel") lbl.Text = label; lbl.Size = UDim2.new(1, -50, 1, 0) lbl.Position = UDim2.new(0, 12, 0, 0); lbl.BackgroundTransparency = 1 lbl.TextColor3 = T.TextPri; lbl.Font = Enum.Font.Gotham lbl.TextSize = 11; lbl.TextXAlignment = Enum.TextXAlignment.Left lbl.ZIndex = 4; lbl.Parent = row local bg = Instance.new("Frame") bg.Size = UDim2.new(0, 36, 0, 20); bg.Position = UDim2.new(1, -44, 0.5, -10) bg.BackgroundColor3 = Config[key] and T.Accent or T.AccentDim bg.BorderSizePixel = 0; bg.ZIndex = 4; bg.Parent = row Instance.new("UICorner", bg).CornerRadius = UDim.new(1, 0) local dot = Instance.new("Frame") dot.Size = UDim2.new(0, 14, 0, 14); dot.AnchorPoint = Vector2.new(0.5, 0.5) dot.Position = Config[key] and UDim2.new(1, -10, 0.5, 0) or UDim2.new(0, 10, 0.5, 0) dot.BackgroundColor3 = T.White; dot.BorderSizePixel = 0 dot.ZIndex = 5; dot.Parent = bg Instance.new("UICorner", dot).CornerRadius = UDim.new(1, 0) local btn = Instance.new("TextButton") btn.Size = UDim2.new(1, 0, 1, 0); btn.BackgroundTransparency = 1 btn.Text = ""; btn.ZIndex = 6; btn.Parent = row btn.MouseEnter:Connect(function() TweenService:Create(rowStroke, TweenInfo.new(0.15), {Transparency = 0.6}):Play() end) btn.MouseLeave:Connect(function() TweenService:Create(rowStroke, TweenInfo.new(0.2), {Transparency = 1}):Play() end) btn.MouseButton1Click:Connect(function() Config[key] = not Config[key] local on = Config[key] TweenService:Create(bg, TweenInfo.new(0.18, Enum.EasingStyle.Quint), { BackgroundColor3 = on and T.Accent or T.AccentDim }):Play() TweenService:Create(dot, TweenInfo.new(0.18, Enum.EasingStyle.Quint), { Position = on and UDim2.new(1, -10, 0.5, 0) or UDim2.new(0, 10, 0.5, 0) }):Play() TweenService:Create(row, TweenInfo.new(0.08), { BackgroundColor3 = on and Color3.fromRGB(28, 18, 50) or T.Row }):Play() task.delay(0.12, function() TweenService:Create(row, TweenInfo.new(0.15), {BackgroundColor3 = T.Row}):Play() end) if cb then cb(on) end end) end local function slider(parent, label, key, mn, mx, isFloat) local row = Instance.new("Frame") row.Size = UDim2.new(1, 0, 0, 48); row.BackgroundColor3 = T.Row row.BorderSizePixel = 0; row.ZIndex = 3; row.Parent = parent Instance.new("UICorner", row).CornerRadius = UDim.new(0, 6) local lbl = Instance.new("TextLabel") lbl.Text = label; lbl.Size = UDim2.new(1, -60, 0, 22) lbl.Position = UDim2.new(0, 12, 0, 5); lbl.BackgroundTransparency = 1 lbl.TextColor3 = T.TextPri; lbl.Font = Enum.Font.Gotham lbl.TextSize = 11; lbl.TextXAlignment = Enum.TextXAlignment.Left lbl.ZIndex = 4; lbl.Parent = row local valLbl = Instance.new("TextLabel") valLbl.Size = UDim2.new(0, 54, 0, 22); valLbl.Position = UDim2.new(1, -60, 0, 5) valLbl.BackgroundTransparency = 1; valLbl.TextColor3 = T.TextVal valLbl.Font = Enum.Font.GothamBold; valLbl.TextSize = 11 valLbl.TextXAlignment = Enum.TextXAlignment.Right valLbl.Text = tostring(Config[key]); valLbl.ZIndex = 4; valLbl.Parent = row local hitArea = Instance.new("TextButton") hitArea.Size = UDim2.new(1, -24, 0, 16); hitArea.Position = UDim2.new(0, 12, 0, 28) hitArea.BackgroundColor3 = T.TrackBG; hitArea.BorderSizePixel = 0 hitArea.Text = ""; hitArea.AutoButtonColor = false hitArea.ZIndex = 4; hitArea.Parent = row Instance.new("UICorner", hitArea).CornerRadius = UDim.new(1, 0) local p0 = math.clamp((Config[key] - mn) / (mx - mn), 0, 1) local fill = Instance.new("Frame") fill.Size = UDim2.new(p0, 0, 1, 0); fill.BackgroundColor3 = T.Accent fill.BorderSizePixel = 0; fill.ZIndex = 5; fill.Parent = hitArea Instance.new("UICorner", fill).CornerRadius = UDim.new(1, 0) local fillGrad = Instance.new("UIGradient") fillGrad.Color = ColorSequence.new{ ColorSequenceKeypoint.new(0, T.Accent), ColorSequenceKeypoint.new(1, T.AccentBrt), } fillGrad.Parent = fill local knob = Instance.new("Frame") knob.Size = UDim2.new(0, 16, 0, 16); knob.AnchorPoint = Vector2.new(0.5, 0.5) knob.Position = UDim2.new(p0, 0, 0.5, 0); knob.BackgroundColor3 = T.White knob.BorderSizePixel = 0; knob.ZIndex = 6; knob.Parent = hitArea Instance.new("UICorner", knob).CornerRadius = UDim.new(1, 0) local knobDot = Instance.new("Frame") knobDot.Size = UDim2.new(0, 6, 0, 6); knobDot.AnchorPoint = Vector2.new(0.5, 0.5) knobDot.Position = UDim2.new(0.5, 0, 0.5, 0); knobDot.BackgroundColor3 = T.Accent knobDot.BorderSizePixel = 0; knobDot.ZIndex = 7; knobDot.Parent = knob Instance.new("UICorner", knobDot).CornerRadius = UDim.new(1, 0) local function applyX(absX) local apos = hitArea.AbsolutePosition.X local asiz = hitArea.AbsoluteSize.X local p = math.clamp((absX - apos) / asiz, 0, 1) local v = mn + (mx - mn) * p v = isFloat and (math.floor(v * 100) / 100) or math.floor(v) Config[key] = v fill.Size = UDim2.new(p, 0, 1, 0) knob.Position = UDim2.new(p, 0, 0.5, 0) valLbl.Text = tostring(v) end local dragging = false hitArea.MouseButton1Down:Connect(function(x, _) dragging = true; applyX(x) TweenService:Create(knob, TweenInfo.new(0.1), {Size = UDim2.new(0, 20, 0, 20)}):Play() end) UserInputService.InputChanged:Connect(function(i) if not dragging then return end if i.UserInputType == Enum.UserInputType.MouseMovement then applyX(i.Position.X) end end) UserInputService.InputEnded:Connect(function(i) if i.UserInputType == Enum.UserInputType.MouseButton1 and dragging then dragging = false TweenService:Create(knob, TweenInfo.new(0.1), {Size = UDim2.new(0, 16, 0, 16)}):Play() end end) end -- ============================================================ -- // MODE PICKER (für Aimlock Camera/Mouse) -- ============================================================ local function modePicker(parent, label, configKey, options) local row = Instance.new("Frame") row.Size = UDim2.new(1, 0, 0, 42); row.BackgroundColor3 = T.Row row.BorderSizePixel = 0; row.ZIndex = 3; row.Parent = parent Instance.new("UICorner", row).CornerRadius = UDim.new(0, 6) local lbl = Instance.new("TextLabel") lbl.Text = label; lbl.Size = UDim2.new(0.36, 0, 0, 20) lbl.Position = UDim2.new(0, 12, 0, 5); lbl.BackgroundTransparency = 1 lbl.TextColor3 = T.TextPri; lbl.Font = Enum.Font.Gotham lbl.TextSize = 11; lbl.TextXAlignment = Enum.TextXAlignment.Left lbl.ZIndex = 4; lbl.Parent = row local ks = Instance.new("Frame") ks.Size = UDim2.new(0.64, -10, 0, 28); ks.Position = UDim2.new(0.36, 4, 0, 7) ks.BackgroundTransparency = 1; ks.ClipsDescendants = true ks.ZIndex = 4; ks.Parent = row local kl = Instance.new("UIListLayout") kl.FillDirection = Enum.FillDirection.Horizontal kl.Padding = UDim.new(0, 4); kl.Parent = ks local btns = {} for _, opt in ipairs(options) do local kb = Instance.new("TextButton") kb.Text = opt.label kb.Size = UDim2.new(0, #opt.label * 7 + 16, 1, 0) kb.BackgroundColor3 = Config[configKey] == opt.val and T.Accent or T.Section kb.TextColor3 = T.TextPri; kb.Font = Enum.Font.GothamBold kb.TextSize = 10; kb.BorderSizePixel = 0; kb.ZIndex = 5; kb.Parent = ks Instance.new("UICorner", kb).CornerRadius = UDim.new(0, 4) table.insert(btns, {btn = kb, val = opt.val}) kb.MouseButton1Click:Connect(function() Config[configKey] = opt.val for _, b in ipairs(btns) do TweenService:Create(b.btn, TweenInfo.new(0.12), { BackgroundColor3 = b.val == opt.val and T.Accent or T.Section }):Play() end end) end end local keyOptions = { {label="RMB", val=Enum.UserInputType.MouseButton2}, {label="LMB", val=Enum.UserInputType.MouseButton1}, {label="E", val=Enum.KeyCode.E}, {label="R", val=Enum.KeyCode.R}, {label="F", val=Enum.KeyCode.F}, {label="Q", val=Enum.KeyCode.Q}, {label="C", val=Enum.KeyCode.C}, {label="CAPS", val=Enum.KeyCode.CapsLock}, {label="LALT", val=Enum.KeyCode.LeftAlt}, {label="LCTRL",val=Enum.KeyCode.LeftControl}, } local function keyPicker(parent, label, configKey) local row = Instance.new("Frame") row.Size = UDim2.new(1, 0, 0, 42); row.BackgroundColor3 = T.Row row.BorderSizePixel = 0; row.ZIndex = 3; row.Parent = parent Instance.new("UICorner", row).CornerRadius = UDim.new(0, 6) local lbl = Instance.new("TextLabel") lbl.Text = label; lbl.Size = UDim2.new(0.36, 0, 0, 20) lbl.Position = UDim2.new(0, 12, 0, 5); lbl.BackgroundTransparency = 1 lbl.TextColor3 = T.TextPri; lbl.Font = Enum.Font.Gotham lbl.TextSize = 11; lbl.TextXAlignment = Enum.TextXAlignment.Left lbl.ZIndex = 4; lbl.Parent = row local ks = Instance.new("Frame") ks.Size = UDim2.new(0.64, -10, 0, 28); ks.Position = UDim2.new(0.36, 4, 0, 7) ks.BackgroundTransparency = 1; ks.ClipsDescendants = true ks.ZIndex = 4; ks.Parent = row local kl = Instance.new("UIListLayout") kl.FillDirection = Enum.FillDirection.Horizontal kl.Padding = UDim.new(0, 3); kl.Parent = ks local btns = {} for _, opt in ipairs(keyOptions) do local kb = Instance.new("TextButton") kb.Text = opt.label kb.Size = UDim2.new(0, #opt.label * 6 + 12, 1, 0) kb.BackgroundColor3 = Config[configKey] == opt.val and T.Accent or T.Section kb.TextColor3 = T.TextPri; kb.Font = Enum.Font.GothamBold kb.TextSize = 9; kb.BorderSizePixel = 0; kb.ZIndex = 5; kb.Parent = ks Instance.new("UICorner", kb).CornerRadius = UDim.new(0, 4) table.insert(btns, {btn = kb, val = opt.val}) kb.MouseButton1Click:Connect(function() Config[configKey] = opt.val SubLbl.Text = "RShift = hide | "..keyName(Config.AimlockKey).." = aim" for _, b in ipairs(btns) do TweenService:Create(b.btn, TweenInfo.new(0.12), { BackgroundColor3 = b.val == opt.val and T.Accent or T.Section }):Play() end end) end end -- ============================================================ -- // BUILD TABS + PANELS — 5 tabs now (ESP/AIM/WEAPON/MOVE/MISC) -- ============================================================ local tESP = makeTab("ESP", 64) local tAIM = makeTab("AIM", 54) local tWEAP = makeTab("WEAP", 58) local tMOVE = makeTab("MOVE", 58) local tMISC = makeTab("MISC", 56) local pESP = makePanel() local pAIM = makePanel() local pWEAP = makePanel() local pMOVE = makePanel() local pMISC = makePanel() local allPanels = {pESP, pAIM, pWEAP, pMOVE, pMISC} local allTabs = {tESP, tAIM, tWEAP, tMOVE, tMISC} local activeIndicators = {} for i, t in ipairs(allTabs) do local ind = Instance.new("Frame") ind.Size = UDim2.new(i == 1 and 1 or 0, 0, 0, 2) ind.Position = UDim2.new(0, 0, 1, -2) ind.BackgroundColor3 = T.Accent; ind.BorderSizePixel = 0 ind.ZIndex = 6; ind.Parent = t Instance.new("UICorner", ind).CornerRadius = UDim.new(1, 0) activeIndicators[i] = ind end local function selectTab(i) for j = 1, #allPanels do allPanels[j].Visible = j == i TweenService:Create(allTabs[j], TweenInfo.new(0.15), { BackgroundColor3 = j == i and T.AccentDim or T.TabInactive, TextColor3 = j == i and T.TextPri or T.TextSec, }):Play() TweenService:Create(activeIndicators[j], TweenInfo.new(0.2, Enum.EasingStyle.Quint), { Size = UDim2.new(j == i and 1 or 0, 0, 0, 2) }):Play() end end for i, t in ipairs(allTabs) do t.MouseButton1Click:Connect(function() selectTab(i) end) end -- ============================================================ -- // ESP TAB -- ============================================================ section(pESP, "Box") toggle(pESP, "Box ESP", "BoxESP") toggle(pESP, "Box Fill", "BoxFilled") section(pESP, "Overlays") toggle(pESP, "Tracers", "TracerESP") toggle(pESP, "Names", "NameESP") toggle(pESP, "Health Bar","HealthBar") toggle(pESP, "Distance", "DistanceESP") section(pESP, "Distance Limit") slider(pESP, "ESP Max Dist", "ESPMaxDistance", 50, 2000, false) -- ============================================================ -- // AIM TAB -- ============================================================ section(pAIM, "Aimlock") toggle(pAIM, "Aimlock", "AimlockEnabled") toggle(pAIM, "Team Check", "TeamCheck") toggle(pAIM, "FOV Only", "FOVOnlyInFOV") -- Mode picker: Camera vs Mouse modePicker(pAIM, "Aim Mode", "AimlockMode", { {label = "Camera", val = "Camera"}, {label = "Mouse", val = "Mouse"}, }) keyPicker(pAIM, "Aim Key", "AimlockKey") slider(pAIM, "Smoothing", "AimlockSmoothing", 0.01, 1, true) slider(pAIM, "Max Dist", "MaxDistance", 50, 1000, false) section(pAIM, "FOV") toggle(pAIM, "FOV Circle", "FOVEnabled") slider(pAIM, "FOV Radius", "FOVRadius", 30, 500, false) -- ============================================================ -- // WEAPON TAB -- ============================================================ section(pWEAP, "Ammo") toggle(pWEAP, "Inf Ammo", "InfAmmo", function(on) Config.InfAmmo = on end) toggle(pWEAP, "Auto Reload","AutoReload", function(on) Config.AutoReload = on end) section(pWEAP, "Fire") toggle(pWEAP, "Rapid Fire", "RapidFire", function(on) Config.RapidFire = on hookRapidFire() -- re-hook every toggle (clears old connections internally) end) slider(pWEAP, "Fire Rate (s)", "RapidFireRate", 0.01, 0.5, true) section(pWEAP, "Recoil") toggle(pWEAP, "No Recoil", "NoRecoil") -- ============================================================ -- // MOVE TAB -- ============================================================ section(pMOVE, "Jump") toggle(pMOVE, "Inf Jump", "InfJump") section(pMOVE, "Collision") toggle(pMOVE, "Noclip", "Noclip", function(on) Config.Noclip = on -- When turning off, restore collision on character if not on then local char = LocalPlayer.Character if char then for _, part in ipairs(char:GetDescendants()) do if part:IsA("BasePart") then part.CanCollide = true end end end end end) -- ============================================================ -- // MISC TAB -- ============================================================ section(pMISC, "Performance") slider(pMISC, "Frame Skip", "FrameSkip", 0, 5, false) section(pMISC, "Credits") local cred = Instance.new("TextLabel") cred.Text = "TECHY · DewzaCSharp" cred.Size = UDim2.new(1, 0, 0, 30) cred.BackgroundTransparency = 1; cred.TextColor3 = T.TextSec cred.Font = Enum.Font.GothamBold; cred.TextSize = 10 cred.ZIndex = 3; cred.Parent = pMISC -- ============================================================ -- // INIT -- ============================================================ for _, p in ipairs(Players:GetPlayers()) do if p ~= LocalPlayer then createESP(p) end end Players.PlayerAdded:Connect(function(p) p.CharacterAdded:Connect(function() task.wait(0.5); createESP(p) end) createESP(p) end) Players.PlayerRemoving:Connect(function(p) removeESP(p) end) selectTab(1) print("[TECHY] Midnight Violet | DewzaCSharp — loaded")