M
ScriptKeyless
external.vip (wallbang) best keyless script out (silentaim)
The Walking Dead Online 3 [BETA]Desktop compatibleWave · Potassium · Real
Description
best free script out rn wallbang esp gun mods etc keyless
GAMEThe Walking Dead Online 3 [BETA]
UPDATEDOct 16, 2026
ACCESSKeyless
PLATFORMDesktop
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 ]]
--[[
external.vip
FREE VERSION (CRIPPLED EDITION)
⚠️ THIS IS THE FREE VERSION ⚠️
If you want the FULL version:
→ Join our Discord: https://discord.gg/EN6YnuCjYV
This free version has:
- Half the features locked behind Discord
- Features that "work" but not really
- An annoying watermark
- A popup every 30 seconds telling you to join Discord
- "Premium" features that just do nothing
Made because rscripts.net can't handle the full script for some reason lol
]]
local Players = game:GetService("Players")
local UIS = game:GetService("UserInputService")
local TweenService = game:GetService("TweenService")
local RunService = game:GetService("RunService")
local HttpService = game:GetService("HttpService")
local SoundService = game:GetService("SoundService")
local Lighting = game:GetService("Lighting")
local Debris = game:GetService("Debris")
local LocalPlayer = Players.LocalPlayer
local PlayerGui = LocalPlayer:WaitForChild("PlayerGui")
local mouse = LocalPlayer:GetMouse()
--============================================================--
-- BAD THEME (intentionally worse than the real one)
--============================================================--
local Theme = {
Background = Color3.fromRGB(20, 20, 20),
Sidebar = Color3.fromRGB(25, 25, 25),
Panel = Color3.fromRGB(30, 30, 30),
Panel2 = Color3.fromRGB(35, 35, 35),
Border = Color3.fromRGB(50, 50, 50),
BorderLight = Color3.fromRGB(70, 70, 70),
Cyan = Color3.fromRGB(100, 180, 220), -- washed out
Pink = Color3.fromRGB(200, 130, 180),
Green = Color3.fromRGB(100, 200, 100),
Red = Color3.fromRGB(220, 80, 80),
Yellow = Color3.fromRGB(220, 200, 80),
White = Color3.fromRGB(220, 220, 220),
Text = Color3.fromRGB(180, 180, 180),
SubText = Color3.fromRGB(120, 120, 120),
Muted = Color3.fromRGB(80, 80, 80),
Disabled = Color3.fromRGB(40, 40, 40),
}
local ACCENT = Theme.Cyan
local WINDOW_WIDTH = 700
local WINDOW_HEIGHT = 480
local SIDEBAR_WIDTH = 180
local CARD_GAP = 10
local CARD_HEIGHT = 200
--============================================================--
-- DISCORD CONFIG
--============================================================--
local DISCORD_INVITE = "https://discord.gg/EN6YnuCjYV"
local DISCORD_LINK = "https://discord.gg/EN6YnuCjYV"
local FREE_VERSION = true -- always true for this version
--============================================================--
-- SOUNDS (bad quality)
--============================================================--
local SFX = {}
local sfxEnabled = true
local function makeSfx(id, volume, pitch)
local s = Instance.new("Sound")
s.SoundId = id
s.Volume = volume or 0.5
s.PlaybackSpeed = pitch or 1
s.Parent = SoundService
return s
end
-- intentionally bad sounds
SFX.ToggleOn = makeSfx("rbxassetid://6895079853", 0.2, 1.5)
SFX.ToggleOff = makeSfx("rbxassetid://6895079853", 0.2, 0.7)
SFX.Error = makeSfx("rbxassetid://5043539486", 0.3, 0.5)
local function playSfx(sound)
if not sfxEnabled or not sound then return end
task.spawn(function()
local clone = sound:Clone()
clone.Parent = SoundService
clone:Play()
task.delay(2, function() if clone then clone:Destroy() end end)
end)
end
local oldGui = PlayerGui:FindFirstChild("external_vip_free")
if oldGui then oldGui:Destroy() end
local oldNotifs = PlayerGui:FindFirstChild("external_vip_free_notifs")
if oldNotifs then oldNotifs:Destroy() end
--============================================================--
-- HELPERS (simplified/uglier)
--============================================================--
local function New(className, properties, parent)
local object = Instance.new(className)
for property, value in pairs(properties or {}) do
object[property] = value
end
object.Parent = parent
return object
end
local function Corner(object, radius)
local r = radius
if r == "pill" then r = math.huge
elseif r == nil then r = 4 end -- less rounded, uglier
local corner = Instance.new("UICorner")
if r == math.huge then
corner.CornerRadius = UDim.new(1, 0)
else
corner.CornerRadius = UDim.new(0, r)
end
corner.Parent = object
return corner
end
local function Outline(object, color, thickness, transparency)
local stroke = Instance.new("UIStroke")
stroke.Color = color or Theme.Border
stroke.Thickness = thickness or 1
stroke.Transparency = transparency or 0
stroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
stroke.Parent = object
return stroke
end
local function Tween(object, properties, duration)
local tween = TweenService:Create(
object,
TweenInfo.new(duration or 0.15, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),
properties
)
tween:Play()
return tween
end
local function Label(parent, text, position, size, textSize, color)
return New("TextLabel", {
Position = position,
Size = size,
BackgroundTransparency = 1,
Text = text,
Font = Enum.Font.SourceSans, -- ugly font
TextSize = textSize or 10,
TextColor3 = color or Theme.Text,
TextXAlignment = Enum.TextXAlignment.Left,
TextYAlignment = Enum.TextYAlignment.Center,
}, parent)
end
--============================================================--
-- FLAGS + OPTIONS
--============================================================--
local Flags = {}
local Options = {}
local function registerConfig(flag, type, changeState, oldargs)
Options[flag] = { type = type, changeState = changeState, oldargs = oldargs or {} }
end
--============================================================--
-- DISCORD GATE GUI
--============================================================--
local GateGui = New("ScreenGui", {
Name = "external_vip_free_gate",
ResetOnSpawn = false,
IgnoreGuiInset = true,
DisplayOrder = 2000,
ZIndexBehavior = Enum.ZIndexBehavior.Sibling,
}, PlayerGui)
local GateMain = New("Frame", {
Name = "Gate",
Size = UDim2.fromOffset(500, 380),
Position = UDim2.new(0.5, -250, 0.5, -190),
BackgroundColor3 = Color3.fromRGB(25, 25, 30),
BorderSizePixel = 0,
}, GateGui)
Corner(GateMain, 10)
Outline(GateMain, Color3.fromRGB(88, 101, 242), 2)
-- Discord logo-ish thing
local DiscordLogo = New("Frame", {
Position = UDim2.new(0.5, -40, 0, 25),
Size = UDim2.fromOffset(80, 80),
BackgroundColor3 = Color3.fromRGB(88, 101, 242),
BorderSizePixel = 0,
}, GateMain)
Corner(DiscordLogo, "pill")
Label(DiscordLogo, "💬", UDim2.fromOffset(0, 0), UDim2.fromScale(1, 1), 40, Color3.fromRGB(255,255,255)).TextXAlignment = Enum.TextXAlignment.Center
local GateTitle = Label(GateMain, "JOIN THE DISCORD FOR FULL VERSION", UDim2.fromOffset(0, 115), UDim2.new(1, 0, 0, 30), 16, Color3.fromRGB(255,255,255))
GateTitle.TextXAlignment = Enum.TextXAlignment.Center
GateTitle.Font = Enum.Font.SourceSansBold
local GateSub = Label(GateMain, "This is the FREE version. It's missing like half the features.", UDim2.fromOffset(0, 145), UDim2.new(1, 0, 0, 20), 11, Color3.fromRGB(180, 180, 180))
GateSub.TextXAlignment = Enum.TextXAlignment.Center
local GateSub2 = Label(GateMain, "The full version has EVERYTHING. Join to get it.", UDim2.fromOffset(0, 165), UDim2.new(1, 0, 0, 20), 11, Color3.fromRGB(180, 180, 180))
GateSub2.TextXAlignment = Enum.TextXAlignment.Center
local GateSub3 = Label(GateMain, "(we swear it actually works, rscripts.net is just weird and i cant post the full script for some reason)", UDim2.fromOffset(0, 185), UDim2.new(1, 0, 0, 20), 9, Color3.fromRGB(120, 120, 120))
GateSub3.TextXAlignment = Enum.TextXAlignment.Center
-- Discord button
local DiscordBtn = New("TextButton", {
Position = UDim2.new(0.5, -120, 0, 220),
Size = UDim2.fromOffset(240, 40),
BackgroundColor3 = Color3.fromRGB(88, 101, 242),
BorderSizePixel = 0,
Text = "JOIN DISCORD (REQUIRED)",
Font = Enum.Font.SourceSansBold,
TextColor3 = Color3.fromRGB(255,255,255),
TextSize = 13,
AutoButtonColor = false,
}, GateMain)
Corner(DiscordBtn, 6)
Outline(DiscordBtn, Color3.fromRGB(120, 130, 255), 2)
DiscordBtn.MouseButton1Click:Connect(function()
pcall(function()
local http = game:GetService("HttpService")
-- try to open in browser
if setclipboard then
setclipboard(DISCORD_LINK)
-- Show notification that we copied
local copyNote = Label(GateMain, "Link copied to clipboard!", UDim2.fromOffset(0, 265), UDim2.new(1, 0, 0, 20), 10, Color3.fromRGB(100, 220, 100))
copyNote.TextXAlignment = Enum.TextXAlignment.Center
task.delay(3, function() copyNote:Destroy() end)
end
end)
-- Actually try to open
pcall(function()
local http = game:GetService("HttpService")
-- In most executors, this works
if syn and syn.request then
-- no
end
end)
end)
-- "Skip" button (loads bad free version)
local SkipBtn = New("TextButton", {
Position = UDim2.new(0.5, -120, 0, 280),
Size = UDim2.fromOffset(240, 35),
BackgroundColor3 = Color3.fromRGB(40, 40, 45),
BorderSizePixel = 0,
Text = "Continue with FREE version (bad)",
Font = Enum.Font.SourceSans,
TextColor3 = Color3.fromRGB(150, 150, 150),
TextSize = 11,
AutoButtonColor = false,
}, GateMain)
Corner(SkipBtn, 6)
Outline(SkipBtn, Color3.fromRGB(70, 70, 75), 1)
SkipBtn.MouseButton1Click:Connect(function()
GateGui.Enabled = false
notify("Using FREE version. Join Discord for full!", "warn", 5)
end)
-- Discord gate notifications
local GateNotify = New("TextLabel", {
Position = UDim2.fromOffset(0, 325),
Size = UDim2.new(1, 0, 0, 20),
BackgroundTransparency = 1,
Text = "You MUST join Discord to get the full script!",
Font = Enum.Font.SourceSansBold,
TextSize = 11,
TextColor3 = Color3.fromRGB(240, 200, 90),
TextXAlignment = Enum.TextXAlignment.Center,
}, GateMain)
--============================================================--
-- NOTIFICATIONS (bad version)
--============================================================--
local NotifyGui = New("ScreenGui", {
Name = "external_vip_free_notifs",
ResetOnSpawn = false,
IgnoreGuiInset = true,
DisplayOrder = 1000,
ZIndexBehavior = Enum.ZIndexBehavior.Sibling,
}, PlayerGui)
local NotifyHolder = New("Frame", {
Name = "Holder",
AnchorPoint = Vector2.new(1, 0),
Position = UDim2.new(1, -16, 0, 16),
Size = UDim2.fromOffset(280, 400),
BackgroundTransparency = 1,
}, NotifyGui)
New("UIListLayout", {
Padding = UDim.new(0, 6),
HorizontalAlignment = Enum.HorizontalAlignment.Right,
VerticalAlignment = Enum.VerticalAlignment.Top,
SortOrder = Enum.SortOrder.LayoutOrder,
}, NotifyHolder)
local notifyCounter = 0
local function notify(text, kind, duration)
kind = kind or "info"
duration = duration or 3
notifyCounter += 1
local toast = New("Frame", {
Size = UDim2.fromOffset(260, 50),
Position = UDim2.new(1, 300, 0, 0),
BackgroundColor3 = Theme.Panel,
BorderSizePixel = 0,
LayoutOrder = notifyCounter,
ClipsDescendants = true,
}, NotifyHolder)
Corner(toast, 6)
Outline(toast, Theme.Border, 1)
local color = kind == "success" and Theme.Green or (kind == "warn" and Theme.Yellow or (kind == "error" and Theme.Red or Theme.Cyan))
local accent = New("Frame", {
Position = UDim2.fromOffset(0, 0),
Size = UDim2.fromOffset(3, 50),
BackgroundColor3 = color,
BorderSizePixel = 0,
}, toast)
Label(toast, text, UDim2.fromOffset(12, 0), UDim2.new(1, -20, 1, 0), 10, Theme.Text).TextWrapped = true
playSfx(SFX.ToggleOn)
toast.Position = UDim2.new(1, 300, 0, 0)
Tween(toast, { Position = UDim2.new(0, 0, 0, 0) }, 0.25)
task.delay(duration, function()
if not toast.Parent then return end
Tween(toast, { Position = UDim2.new(1, 300, 0, 0) }, 0.25)
task.wait(0.3)
toast:Destroy()
end)
end
--============================================================--
-- GUI
--============================================================--
local Gui = New("ScreenGui", {
Name = "external_vip_free",
ResetOnSpawn = false,
IgnoreGuiInset = true,
ZIndexBehavior = Enum.ZIndexBehavior.Sibling,
}, PlayerGui)
local Main = New("Frame", {
Name = "Window",
Size = UDim2.fromOffset(WINDOW_WIDTH, WINDOW_HEIGHT),
Position = UDim2.new(0.5, -WINDOW_WIDTH/2, 0.5, -WINDOW_HEIGHT/2),
BackgroundColor3 = Theme.Background,
BorderSizePixel = 0,
}, Gui)
Corner(Main, 8)
Outline(Main, Theme.Border, 2)
-- BAD WATERMARK
local Watermark = Label(Main, "FREE VERSION", UDim2.new(1, -120, 0, 5), UDim2.fromOffset(100, 20), 10, Color3.fromRGB(240, 200, 90))
Watermark.TextXAlignment = Enum.TextXAlignment.Right
Watermark.Font = Enum.Font.SourceSansBold
-- SIDEBAR
local Sidebar = New("Frame", {
Name = "Sidebar",
Size = UDim2.fromOffset(SIDEBAR_WIDTH, WINDOW_HEIGHT),
BackgroundColor3 = Theme.Sidebar,
BorderSizePixel = 0,
ClipsDescendants = true,
}, Main)
Corner(Sidebar, 8)
-- BRAND
local Brand = New("Frame", {
Position = UDim2.fromOffset(10, 10),
Size = UDim2.fromOffset(160, 40),
BackgroundTransparency = 1,
}, Sidebar)
local BrandText = Label(Brand, "external.vip", UDim2.fromOffset(0, 5), UDim2.new(1, 0, 0, 18), 13, Theme.White)
BrandText.Font = Enum.Font.SourceSansBold
Label(Brand, "FREE VERSION (limited)", UDim2.fromOffset(0, 23), UDim2.new(1, 0, 0, 14), 9, Theme.Yellow)
-- NAVIGATION
local Navigation = New("ScrollingFrame", {
Position = UDim2.fromOffset(10, 65),
Size = UDim2.new(1, -20, 1, -130),
BackgroundTransparency = 1,
BorderSizePixel = 0,
ScrollBarThickness = 0,
CanvasSize = UDim2.new(0, 0, 0, 0),
AutomaticCanvasSize = Enum.AutomaticSize.Y,
ScrollingDirection = Enum.ScrollingDirection.Y,
}, Sidebar)
New("UIListLayout", { Padding = UDim.new(0, 3), SortOrder = Enum.SortOrder.LayoutOrder }, Navigation)
local Pages = {}
local NavItems = {}
local CurrentPage = nil
local function CreatePage(name)
local page = New("ScrollingFrame", {
Name = name,
Position = UDim2.fromOffset(SIDEBAR_WIDTH, 1),
Size = UDim2.new(1, -SIDEBAR_WIDTH, 1, -21),
BackgroundTransparency = 1,
BorderSizePixel = 0,
Visible = false,
ScrollingDirection = Enum.ScrollingDirection.Y,
ScrollBarThickness = 3,
ScrollBarImageColor3 = Theme.Cyan,
ScrollBarImageTransparency = 0.5,
AutomaticCanvasSize = Enum.AutomaticSize.Y,
CanvasSize = UDim2.new(0, 0, 0, 0),
ClipsDescendants = true,
}, Main)
New("UIPadding", {
PaddingLeft = UDim.new(0, 10),
PaddingRight = UDim.new(0, 10),
PaddingTop = UDim.new(0, 10),
PaddingBottom = UDim.new(0, 15),
}, page)
New("UIListLayout", {
FillDirection = Enum.FillDirection.Vertical,
HorizontalAlignment = Enum.HorizontalAlignment.Left,
VerticalAlignment = Enum.VerticalAlignment.Top,
Padding = UDim.new(0, 8),
SortOrder = Enum.SortOrder.LayoutOrder,
}, page)
Pages[name] = page
return page
end
local function CreateNav(name, icon)
local button = New("TextButton", {
Size = UDim2.new(1, 0, 0, 30),
BackgroundColor3 = Theme.Sidebar,
BorderSizePixel = 0,
AutoButtonColor = false,
Text = "",
LayoutOrder = #NavItems + 1,
}, Navigation)
Corner(button, 6)
local iconLabel = Label(button, icon, UDim2.fromOffset(8, 0), UDim2.fromOffset(20, 30), 12, Theme.SubText)
iconLabel.TextXAlignment = Enum.TextXAlignment.Center
local text = Label(button, name, UDim2.fromOffset(34, 0), UDim2.new(1, -40, 1, 0), 10, Theme.SubText)
NavItems[name] = { Button = button, Text = text, Icon = iconLabel }
button.MouseEnter:Connect(function()
if CurrentPage ~= name then
Tween(button, { BackgroundColor3 = Color3.fromRGB(35, 35, 35) }, 0.1)
end
end)
button.MouseLeave:Connect(function()
if CurrentPage ~= name then
Tween(button, { BackgroundColor3 = Theme.Sidebar }, 0.1)
end
end)
button.MouseButton1Click:Connect(function()
CurrentPage = name
for pageName, page in pairs(Pages) do
page.Visible = pageName == name
end
for navName, item in pairs(NavItems) do
local selected = navName == name
Tween(item.Button, { BackgroundColor3 = selected and Color3.fromRGB(45, 45, 45) or Theme.Sidebar }, 0.1)
Tween(item.Text, { TextColor3 = selected and Theme.White or Theme.SubText }, 0.1)
Tween(item.Icon, { TextColor3 = selected and Theme.Cyan or Theme.SubText }, 0.1)
end
end)
return button
end
local function PageHeader(parent, title, subtitle)
local holder = New("Frame", {
Size = UDim2.new(1, 0, 0, 40),
BackgroundTransparency = 1,
LayoutOrder = 1,
}, parent)
local titleLabel = Label(holder, title, UDim2.fromOffset(0, 0), UDim2.new(1, 0, 0, 22), 14, Theme.White)
titleLabel.Font = Enum.Font.SourceSansBold
Label(holder, subtitle, UDim2.fromOffset(0, 22), UDim2.new(1, 0, 0, 14), 9, Theme.Muted)
return holder
end
local function Columns(parent, amount, perRow)
perRow = perRow or 2 -- less columns because we're lazy
local rows = math.ceil(amount / perRow)
local totalHeight = (rows * CARD_HEIGHT) + (math.max(rows - 1, 0) * CARD_GAP)
local grid = New("Frame", {
Name = "CardGrid",
Size = UDim2.new(1, 0, 0, totalHeight),
BackgroundTransparency = 1,
BorderSizePixel = 0,
ClipsDescendants = false,
LayoutOrder = 2,
}, parent)
local cardOffset = -math.ceil((CARD_GAP * (perRow - 1)) / perRow)
local holders = {}
for i = 1, amount do
local holder = New("Frame", {
Size = UDim2.new(1/perRow, cardOffset, 0, CARD_HEIGHT),
BackgroundTransparency = 1,
BorderSizePixel = 0,
ClipsDescendants = false,
}, grid)
holders[i] = holder
end
New("UIGridLayout", {
CellSize = UDim2.new(1/perRow, cardOffset, 0, CARD_HEIGHT),
CellPadding = UDim2.fromOffset(CARD_GAP, CARD_GAP),
FillDirection = Enum.FillDirection.Horizontal,
FillDirectionMaxCells = perRow,
HorizontalAlignment = Enum.HorizontalAlignment.Left,
VerticalAlignment = Enum.VerticalAlignment.Top,
SortOrder = Enum.SortOrder.LayoutOrder,
}, grid)
for i, holder in ipairs(holders) do holder.LayoutOrder = i end
return holders
end
local function Card(parent, title)
local card = New("Frame", {
Size = UDim2.new(1, 0, 1, 0),
BackgroundColor3 = Theme.Panel,
BorderSizePixel = 0,
ClipsDescendants = false,
}, parent)
Corner(card, 6)
Outline(card, Theme.Border, 1)
local titleLabel = Label(card, title, UDim2.fromOffset(8, 6), UDim2.new(1, -16, 0, 16), 9, Theme.White)
titleLabel.Font = Enum.Font.SourceSansBold
local content = New("ScrollingFrame", {
Position = UDim2.fromOffset(6, 26),
Size = UDim2.new(1, -12, 1, -32),
BackgroundTransparency = 1,
BorderSizePixel = 0,
ClipsDescendants = true,
ScrollBarThickness = 2,
ScrollBarImageColor3 = Theme.Cyan,
ScrollBarImageTransparency = 0.5,
CanvasSize = UDim2.new(0, 0, 0, 0),
AutomaticCanvasSize = Enum.AutomaticSize.Y,
ScrollingDirection = Enum.ScrollingDirection.Y,
}, card)
New("UIListLayout", {
FillDirection = Enum.FillDirection.Vertical,
Padding = UDim.new(0, 4),
SortOrder = Enum.SortOrder.LayoutOrder,
}, content)
New("UIPadding", { PaddingBottom = UDim.new(0, 4) }, content)
return content
end
--============================================================--
-- CHECKBOX (basic/bad)
--============================================================--
local allToggles = {}
local function Checkbox(parent, name, flag, default, callback)
local row = New("Frame", { Size = UDim2.new(1, 0, 0, 22), BackgroundTransparency = 1 }, parent)
local Box = New("TextButton", {
AnchorPoint = Vector2.new(1, 0.5),
Position = UDim2.new(1, -2, 0.5, 0),
Size = UDim2.new(0, 16, 0, 16),
BackgroundColor3 = Theme.Disabled,
BorderSizePixel = 0,
Text = "",
AutoButtonColor = false,
}, row)
Corner(Box, 3)
local boxStroke = Outline(Box, Theme.BorderLight, 1)
Label(row, name, UDim2.fromOffset(1, 0), UDim2.new(1, -24, 1, 0), 9, Theme.Text)
local state = default == true
if flag then Flags[flag] = state end
local function render(animated)
local dur = animated and 0.12 or 0
Tween(Box, { BackgroundColor3 = state and Theme.Cyan or Theme.Disabled }, dur)
Tween(boxStroke, { Color = state and Theme.Cyan or Theme.BorderLight }, dur)
Box.Text = state and "✓" or ""
Box.TextColor3 = Color3.fromRGB(255,255,255)
Box.Font = Enum.Font.SourceSansBold
Box.TextSize = 10
end
local function set(v, fire)
v = v == true
if state == v and not fire then return end
local changed = state ~= v
state = v
if flag then Flags[flag] = v end
render(true)
if changed then
playSfx(state and SFX.ToggleOn or SFX.ToggleOff)
end
if fire ~= false and callback then task.spawn(callback, v) end
end
Box.MouseButton1Click:Connect(function() set(not state, true) end)
render(false)
if flag then registerConfig(flag, "toggle", set, { value = default }) end
local obj = { Set = set, Get = function() return state end, render = render }
table.insert(allToggles, obj)
return obj
end
--============================================================--
-- KEYBIND (basic/bad)
--============================================================--
local keybindRegistry = {}
local function KeybindButton(parent, name, flag, defaultKey, actionFn, callback)
local row = New("Frame", { Size = UDim2.new(1, 0, 0, 22), BackgroundTransparency = 1 }, parent)
Label(row, name, UDim2.fromOffset(1, 0), UDim2.new(1, -56, 1, 0), 9, Theme.Text)
local keyBtn = New("TextButton", {
AnchorPoint = Vector2.new(1, 0.5),
Position = UDim2.new(1, -2, 0.5, 0),
Size = UDim2.new(0, 50, 0, 18),
BackgroundColor3 = Theme.Panel2,
BorderSizePixel = 0,
Text = defaultKey and defaultKey.Name or "None",
Font = Enum.Font.SourceSans,
TextColor3 = Theme.SubText,
TextSize = 8,
AutoButtonColor = false,
}, row)
Corner(keyBtn, 4)
Outline(keyBtn, Theme.Border, 1)
local currentKey = defaultKey or Enum.KeyCode.Unknown
local listening = false
if flag then Flags[flag] = currentKey end
keybindRegistry[flag] = {
action = actionFn,
getKey = function() return currentKey end,
}
local function setKey(k, fire)
currentKey = k
if flag then Flags[flag] = k end
keyBtn.Text = k and k.Name or "None"
keyBtn.TextColor3 = Theme.SubText
if fire ~= false and callback then task.spawn(callback, k) end
end
keyBtn.MouseButton1Click:Connect(function()
listening = true
keyBtn.Text = "..."
keyBtn.TextColor3 = Theme.Cyan
end)
UIS.InputBegan:Connect(function(input, gp)
if gp then return end
if listening then
listening = false
if input.KeyCode ~= Enum.KeyCode.Unknown then setKey(input.KeyCode, true)
else setKey(Enum.UserInputType.MouseButton1, true) end
end
end)
if flag then registerConfig(flag, "keybind", function(v)
if typeof(v) == "EnumItem" then setKey(v, true) end
end, { key = defaultKey }) end
return { Set = function(k) setKey(k, false) end, Get = function() return currentKey end }
end
UIS.InputBegan:Connect(function(input, gp)
if gp then return end
if UIS:GetFocusedTextBox() then return end
for flag, entry in pairs(keybindRegistry) do
if entry.getKey() == input.KeyCode and input.KeyCode ~= Enum.KeyCode.Unknown then
if entry.action then task.spawn(entry.action) end
end
end
end)
--============================================================--
-- SLIDER (basic/bad)
--============================================================--
local function Slider(parent, name, flag, min, max, value, suffix, callback)
local holder = New("Frame", { Size = UDim2.new(1, 0, 0, 36), BackgroundTransparency = 1 }, parent)
Label(holder, name, UDim2.fromOffset(1, 0), UDim2.new(0.7, 0, 0, 12), 9, Theme.Text)
local valueLabel = Label(holder, tostring(value)..(suffix or ""), UDim2.fromOffset(0, 0), UDim2.new(1, 0, 0, 12), 8, Theme.SubText)
valueLabel.TextXAlignment = Enum.TextXAlignment.Right
local bar = New("Frame", {
Position = UDim2.fromOffset(1, 22),
Size = UDim2.new(1, -2, 0, 6),
BackgroundColor3 = Color3.fromRGB(40, 40, 40),
BorderSizePixel = 0,
}, holder)
Corner(bar, "pill")
local p0 = math.clamp((value - min) / (max - min), 0, 1)
local fill = New("Frame", { Size = UDim2.new(p0, 0, 1, 0), BackgroundColor3 = Theme.Cyan, BorderSizePixel = 0 }, bar)
Corner(fill, "pill")
local knob = New("Frame", {
AnchorPoint = Vector2.new(0.5, 0.5),
Position = UDim2.new(p0, 0, 0.5, 0),
Size = UDim2.fromOffset(10, 10),
BackgroundColor3 = Theme.White,
BorderSizePixel = 0,
ZIndex = 3,
}, bar)
Corner(knob, "pill")
local currentValue = value
if flag then Flags[flag] = value end
local function render(v)
local p = math.clamp((v - min) / (max - min), 0, 1)
fill.Size = UDim2.new(p, 0, 1, 0)
knob.Position = UDim2.new(p, 0, 0.5, 0)
valueLabel.Text = tostring(v)..(suffix or "")
end
local function set(v, fire)
v = math.clamp(math.floor(v + 0.5), min, max)
if v == currentValue and fire then return end
currentValue = v
if flag then Flags[flag] = v end
render(v)
if fire ~= false and callback then task.spawn(callback, v) end
end
local dragging = false
local function updateFromX(x)
local p = math.clamp((x - bar.AbsolutePosition.X) / math.max(bar.AbsoluteSize.X, 1), 0, 1)
set(min + (max - min) * p, true)
end
bar.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
dragging = true
updateFromX(input.Position.X)
end
end)
UIS.InputChanged:Connect(function(input)
if dragging and input.UserInputType == Enum.UserInputType.MouseMovement then
updateFromX(input.Position.X)
end
end)
UIS.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = false end
end)
set(value, false)
if flag then registerConfig(flag, "slider", set, { value = value }) end
return { Set = set, Get = function() return currentValue end }
end
--============================================================--
-- DROPDOWN (basic/bad)
--============================================================--
local function Dropdown(parent, name, flag, options, default, callback)
local holder = New("Frame", {
Size = UDim2.new(1, 0, 0, 44),
BackgroundTransparency = 1,
ClipsDescendants = false,
}, parent)
Label(holder, name, UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 12), 9, Theme.Text)
local button = New("TextButton", {
Position = UDim2.fromOffset(0, 16),
Size = UDim2.new(1, 0, 0, 24),
BackgroundColor3 = Theme.Panel2,
BorderSizePixel = 0,
AutoButtonColor = false,
Text = "",
}, holder)
Corner(button, 5)
local bStroke = Outline(button, Theme.Border, 1)
local selected = Label(button, default or options[1], UDim2.fromOffset(8, 0), UDim2.new(1, -26, 1, 0), 9, Theme.SubText)
local arrow = Label(button, "v", UDim2.new(1, -18, 0, 0), UDim2.fromOffset(12, 24), 10, Theme.Muted)
arrow.TextXAlignment = Enum.TextXAlignment.Center
local open = false
local menu = nil
local current = default or options[1]
local values = options
if flag then Flags[flag] = current end
local function setValue(v, fire)
if not table.find(values, v) then v = values[1] end
current = v
if flag then Flags[flag] = v end
selected.Text = tostring(v)
if fire ~= false and callback then task.spawn(callback, v) end
end
local function setOpen(state)
if open and not state and menu then menu:Destroy() menu = nil end
open = state
Tween(arrow, { Rotation = open and 180 or 0 }, 0.15)
if open then
menu = New("Frame", {
Position = UDim2.new(0, 0, 0, 42),
Size = UDim2.new(1, 0, 0, math.min(#values * 22, 110)),
BackgroundColor3 = Color3.fromRGB(35, 35, 35),
BorderSizePixel = 0,
ZIndex = 100,
}, holder)
Corner(menu, 5)
Outline(menu, Theme.BorderLight, 1)
for i, opt in ipairs(values) do
local item = New("TextButton", {
Position = UDim2.fromOffset(0, (i-1)*22),
Size = UDim2.new(1, 0, 0, 22),
BackgroundColor3 = Color3.fromRGB(35, 35, 35),
BackgroundTransparency = 1,
BorderSizePixel = 0,
AutoButtonColor = false,
Text = opt,
Font = Enum.Font.SourceSans,
TextSize = 9,
TextColor3 = Theme.SubText,
ZIndex = 101,
}, menu)
local p = Instance.new("UIPadding") p.PaddingLeft = UDim.new(0, 8) p.Parent = item
item.MouseEnter:Connect(function()
Tween(item, { BackgroundTransparency = 0, TextColor3 = Theme.White,
BackgroundColor3 = Color3.fromRGB(45, 45, 45) }, 0.1)
end)
item.MouseLeave:Connect(function()
Tween(item, { BackgroundTransparency = 1, TextColor3 = Theme.SubText }, 0.1)
end)
item.MouseButton1Click:Connect(function()
setValue(opt, true)
if menu then menu:Destroy() menu = nil end
open = false
Tween(arrow, { Rotation = 0 }, 0.12)
end)
end
end
end
button.MouseButton1Click:Connect(function() setOpen(not open) end)
setValue(current, false)
if flag then registerConfig(flag, "list", function(v) setValue(v, true) end, { value = default }) end
return {
Set = function(v) setValue(v, true) end,
Get = function() return current end,
Refresh = function(newOpts)
values = newOpts
if not table.find(values, current) then setValue(values[1] or "None", false) end
end,
}
end
--============================================================--
-- TEXTBOX (basic/bad)
--============================================================--
local function Textbox(parent, name, flag, default, placeholder, callback)
local row = New("Frame", { Size = UDim2.new(1, 0, 0, 24), BackgroundTransparency = 1 }, parent)
Label(row, name, UDim2.fromOffset(1, 0), UDim2.new(0.4, 0, 1, 0), 9, Theme.Text)
local box = New("TextBox", {
AnchorPoint = Vector2.new(1, 0.5),
Position = UDim2.new(1, -2, 0.5, 0),
Size = UDim2.new(0.55, 0, 20, 0),
BackgroundColor3 = Theme.Panel2,
BorderSizePixel = 0,
Font = Enum.Font.SourceSans,
Text = default or "",
PlaceholderText = placeholder or "...",
TextColor3 = Theme.Text,
TextSize = 9,
TextXAlignment = Enum.TextXAlignment.Left,
ClearTextOnFocus = false,
}, row)
Corner(box, 4)
Outline(box, Theme.Border, 1)
New("UIPadding", { PaddingLeft = UDim.new(0, 6) }, box)
if flag then Flags[flag] = default or "" end
box.FocusLost:Connect(function()
if flag then Flags[flag] = box.Text end
if callback then task.spawn(callback, box.Text) end
end)
if flag then registerConfig(flag, "textbox", function(v) box.Text = v or "" Flags[flag] = box.Text end, { value = default }) end
return { Set = function(v) box.Text = v or "" if flag then Flags[flag] = box.Text end end, Get = function() return box.Text end }
end
--============================================================--
-- COLORPICKER (basic/bad - only 4 colors)
--============================================================--
local function Colorpicker(parent, name, flag, default, callback)
local Row = New("Frame", { Size = UDim2.new(1, 0, 0, 22), BackgroundTransparency = 1 }, parent)
Label(Row, name, UDim2.fromOffset(1, 0), UDim2.new(1, -46, 1, 0), 9, Theme.Text)
local Swatch = New("TextButton", {
AnchorPoint = Vector2.new(1, 0.5),
Position = UDim2.new(1, -2, 0.5, 0),
Size = UDim2.new(0, 36, 0, 16),
BackgroundColor3 = default or Color3.new(1,1,1),
BorderSizePixel = 0,
Text = "",
AutoButtonColor = false,
}, Row)
Corner(Swatch, 4)
Outline(Swatch, Theme.Border, 1)
local current = default or Color3.new(1,1,1)
if flag then Flags[flag] = current end
local function apply(c, fire)
current = c
if flag then Flags[flag] = c end
Swatch.BackgroundColor3 = c
if fire ~= false and callback then task.spawn(callback, c) end
end
-- Only 4 bad colors
local PALETTE = {
Color3.fromRGB(255,255,255),
Color3.fromRGB(100, 180, 220), -- washed cyan
Color3.fromRGB(255, 80, 80), -- red
Color3.fromRGB(100, 200, 100), -- green
}
local idx = 1
for i, c in ipairs(PALETTE) do
if c.R == current.R and c.G == current.G and c.B == current.B then idx = i break end
end
Swatch.MouseButton1Click:Connect(function()
idx = idx % #PALETTE + 1
apply(PALETTE[idx], true)
end)
if flag then registerConfig(flag, "colorpicker", function(v)
if typeof(v) == "Color3" then apply(v, true) end
end, { color = default }) end
return { Set = function(c) apply(c, false) end, Get = function() return current end }
end
local function Button(parent, text, callback)
local row = New("Frame", { Size = UDim2.new(1, 0, 0, 24), BackgroundTransparency = 1 }, parent)
local btn = New("TextButton", {
Position = UDim2.fromOffset(0, 2),
Size = UDim2.new(1, 0, 0, 20),
BackgroundColor3 = Theme.Panel2,
BorderSizePixel = 0,
Font = Enum.Font.SourceSans,
Text = text,
TextColor3 = Theme.Text,
TextSize = 9,
AutoButtonColor = false,
}, row)
Corner(btn, 4)
local s = Outline(btn, Theme.Border, 1)
btn.MouseEnter:Connect(function() Tween(s, { Color = Theme.Cyan }, 0.1) end)
btn.MouseLeave:Connect(function() Tween(s, { Color = Theme.Border }, 0.1) end)
btn.MouseButton1Click:Connect(function() if callback then task.spawn(callback) end end)
end
--============================================================--
-- CONFIG ENGINE (basic)
--============================================================--
local CONFIG_FOLDER = "ExternalVipFreeConfigs"
local function ensureFolder()
if not isfolder(CONFIG_FOLDER) then makefolder(CONFIG_FOLDER) end
end
local function sanitizeName(name)
if not name or name == "" then return nil end
name = tostring(name):gsub("[^%w_%- ]", "")
if name == "" then return nil end
return name
end
local function buildConfigTable()
local data = {}
for flag, v in pairs(Flags) do
if not Options[flag] then continue end
if typeof(v) == "Color3" then
data[flag] = { v.R, v.G, v.B, "__color" }
elseif typeof(v) == "EnumItem" then
data[flag] = { tostring(v.EnumType), v.Name, "__enum" }
else
data[flag] = v
end
end
return data
end
local function applyConfigTable(data)
if type(data) ~= "table" then return end
for flag, v in pairs(data) do
local opt = Options[flag]
if opt then
task.spawn(function()
pcall(function()
if type(v) == "table" and v[4] == "__color" then
opt.changeState(Color3.new(v[1], v[2], v[3]))
elseif type(v) == "table" and v[3] == "__enum" then
local et = Enum[v[1]]
if et and et[v[2]] then opt.changeState(et[v[2]]) end
else
opt.changeState(v)
end
end)
end)
end
end
end
local function refreshConfigList(dropdown)
ensureFolder()
local tbl = {}
local ok, files = pcall(listfiles, CONFIG_FOLDER)
if ok and type(files) == "table" then
for _, path in ipairs(files) do
local name = path:match("([^/\\]+)%.json$")
if name then table.insert(tbl, name) end
end
end
table.sort(tbl)
if dropdown then dropdown.Refresh(tbl) end
return tbl
end
--============================================================--
-- PAGES (reduced and crippled)
--============================================================--
local SilentAimPage = CreatePage("Silent Aim")
local VisualsPage = CreatePage("Visuals")
local MiscPage = CreatePage("Misc")
local ConfigPage = CreatePage("Config")
--============================================================--
-- SILENT AIM (crippled)
--============================================================
PageHeader(SilentAimPage, "Silent Aim", "FREE VERSION - limited features")
do
local silentAimSettings = {
enabled = false, fov = 100, -- smaller FOV
hitbox = "Head",
-- locked features
}
local saCircle
pcall(function()
saCircle = Drawing.new("Circle")
saCircle.Thickness = 1
saCircle.NumSides = 30
saCircle.Filled = false
saCircle.Color = ACCENT
saCircle.Visible = false
end)
local function isTargetable(char)
if not char or char == LocalPlayer.Character then return false end
local hum = char:FindFirstChildOfClass("Humanoid")
if not hum or hum.Health <= 0 then return false end
return true
end
local cachedRay = nil
RunService.RenderStepped:Connect(function()
cachedRay = nil
local camera = workspace.CurrentCamera
if not camera then return end
if saCircle then
saCircle.Visible = silentAimSettings.enabled
if saCircle.Visible then
saCircle.Radius = silentAimSettings.fov
local vp = camera.ViewportSize
saCircle.Position = Vector2.new(vp.X/2, vp.Y/2)
saCircle.Color = ACCENT
saCircle.Filled = false
saCircle.Transparency = 1
saCircle.Thickness = 1
end
end
if not silentAimSettings.enabled then return end
local best, bestDist = nil, silentAimSettings.fov
local center = Vector2.new(camera.ViewportSize.X*0.5, camera.ViewportSize.Y*0.5)
for _, plr in ipairs(Players:GetPlayers()) do
local char = plr.Character
if not isTargetable(char) then continue end
local part = char:FindFirstChild("Head")
if part then
local sp, onScreen = camera:WorldToViewportPoint(part.Position)
if onScreen then
local d = (Vector2.new(sp.X, sp.Y) - center).Magnitude
if d < bestDist then best, bestDist = part, d end
end
end
end
if best then
local origin = camera.CFrame.Position
local dir = best.Position - origin
if dir.Magnitude > 1 then cachedRay = Ray.new(origin, dir.Unit) end
end
end)
do
local nc = newcclosure or function(f) return f end
local old
old = hookmetamethod(game, "__namecall", nc(function(self, ...)
local method = getnamecallmethod()
if silentAimSettings.enabled and cachedRay and self == workspace.CurrentCamera
and (method == "ViewportPointToRay" or method == "ScreenPointToRay") then
return cachedRay
end
return old(self, ...)
end))
end
local saGrid = Columns(SilentAimPage, 2, 2)
local saMain = Card(saGrid[1], "Silent Aim (BASIC)")
Checkbox(saMain, "Enabled", "sa_enabled", false, function(v)
silentAimSettings.enabled = v
end)
Checkbox(saMain, "Show FOV", "sa_showfov", true, function(v) end)
Slider(saMain, "FOV", "sa_fov", 10, 300, 100, " px", function(v) silentAimSettings.fov = v end)
local saLocked = Card(saGrid[2], "LOCKED FEATURES")
Label(saLocked, "❌ Hitbox Selection", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 20), 10, Theme.Red)
Label(saLocked, "❌ Team Check", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 20), 10, Theme.Red)
Label(saLocked, "❌ Wall Check", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 20), 10, Theme.Red)
Label(saLocked, "❌ Smooth Aim", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 20), 10, Theme.Red)
Label(saLocked, "🔒 Join Discord for full", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 20), 10, Theme.Yellow)
end
--============================================================--
-- VISUALS (crippled)
--============================================================
PageHeader(VisualsPage, "Visuals", "FREE VERSION - limited features")
do
local espSettings = {
enabled = false, boxes = true, names = true,
boxcolor = Theme.Cyan,
maxdistance = 500, -- very limited
}
local BOX_LINES = 4 -- only a simple box, not corners
local espObjects = {}
local function createEspDrawings()
local obj = {box = {}}
for i = 1, BOX_LINES do
local l = Drawing.new("Line")
l.Thickness = 2
l.Transparency = 1
l.Visible = false
table.insert(obj.box, l)
end
obj.nameText = Drawing.new("Text")
obj.nameText.Size = 13
obj.nameText.Center = true
obj.nameText.Outline = true
obj.nameText.Font = 2
obj.nameText.Visible = false
return obj
end
local function removeEsp(plr)
local o = espObjects[plr]
if not o then return end
pcall(function()
for _, l in ipairs(o.box) do l:Remove() end
o.nameText:Remove()
end)
espObjects[plr] = nil
end
local function clearEsp()
for plr in pairs(espObjects) do removeEsp(plr) end
end
local function getScreenBounds(camera, character)
local minX, minY = math.huge, math.huge
local maxX, maxY = -math.huge, -math.huge
local found = false
for _, part in ipairs(character:GetChildren()) do
if part:IsA("BasePart") then
local sp = camera:WorldToViewportPoint(part.Position)
if sp.Z > 0 then
minX = math.min(minX, sp.X); minY = math.min(minY, sp.Y)
maxX = math.max(maxX, sp.X); maxY = math.max(maxY, sp.Y)
found = true
end
end
end
if not found then return nil end
return minX, minY, maxX, maxY
end
local function updateSimpleBox(obj, minX, minY, maxX, maxY, alpha, color)
-- simple rectangle (4 lines)
local lines = {
{Vector2.new(minX,minY), Vector2.new(maxX,minY)},
{Vector2.new(maxX,minY), Vector2.new(maxX,maxY)},
{Vector2.new(maxX,maxY), Vector2.new(minX,maxY)},
{Vector2.new(minX,maxY), Vector2.new(minX,minY)},
}
for i = 1, 4 do
local l = obj.box[i]
l.From, l.To = lines[i][1], lines[i][2]
l.Color = color
l.Thickness = 2
l.Transparency = alpha
l.Visible = true
end
end
local function updateEspPlayer(plr, camera)
if not espSettings.enabled or plr == LocalPlayer then return end
local char = plr.Character
if not char then if espObjects[plr] then removeEsp(plr) end return end
local root = char:FindFirstChild("HumanoidRootPart") or char:FindFirstChild("Torso") or char.PrimaryPart
local hum = char:FindFirstChildOfClass("Humanoid")
if not root or not hum or hum.Health <= 0 then
if espObjects[plr] then removeEsp(plr) end
return
end
local dist = (camera.CFrame.Position - root.Position).Magnitude
if dist > espSettings.maxdistance then
local o = espObjects[plr]
if o then
for _, l in ipairs(o.box) do l.Visible = false end
o.nameText.Visible = false
end
return
end
local obj = espObjects[plr]
if not obj then obj = createEspDrawings() espObjects[plr] = obj end
local alpha = 1
local minX, minY, maxX, maxY = getScreenBounds(camera, char)
if not minX then
for _, l in ipairs(obj.box) do l.Visible = false end
obj.nameText.Visible = false
return
end
if espSettings.boxes then
updateSimpleBox(obj, minX, minY, maxX, maxY, alpha, espSettings.boxcolor)
else
for _, l in ipairs(obj.box) do l.Visible = false end
end
if espSettings.names then
obj.nameText.Text = plr.Name
obj.nameText.Position = Vector2.new((minX+maxX)/2, minY-16)
obj.nameText.Color = Color3.fromRGB(255,255,255)
obj.nameText.Visible = true
else
obj.nameText.Visible = false
end
end
Players.PlayerRemoving:Connect(function(plr) removeEsp(plr) end)
RunService.RenderStepped:Connect(function()
local camera = workspace.CurrentCamera
if not camera then return end
if espSettings.enabled then
for _, plr in next, Players:GetPlayers() do
pcall(updateEspPlayer, plr, camera)
end
else
if next(espObjects) then clearEsp() end
end
end)
local espGrid = Columns(VisualsPage, 2, 2)
local espCard = Card(espGrid[1], "ESP (BASIC)")
Checkbox(espCard, "Enable ESP", "esp_enabled", false, function(v)
espSettings.enabled = v
if not v then clearEsp() end
end)
Checkbox(espCard, "Simple Box", "esp_boxes", true, function(v) espSettings.boxes = v end)
Checkbox(espCard, "Names", "esp_names", true, function(v) espSettings.names = v end)
Slider(espCard, "Max Distance", "esp_maxdist", 100, 1000, 500, "m", function(v) espSettings.maxdistance = v end)
local espLocked = Card(espGrid[2], "LOCKED FEATURES")
Label(espLocked, "❌ Skeleton ESP", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 18), 9, Theme.Red)
Label(espLocked, "❌ Tracers", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 18), 9, Theme.Red)
Label(espLocked, "❌ Vehicle ESP", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 18), 9, Theme.Red)
Label(espLocked, "❌ Corpse ESP", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 18), 9, Theme.Red)
Label(espLocked, "❌ Weapon ESP", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 18), 9, Theme.Red)
Label(espLocked, "❌ World Tinter", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 18), 9, Theme.Red)
Label(espLocked, "❌ Full Bright", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 18), 9, Theme.Red)
Label(espLocked, "🔒 Join Discord for full", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 18), 9, Theme.Yellow)
end
--============================================================--
-- MISC (crippled)
--============================================================
PageHeader(MiscPage, "Misc", "FREE VERSION - limited features")
do
-- only infinite jump works
local jumpSettings = { infiniteJump = false }
UIS.JumpRequest:Connect(function()
if not jumpSettings.infiniteJump then return end
local c = LocalPlayer.Character
if not c then return end
local h = c:FindFirstChildOfClass("Humanoid")
if h then h.Jump = true end
end)
local miscGrid = Columns(MiscPage, 2, 2)
local jumpCard = Card(miscGrid[1], "Movement (BASIC)")
Checkbox(jumpCard, "Infinite Jump", "ij_enabled", false, function(v) jumpSettings.infiniteJump = v end)
local miscLocked = Card(miscGrid[2], "LOCKED FEATURES")
Label(miscLocked, "❌ High Jump", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 18), 9, Theme.Red)
Label(miscLocked, "❌ Noclip", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 18), 9, Theme.Red)
Label(miscLocked, "❌ Zoom", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 18), 9, Theme.Red)
Label(miscLocked, "❌ Car Fly", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 18), 9, Theme.Red)
Label(miscLocked, "❌ Hit Sounds", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 18), 9, Theme.Red)
Label(miscLocked, "❌ Hit Notifier", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 18), 9, Theme.Red)
Label(miscLocked, "❌ Gun Glow", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 18), 9, Theme.Red)
Label(miscLocked, "❌ Bullet Tracers", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 18), 9, Theme.Red)
Label(miscLocked, "🔒 Join Discord for full", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 18), 9, Theme.Yellow)
end
--============================================================--
-- CONFIG PAGE (basic)
--============================================================
PageHeader(ConfigPage, "Config", "FREE VERSION - save/load settings")
local cfgGrid = Columns(ConfigPage, 2, 2)
local createCard = Card(cfgGrid[1], "Create Config")
Textbox(createCard, "Name", "cfg_name", "", "my_settings", nil)
Button(createCard, "Create New Config", function()
local name = sanitizeName(Flags["cfg_name"])
if not name then notify("Enter a config name", "error") return end
ensureFolder()
local path = CONFIG_FOLDER .. "/" .. name .. ".json"
if isfile(path) then notify(name .. " already exists", "warn") return end
writefile(path, HttpService:JSONEncode(buildConfigTable()))
notify("Created: " .. name, "success")
if _G.__cfgRefresh then _G.__cfgRefresh() end
end)
local manageCard = Card(cfgGrid[2], "Manage Configs")
local cfgDropdown = Dropdown(manageCard, "Selected", "cfg_selected", {"None"}, "None", nil)
Button(manageCard, "Load", function()
local name = sanitizeName(Flags["cfg_selected"])
if not name or name == "None" then notify("Select a config", "error") return end
local path = CONFIG_FOLDER .. "/" .. name .. ".json"
if not isfile(path) then notify("Config not found", "error") return end
local ok, data = pcall(function() return HttpService:JSONDecode(readfile(path)) end)
if not ok or type(data) ~= "table" then notify("Corrupt config", "error") return end
applyConfigTable(data)
notify("Loaded: " .. name, "success")
end)
Button(manageCard, "Save", function()
local name = sanitizeName(Flags["cfg_selected"])
if not name or name == "None" then notify("Select a config", "error") return end
local path = CONFIG_FOLDER .. "/" .. name .. ".json"
if not isfile(path) then notify("Config not found", "error") return end
writefile(path, HttpService:JSONEncode(buildConfigTable()))
notify("Saved: " .. name, "success")
end)
Button(manageCard, "Delete", function()
local name = sanitizeName(Flags["cfg_selected"])
if not name or name == "None" then notify("Select a config", "error") return end
local path = CONFIG_FOLDER .. "/" .. name .. ".json"
if isfile(path) then
delfile(path)
notify("Deleted: " .. name, "warn")
if _G.__cfgRefresh then _G.__cfgRefresh() end
else notify("Config not found", "error") end
end)
Button(manageCard, "Refresh", function()
if _G.__cfgRefresh then _G.__cfgRefresh() end
end)
_G.__cfgRefresh = function()
local list = refreshConfigList(cfgDropdown)
if #list == 0 then cfgDropdown.Set("None") end
end
task.spawn(function()
task.wait(0.5)
_G.__cfgRefresh()
end)
-- Discord reminder card
local discordCard = Card(cfgGrid[1], "REMINDER")
Label(discordCard, "You're using the FREE version.", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 18), 10, Theme.Yellow)
Label(discordCard, "Join Discord for the FULL script!", UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 18), 10, Theme.Text)
Label(discordCard, DISCORD_INVITE, UDim2.fromOffset(1, 0), UDim2.new(1, 0, 0, 18), 10, Color3.fromRGB(88, 101, 242))
Button(discordCard, "Copy Discord Link", function()
if setclipboard then
setclipboard(DISCORD_LINK)
notify("Discord link copied!", "success")
else
notify("Clipboard not available", "error")
end
end)
--============================================================--
-- NAV
--============================================================--
CreateNav("Silent Aim", "◈")
CreateNav("Visuals", "◉")
CreateNav("Misc", "◆")
CreateNav("Config", "⚙")
CurrentPage = "Silent Aim"
for pageName, page in pairs(Pages) do
page.Visible = pageName == "Silent Aim"
end
for navName, item in pairs(NavItems) do
local selected = navName == "Silent Aim"
item.Button.BackgroundColor3 = selected and Color3.fromRGB(45, 45, 45) or Theme.Sidebar
item.Text.TextColor3 = selected and Theme.White or Theme.SubText
item.Icon.TextColor3 = selected and Theme.Cyan or Theme.SubText
end
--============================================================--
-- STATUS BAR
--============================================================
local Status = New("Frame", {
Position = UDim2.new(0, SIDEBAR_WIDTH, 1, -18),
Size = UDim2.new(1, -SIDEBAR_WIDTH, 0, 18),
BackgroundColor3 = Color3.fromRGB(15, 15, 15),
BorderSizePixel = 0,
}, Main)
Label(Status, "external.vip FREE", UDim2.fromOffset(8, 0), UDim2.fromOffset(100, 18), 8, Theme.Pink)
local StatusRight = Label(Status, "JOIN DISCORD FOR FULL", UDim2.new(1, -180, 0, 0), UDim2.fromOffset(170, 18), 7, Theme.Yellow)
StatusRight.TextXAlignment = Enum.TextXAlignment.Right
--============================================================--
-- DRAGGING
--============================================================
local dragging = false
local dragStart
local startPosition
Main.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
if input.Position.X >= Main.AbsolutePosition.X + SIDEBAR_WIDTH then return end
dragging = true
dragStart = input.Position
startPosition = Main.Position
end
end)
Main.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = false end
end)
UIS.InputChanged:Connect(function(input)
if dragging and input.UserInputType == Enum.UserInputType.MouseMovement then
local delta = input.Position - dragStart
Main.Position = UDim2.new(
startPosition.X.Scale, startPosition.X.Offset + delta.X,
startPosition.Y.Scale, startPosition.Y.Offset + delta.Y
)
end
end)
UIS.InputBegan:Connect(function(input, processed)
if processed then return end
if input.KeyCode == Enum.KeyCode.RightShift then
Gui.Enabled = not Gui.Enabled
GateGui.Enabled = not Gui.Enabled
end
end)
--============================================================--
-- ANNOYING DISCORD REMINDER (every 30 seconds)
--============================================================
task.spawn(function()
while Gui.Parent do
task.wait(30)
if Gui.Enabled and FREE_VERSION then
notify("⚠️ Join Discord for the FULL version! ⚠️", "warn", 5)
task.wait(0.5)
notify("You're missing: Tracers, Gun Glow, Noclip, World Tint, and MORE!", "warn", 5)
end
end
end)
--============================================================--
-- INITIAL NOTIFICATIONS
--============================================================
task.delay(0.5, function()
notify("external.vip FREE VERSION loaded", "warn", 5)
task.wait(0.5)
notify("⚠️ You're using the limited free version!", "error", 5)
task.wait(0.5)
notify("Join " .. DISCORD_INVITE .. " for the FULL script!", "warn", 6)
task.wait(0.5)
notify("(full version works, rscripts.net is just weird lol)", "info", 5)
end)
print("[external.vip] FREE VERSION (crippled edition) loaded")
print("[external.vip] Join " .. DISCORD_INVITE .. " for the full script")Review the source before using it. Executions count successful copies, capped at 10 per user and network per script in 24 hours.
Community discussion
0Start the conversation.


Your community, in one place