Description
TECHY Menu — Clean, Fast, Minimal ESP & Aimbot for Techy A lightweight, performance-optimized script featuring a sleek custom UI with smooth animations. Built for competitive play with precise aimlock and comprehensive visual overlays. Features: Box ESP — 2D bounding boxes with optional fill transparency Tracer ESP — Screen-center to player lines Name & Distance ESP — Clean text overlays with outline Health Bar — Dynamic color (green/orange/red) based on HP percentage Aimlock — Smooth aim assist with configurable smoothing (0.01–1.0) FOV Circle — Visual aim radius with "target only in FOV" option Team Check — Optional friendly-fire prevention Custom Aim Key — Bind to RMB, LMB, E, R, F, Q, C, Caps, LAlt, or LCtrl Performance Controls — Frame skip slider for lower-end systems Draggable UI — RightShift to toggle menu visibility Hotkeys: RightShift — Show/Hide menu RMB (default) — Activate aimlock Performance: Cached bounding boxes, optimized render loop, minimal FPS impact even with full ESP enabled. Clean code, no bloat, instant injection ready.
Script source Luau
-- [[ BloxScripts Risk Notice ]]
-- This script has not been verified by BloxScripts.fun. 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 BloxScripts 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")Review the source before using it. Executions count successful copies, capped at 10 per user and network per script in 24 hours.


Your community, in one place