Script
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local CHARS_PATH = ReplicatedStorage:WaitForChild("Characters")
local CHOSEN_VALUE_NAME = "CharacterCHOSENVALUE"
local CAMERA_REMOTES_PATH = {"Remotes", "Camera"}
local DISABLED_PREFIX = "__off_"
local UI_TOGGLE_KEY = Enum.KeyCode.RightControl
local MOUSE_UNLOCK_KEY = Enum.KeyCode.M
local HOLD_INTERVAL = 0.12
local RAPID_INTERVAL = 0.03
local AttackKeybinds = {}
local AttackModes = {}
local HeldKeys = {}
local FireTimers = {}
local SidebarEntries = {}
local CameraToggles = {}
local CapturingKeybindFor, CapturingKeybindBtn = nil, nil
local MouseUnlocked, Minimized = false, false
local SelectedCharacter = nil
local ActiveTab = "Abilities"
local LocalPlayer = Players.LocalPlayer
local PlayerGui = LocalPlayer:WaitForChild("PlayerGui")
local function make(class, props, parent)
local obj = Instance.new(class)
for k, v in pairs(props) do obj[k] = v end
if parent then obj.Parent = parent end
return obj
end
local function corner(r, p) make("UICorner", {CornerRadius=UDim.new(0,r)}, p) end
local function pad(t, l, r, b, p)
make("UIPadding", {PaddingTop=UDim.new(0,t),PaddingLeft=UDim.new(0,l),PaddingRight=UDim.new(0,r),PaddingBottom=UDim.new(0,b or 0)}, p)
end
local function stroke(th, col, p)
make("UIStroke", {Thickness=th,Color=col,ApplyStrokeMode=Enum.ApplyStrokeMode.Border}, p)
end
local C = {
BG = Color3.fromRGB(8, 8, 8),
PANEL = Color3.fromRGB(13, 13, 13),
ROW = Color3.fromRGB(20, 20, 20),
BAR = Color3.fromRGB(11, 11, 11),
BTN = Color3.fromRGB(30, 30, 30),
BORDER = Color3.fromRGB(40, 40, 40),
BORDLO = Color3.fromRGB(28, 28, 28),
WHITE = Color3.fromRGB(220, 220, 220),
DIM = Color3.fromRGB(90, 90, 90),
MID = Color3.fromRGB(140, 140, 140),
SEARCH = Color3.fromRGB(15, 15, 15),
SEL_BG = Color3.fromRGB(26, 26, 26),
SEL_TXT = Color3.fromRGB(200, 200, 200),
TAB_ACT = Color3.fromRGB(26, 26, 26),
ON = Color3.fromRGB(200, 200, 200),
OFF = Color3.fromRGB(30, 30, 30),
PENDING = Color3.fromRGB(50, 44, 18),
}
local MODES = {"Click", "Hold", "Rapid"}
local MODE_CFG = {
Click = {bg=Color3.fromRGB(22,22,22), tc=Color3.fromRGB(75,75,75), br=Color3.fromRGB(35,35,35)},
Hold = {bg=Color3.fromRGB(35,35,35), tc=Color3.fromRGB(160,160,160), br=Color3.fromRGB(55,55,55)},
Rapid = {bg=Color3.fromRGB(210,210,210), tc=Color3.fromRGB(15,15,15), br=Color3.fromRGB(180,180,180)},
}
local ScreenGui = make("ScreenGui", {
Name="AbilityManagerUI", ResetOnSpawn=false, IgnoreGuiInset=true, DisplayOrder=15
}, PlayerGui)
local ModalButton = make("TextButton", {
Size=UDim2.new(0,0,0,0), BackgroundTransparency=1, Modal=false, Text="", ZIndex=1
}, ScreenGui)
local CaptureOverlay = make("TextButton", {
Size=UDim2.new(1,0,1,0), BackgroundTransparency=1, Text="", ZIndex=4, Visible=false
}, ScreenGui)
local MainFrame = make("Frame", {
Name="MainFrame", Size=UDim2.new(0,500,0,420),
Position=UDim2.new(0.5,-250,0.5,-210),
BackgroundColor3=C.BG, BorderSizePixel=0, ClipsDescendants=true
}, ScreenGui)
corner(8, MainFrame)
stroke(1, C.BORDER, MainFrame)
local TitleBar = make("Frame", {
Size=UDim2.new(1,0,0,32), BackgroundColor3=C.BAR, BorderSizePixel=0, Active=true
}, MainFrame)
corner(8, TitleBar)
make("Frame", {
Size=UDim2.new(1,0,0.5,0), Position=UDim2.new(0,0,0.5,0),
BackgroundColor3=C.BAR, BorderSizePixel=0
}, TitleBar)
make("Frame", {
Size=UDim2.new(1,0,0,1), Position=UDim2.new(0,0,1,-1),
BackgroundColor3=C.BORDER, BorderSizePixel=0
}, TitleBar)
make("TextLabel", {
Size=UDim2.new(0,160,1,0), Position=UDim2.new(0,10,0,0),
BackgroundTransparency=1, Text="Ability Manager",
TextColor3=C.WHITE, TextXAlignment=Enum.TextXAlignment.Left,
Font=Enum.Font.GothamBold, TextSize=12
}, TitleBar)
local function titleBtn(xOff, w, label)
local b = make("TextButton", {
Size=UDim2.new(0,w,0,20), Position=UDim2.new(1,xOff,0.5,-10),
BackgroundColor3=C.BTN, BorderSizePixel=0,
Text=label, TextColor3=C.MID,
Font=Enum.Font.GothamBold, TextSize=11, ZIndex=5
}, TitleBar)
corner(4, b)
stroke(1, C.BORDER, b)
return b
end
local CloseBtn = titleBtn(-26, 20, "X")
local MinimizeBtn = titleBtn(-52, 20, "-")
local MouseBtn = titleBtn(-122, 64, "Unlock [M]")
MouseBtn.TextSize = 10
local function SetMouseUnlock(state)
MouseUnlocked = state
ModalButton.Modal = state
MouseBtn.Text = state and "Lock [M]" or "Unlock [M]"
MouseBtn.TextColor3 = state and C.WHITE or C.MID
MouseBtn.BackgroundColor3 = state and Color3.fromRGB(38,38,38) or C.BTN
end
MouseBtn.MouseButton1Click:Connect(function() SetMouseUnlock(not MouseUnlocked) end)
local TabBar = make("Frame", {
Size=UDim2.new(1,0,0,28), Position=UDim2.new(0,0,0,32),
BackgroundColor3=C.PANEL, BorderSizePixel=0
}, MainFrame)
make("Frame", {
Size=UDim2.new(1,0,0,1), Position=UDim2.new(0,0,1,-1),
BackgroundColor3=C.BORDER, BorderSizePixel=0
}, TabBar)
local function makeTab(label, xPos, w)
local t = make("TextButton", {
Size=UDim2.new(0,w,0,22), Position=UDim2.new(0,xPos,0.5,-11),
BackgroundColor3=C.BTN, BorderSizePixel=0,
Text=label, TextColor3=C.DIM,
Font=Enum.Font.GothamBold, TextSize=10, ZIndex=3
}, TabBar)
corner(4, t)
stroke(1, C.BORDLO, t)
return t
end
local TabAbilities = makeTab("Abilities", 6, 72)
local TabSettings = makeTab("Settings", 84, 62)
local Body = make("Frame", {
Size=UDim2.new(1,0,1,-60), Position=UDim2.new(0,0,0,60),
BackgroundTransparency=1, BorderSizePixel=0
}, MainFrame)
local AbilitiesPanel = make("Frame", {
Size=UDim2.new(1,0,1,0), BackgroundTransparency=1, BorderSizePixel=0
}, Body)
make("Frame", {
Size=UDim2.new(0,1,1,0), Position=UDim2.new(0,148,0,0),
BackgroundColor3=C.BORDER, BorderSizePixel=0
}, AbilitiesPanel)
local SidebarBg = make("Frame", {
Size=UDim2.new(0,148,1,0), BackgroundColor3=C.PANEL, BorderSizePixel=0
}, AbilitiesPanel)
local SidebarHeader = make("Frame", {
Size=UDim2.new(1,0,0,72), BackgroundColor3=C.BAR, BorderSizePixel=0
}, SidebarBg)
make("Frame", {
Size=UDim2.new(1,0,0,1), Position=UDim2.new(0,0,1,-1),
BackgroundColor3=C.BORDER, BorderSizePixel=0
}, SidebarHeader)
make("TextLabel", {
Size=UDim2.new(1,0,0,20), Position=UDim2.new(0,0,0,4),
BackgroundTransparency=1, Text="CHARACTERS",
TextColor3=C.DIM, TextXAlignment=Enum.TextXAlignment.Center,
Font=Enum.Font.GothamBold, TextSize=9
}, SidebarHeader)
local StatusLabel = make("TextLabel", {
Size=UDim2.new(1,-8,0,18), Position=UDim2.new(0,4,0,24),
BackgroundColor3=C.SEARCH, BorderSizePixel=0,
Text="Active: None", TextColor3=C.DIM,
Font=Enum.Font.Gotham, TextSize=10
}, SidebarHeader)
corner(4, StatusLabel)
stroke(1, C.BORDLO, StatusLabel)
local SearchBox = make("TextBox", {
Size=UDim2.new(1,-8,0,20), Position=UDim2.new(0,4,0,46),
BackgroundColor3=C.SEARCH, BorderSizePixel=0,
Text="", PlaceholderText="Search...",
TextColor3=C.WHITE, PlaceholderColor3=C.DIM,
Font=Enum.Font.Gotham, TextSize=11,
ClearTextOnFocus=false, ZIndex=5
}, SidebarHeader)
corner(4, SearchBox)
stroke(1, C.BORDLO, SearchBox)
local SidebarScroll = make("ScrollingFrame", {
Size=UDim2.new(1,0,1,-72), Position=UDim2.new(0,0,0,72),
BackgroundTransparency=1, BorderSizePixel=0,
ScrollBarThickness=2, ScrollBarImageColor3=C.BORDER,
CanvasSize=UDim2.new(0,0,0,0), AutomaticCanvasSize=Enum.AutomaticSize.Y
}, SidebarBg)
make("UIListLayout", {Padding=UDim.new(0,2), SortOrder=Enum.SortOrder.LayoutOrder}, SidebarScroll)
pad(4,4,4,0, SidebarScroll)
local MainPanel = make("Frame", {
Size=UDim2.new(1,-149,1,0), Position=UDim2.new(0,149,0,0),
BackgroundTransparency=1, BorderSizePixel=0
}, AbilitiesPanel)
local PanelHeader = make("Frame", {
Size=UDim2.new(1,0,0,32), BackgroundColor3=C.BAR, BorderSizePixel=0
}, MainPanel)
make("Frame", {
Size=UDim2.new(1,0,0,1), Position=UDim2.new(0,0,1,-1),
BackgroundColor3=C.BORDER, BorderSizePixel=0
}, PanelHeader)
local PanelHeaderLabel = make("TextLabel", {
Size=UDim2.new(1,-116,1,0), Position=UDim2.new(0,10,0,0),
BackgroundTransparency=1, Text="Select a character",
TextColor3=C.DIM, TextXAlignment=Enum.TextXAlignment.Left,
Font=Enum.Font.GothamBold, TextSize=11
}, PanelHeader)
local SelectBtn = make("TextButton", {
Size=UDim2.new(0,100,0,22), Position=UDim2.new(1,-106,0.5,-11),
BackgroundColor3=C.BTN, BorderSizePixel=0,
Text="Use Character", TextColor3=C.MID,
Font=Enum.Font.GothamBold, TextSize=10, ZIndex=5, Visible=false
}, PanelHeader)
corner(4, SelectBtn)
stroke(1, C.BORDER, SelectBtn)
local ColHeader = make("Frame", {
Size=UDim2.new(1,0,0,20), Position=UDim2.new(0,0,0,32),
BackgroundColor3=C.PANEL, BorderSizePixel=0
}, MainPanel)
make("Frame", {
Size=UDim2.new(1,0,0,1), Position=UDim2.new(0,0,1,-1),
BackgroundColor3=C.BORDLO, BorderSizePixel=0
}, ColHeader)
for _, cfg in ipairs({
{text="ABILITY", pos=UDim2.new(0,10,0,0), size=UDim2.new(1,-198,1,0), align=Enum.TextXAlignment.Left},
{text="MODE", pos=UDim2.new(1,-190,0,0), size=UDim2.new(0,50,1,0), align=Enum.TextXAlignment.Center},
{text="FIRE", pos=UDim2.new(1,-134,0,0), size=UDim2.new(0,44,1,0), align=Enum.TextXAlignment.Center},
{text="KEYBIND", pos=UDim2.new(1,-82,0,0), size=UDim2.new(0,76,1,0), align=Enum.TextXAlignment.Center},
}) do
make("TextLabel", {
Size=cfg.size, Position=cfg.pos, BackgroundTransparency=1,
Text=cfg.text, TextColor3=C.DIM, TextXAlignment=cfg.align,
Font=Enum.Font.GothamBold, TextSize=9
}, ColHeader)
end
local AttackScroll = make("ScrollingFrame", {
Size=UDim2.new(1,0,1,-70), Position=UDim2.new(0,0,0,52),
BackgroundTransparency=1, BorderSizePixel=0,
ScrollBarThickness=2, ScrollBarImageColor3=C.BORDER,
CanvasSize=UDim2.new(0,0,0,0), AutomaticCanvasSize=Enum.AutomaticSize.Y
}, MainPanel)
make("UIListLayout", {Padding=UDim.new(0,2), SortOrder=Enum.SortOrder.LayoutOrder}, AttackScroll)
pad(4,6,6,0, AttackScroll)
local AbilityHint = make("Frame", {
Size=UDim2.new(1,-149,0,18), Position=UDim2.new(0,149,1,-18),
BackgroundColor3=C.BAR, BorderSizePixel=0, ZIndex=2
}, AbilitiesPanel)
make("Frame", {
Size=UDim2.new(1,0,0,1), BackgroundColor3=C.BORDLO, BorderSizePixel=0, ZIndex=2
}, AbilityHint)
make("TextLabel", {
Size=UDim2.new(1,-8,1,0), Position=UDim2.new(0,8,0,0),
BackgroundTransparency=1,
Text="Left-click keybind to set | Right-click to clear | Mode cycles: Click > Hold > Rapid",
TextColor3=C.DIM, TextXAlignment=Enum.TextXAlignment.Left,
Font=Enum.Font.Gotham, TextSize=9, ZIndex=3
}, AbilityHint)
local SettingsPanel = make("Frame", {
Size=UDim2.new(1,0,1,0), BackgroundTransparency=1, BorderSizePixel=0, Visible=false
}, Body)
local SettingsHeader = make("Frame", {
Size=UDim2.new(1,0,0,52), BackgroundColor3=C.BAR, BorderSizePixel=0
}, SettingsPanel)
make("Frame", {
Size=UDim2.new(1,0,0,1), Position=UDim2.new(0,0,1,-1),
BackgroundColor3=C.BORDER, BorderSizePixel=0
}, SettingsHeader)
make("TextLabel", {
Size=UDim2.new(1,-200,0,20), Position=UDim2.new(0,12,0,6),
BackgroundTransparency=1,
Text="Camera Shake Remotes",
TextColor3=C.WHITE, TextXAlignment=Enum.TextXAlignment.Left,
Font=Enum.Font.GothamBold, TextSize=12
}, SettingsHeader)
make("TextLabel", {
Size=UDim2.new(1,-200,0,14), Position=UDim2.new(0,12,0,28),
BackgroundTransparency=1,
Text="Mark changes then Apply — reset yourself after for it to take effect.",
TextColor3=C.DIM, TextXAlignment=Enum.TextXAlignment.Left,
Font=Enum.Font.Gotham, TextSize=9
}, SettingsHeader)
local AllOnBtn = make("TextButton", {
Size=UDim2.new(0,46,0,20), Position=UDim2.new(1,-196,0.5,-10),
BackgroundColor3=C.BTN, BorderSizePixel=0,
Text="All On", TextColor3=C.MID,
Font=Enum.Font.GothamBold, TextSize=10, ZIndex=5
}, SettingsHeader)
corner(4, AllOnBtn)
stroke(1, C.BORDER, AllOnBtn)
local AllOffBtn = make("TextButton", {
Size=UDim2.new(0,46,0,20), Position=UDim2.new(1,-144,0.5,-10),
BackgroundColor3=C.BTN, BorderSizePixel=0,
Text="All Off", TextColor3=C.MID,
Font=Enum.Font.GothamBold, TextSize=10, ZIndex=5
}, SettingsHeader)
corner(4, AllOffBtn)
stroke(1, C.BORDER, AllOffBtn)
local ApplyChangesBtn = make("TextButton", {
Size=UDim2.new(0,84,0,20), Position=UDim2.new(1,-88,0.5,-10),
BackgroundColor3=Color3.fromRGB(38,34,16), BorderSizePixel=0,
Text="Apply Changes", TextColor3=Color3.fromRGB(200,180,80),
Font=Enum.Font.GothamBold, TextSize=10, ZIndex=5
}, SettingsHeader)
corner(4, ApplyChangesBtn)
stroke(1, Color3.fromRGB(80,70,30), ApplyChangesBtn)
local SettingsColHeader = make("Frame", {
Size=UDim2.new(1,0,0,20), Position=UDim2.new(0,0,0,52),
BackgroundColor3=C.PANEL, BorderSizePixel=0
}, SettingsPanel)
make("Frame", {
Size=UDim2.new(1,0,0,1), Position=UDim2.new(0,0,1,-1),
BackgroundColor3=C.BORDLO, BorderSizePixel=0
}, SettingsColHeader)
make("TextLabel", {
Size=UDim2.new(1,-80,1,0), Position=UDim2.new(0,12,0,0),
BackgroundTransparency=1, Text="REMOTE NAME",
TextColor3=C.DIM, TextXAlignment=Enum.TextXAlignment.Left,
Font=Enum.Font.GothamBold, TextSize=9
}, SettingsColHeader)
make("TextLabel", {
Size=UDim2.new(0,70,1,0), Position=UDim2.new(1,-76,0,0),
BackgroundTransparency=1, Text="STATE",
TextColor3=C.DIM, TextXAlignment=Enum.TextXAlignment.Center,
Font=Enum.Font.GothamBold, TextSize=9
}, SettingsColHeader)
local SettingsScroll = make("ScrollingFrame", {
Size=UDim2.new(1,0,1,-72), Position=UDim2.new(0,0,0,72),
BackgroundTransparency=1, BorderSizePixel=0,
ScrollBarThickness=2, ScrollBarImageColor3=C.BORDER,
CanvasSize=UDim2.new(0,0,0,0), AutomaticCanvasSize=Enum.AutomaticSize.Y
}, SettingsPanel)
make("UIListLayout", {Padding=UDim.new(0,2), SortOrder=Enum.SortOrder.LayoutOrder}, SettingsScroll)
pad(4,6,6,0, SettingsScroll)
local function SetTab(name)
ActiveTab = name
AbilitiesPanel.Visible = name == "Abilities"
SettingsPanel.Visible = name == "Settings"
TabAbilities.BackgroundColor3 = name == "Abilities" and C.TAB_ACT or C.BTN
TabAbilities.TextColor3 = name == "Abilities" and C.WHITE or C.DIM
TabSettings.BackgroundColor3 = name == "Settings" and C.TAB_ACT or C.BTN
TabSettings.TextColor3 = name == "Settings" and C.WHITE or C.DIM
end
TabAbilities.MouseButton1Click:Connect(function() SetTab("Abilities") end)
TabSettings.MouseButton1Click:Connect(function() SetTab("Settings") end)
SetTab("Abilities")
local function GetCameraFolder()
local node = ReplicatedStorage
for _, part in ipairs(CAMERA_REMOTES_PATH) do
node = node:FindFirstChild(part)
if not node then return nil end
end
return node
end
local function IsDisabled(remote)
return remote.Name:sub(1, #DISABLED_PREFIX) == DISABLED_PREFIX
end
local function UpdateToggleVisual(entry)
local desired = entry.pending ~= nil and entry.pending or entry.enabled
local isPending = entry.pending ~= nil and (entry.pending ~= entry.enabled)
local s = entry.btn:FindFirstChildWhichIsA("UIStroke")
if desired then
entry.btn.BackgroundColor3 = isPending and C.PENDING or Color3.fromRGB(34,34,34)
entry.btn.TextColor3 = isPending and Color3.fromRGB(200,180,80) or C.WHITE
entry.btn.Text = isPending and "Enable →" or "Enabled"
if s then s.Color = isPending and Color3.fromRGB(90,80,30) or Color3.fromRGB(60,60,60) end
else
entry.btn.BackgroundColor3 = isPending and Color3.fromRGB(40,18,18) or C.OFF
entry.btn.TextColor3 = isPending and Color3.fromRGB(200,100,100) or C.DIM
entry.btn.Text = isPending and "Disable →" or "Disabled"
if s then s.Color = isPending and Color3.fromRGB(80,35,35) or C.BORDLO end
end
entry.nameLabel.TextColor3 = desired and C.WHITE or C.DIM
end
local function MarkPending(entry, wantEnabled)
if wantEnabled ~= entry.enabled then
entry.pending = wantEnabled
else
entry.pending = nil
end
UpdateToggleVisual(entry)
end
local function ApplySettings()
local anyChange = false
for _, entry in ipairs(CameraToggles) do
if entry.pending ~= nil then
anyChange = true
if entry.pending then
entry.remote.Name = entry.original
else
entry.remote.Name = DISABLED_PREFIX .. entry.original
end
entry.enabled = entry.pending
entry.pending = nil
UpdateToggleVisual(entry)
end
end
if anyChange then
local char = LocalPlayer.Character
local chosen = char and char:FindFirstChild(CHOSEN_VALUE_NAME)
if chosen and tostring(chosen.Value) ~= "" then
task.wait(0.1)
LocalPlayer:LoadCharacter()
end
end
end
local function BuildSettings()
for _, c in pairs(SettingsScroll:GetChildren()) do
if c:IsA("GuiObject") then c:Destroy() end
end
CameraToggles = {}
local folder = GetCameraFolder()
if not folder then
make("TextLabel", {
Size=UDim2.new(1,0,0,40), BackgroundTransparency=1,
Text="Could not find ReplicatedStorage/" .. table.concat(CAMERA_REMOTES_PATH, "/"),
TextColor3=C.DIM, Font=Enum.Font.Gotham, TextSize=11
}, SettingsScroll)
return
end
local remotes = {}
for _, obj in pairs(folder:GetChildren()) do
if obj:IsA("RemoteEvent") or obj:IsA("RemoteFunction") then
table.insert(remotes, obj)
end
end
table.sort(remotes, function(a, b)
local na = IsDisabled(a) and a.Name:sub(#DISABLED_PREFIX+1) or a.Name
local nb = IsDisabled(b) and b.Name:sub(#DISABLED_PREFIX+1) or b.Name
return na:lower() < nb:lower()
end)
if #remotes == 0 then
make("TextLabel", {
Size=UDim2.new(1,0,0,40), BackgroundTransparency=1,
Text="No RemoteEvents found in that folder.",
TextColor3=C.DIM, Font=Enum.Font.Gotham, TextSize=11
}, SettingsScroll)
return
end
for _, remote in ipairs(remotes) do
local originalName = IsDisabled(remote) and remote.Name:sub(#DISABLED_PREFIX+1) or remote.Name
local isEnabled = not IsDisabled(remote)
local Row = make("Frame", {
Size=UDim2.new(1,0,0,32), BackgroundColor3=C.ROW, BorderSizePixel=0
}, SettingsScroll)
corner(5, Row)
stroke(1, C.BORDLO, Row)
local nameLabel = make("TextLabel", {
Size=UDim2.new(1,-90,1,0), Position=UDim2.new(0,10,0,0),
BackgroundTransparency=1, Text=originalName,
TextColor3=isEnabled and C.WHITE or C.DIM,
TextXAlignment=Enum.TextXAlignment.Left,
Font=Enum.Font.Gotham, TextSize=12
}, Row)
local toggleBtn = make("TextButton", {
Size=UDim2.new(0,72,0,22), Position=UDim2.new(1,-78,0.5,-11),
BackgroundColor3=isEnabled and Color3.fromRGB(34,34,34) or C.OFF,
Text=isEnabled and "Enabled" or "Disabled",
TextColor3=isEnabled and C.WHITE or C.DIM,
Font=Enum.Font.GothamBold, TextSize=10,
BorderSizePixel=0, ZIndex=5
}, Row)
corner(4, toggleBtn)
stroke(1, isEnabled and Color3.fromRGB(60,60,60) or C.BORDLO, toggleBtn)
local entry = {
remote=remote, original=originalName,
enabled=isEnabled, pending=nil,
btn=toggleBtn, nameLabel=nameLabel
}
table.insert(CameraToggles, entry)
toggleBtn.MouseButton1Click:Connect(function()
if entry.pending ~= nil then
MarkPending(entry, entry.enabled)
else
MarkPending(entry, not entry.enabled)
end
end)
end
end
ApplyChangesBtn.MouseButton1Click:Connect(ApplySettings)
AllOnBtn.MouseButton1Click:Connect(function()
for _, entry in ipairs(CameraToggles) do
MarkPending(entry, true)
end
end)
AllOffBtn.MouseButton1Click:Connect(function()
for _, entry in ipairs(CameraToggles) do
MarkPending(entry, false)
end
end)
TabSettings.MouseButton1Click:Connect(function()
SetTab("Settings")
BuildSettings()
end)
local function CancelCapture()
if not CapturingKeybindFor then return end
CapturingKeybindBtn.Text = AttackKeybinds[CapturingKeybindFor] or "None"
CapturingKeybindBtn.TextColor3 = C.DIM
CapturingKeybindBtn.BackgroundColor3 = C.SEARCH
CapturingKeybindFor, CapturingKeybindBtn = nil, nil
CaptureOverlay.Visible = false
end
CaptureOverlay.MouseButton1Click:Connect(CancelCapture)
local function CanFire(remote)
local char = LocalPlayer.Character
local chosen = char and char:FindFirstChild(CHOSEN_VALUE_NAME)
return chosen and chosen.Value == remote.Parent.Parent.Name
end
local function FireRemote(remote)
if CanFire(remote) then pcall(function() remote:FireServer() end) end
end
local function SelectCharacter(name)
local folder = ReplicatedStorage:FindFirstChild("SelectACharacter")
if not folder then return end
local remote = folder:FindFirstChild("ChangeChar")
if remote and remote:IsA("RemoteEvent") then
pcall(function() remote:FireServer(name) end)
end
end
SelectBtn.MouseButton1Click:Connect(function()
if SelectedCharacter then SelectCharacter(SelectedCharacter.Name) end
end)
local function LoadAttacks(charFolder)
for _, c in pairs(AttackScroll:GetChildren()) do
if c:IsA("GuiObject") then c:Destroy() end
end
SelectedCharacter = charFolder
PanelHeaderLabel.Text = charFolder.Name
PanelHeaderLabel.TextColor3 = C.WHITE
SelectBtn.Visible = true
local Remotes = charFolder:FindFirstChild("Remotes")
if not Remotes then
make("TextLabel", {
Size=UDim2.new(1,0,0,30), BackgroundTransparency=1,
Text="No Remotes folder found.", TextColor3=C.DIM,
Font=Enum.Font.Gotham, TextSize=12
}, AttackScroll)
return
end
for _, remote in pairs(Remotes:GetChildren()) do
if not remote:IsA("RemoteEvent") then continue end
if not AttackModes[remote] then AttackModes[remote] = "Click" end
local Row = make("Frame", {
Name=remote.Name, Size=UDim2.new(1,0,0,32),
BackgroundColor3=C.ROW, BorderSizePixel=0
}, AttackScroll)
corner(5, Row)
stroke(1, C.BORDLO, Row)
make("TextLabel", {
Size=UDim2.new(1,-198,1,0), Position=UDim2.new(0,10,0,0),
BackgroundTransparency=1, Text=remote.Name,
TextColor3=C.WHITE, TextXAlignment=Enum.TextXAlignment.Left,
Font=Enum.Font.Gotham, TextSize=12
}, Row)
local cfg = MODE_CFG[AttackModes[remote]]
local ModeBtn = make("TextButton", {
Size=UDim2.new(0,50,0,22), Position=UDim2.new(1,-190,0.5,-11),
BackgroundColor3=cfg.bg, Text=AttackModes[remote],
TextColor3=cfg.tc, Font=Enum.Font.GothamBold, TextSize=10,
BorderSizePixel=0, ZIndex=5
}, Row)
corner(4, ModeBtn)
stroke(1, cfg.br, ModeBtn)
local FireBtn = make("TextButton", {
Size=UDim2.new(0,42,0,22), Position=UDim2.new(1,-134,0.5,-11),
BackgroundColor3=C.BTN, Text="Fire",
TextColor3=C.MID, Font=Enum.Font.GothamBold, TextSize=11,
BorderSizePixel=0, ZIndex=5
}, Row)
corner(4, FireBtn)
stroke(1, C.BORDER, FireBtn)
local KeybindBtn = make("TextButton", {
Size=UDim2.new(0,76,0,22), Position=UDim2.new(1,-84,0.5,-11),
BackgroundColor3=C.SEARCH, Text=AttackKeybinds[remote] or "None",
TextColor3=C.DIM, Font=Enum.Font.Gotham, TextSize=10,
BorderSizePixel=0, ZIndex=5
}, Row)
corner(4, KeybindBtn)
stroke(1, C.BORDLO, KeybindBtn)
ModeBtn.MouseButton1Click:Connect(function()
local idx = table.find(MODES, AttackModes[remote]) or 1
AttackModes[remote] = MODES[(idx % #MODES) + 1]
local ncfg = MODE_CFG[AttackModes[remote]]
ModeBtn.Text = AttackModes[remote]
ModeBtn.BackgroundColor3 = ncfg.bg
ModeBtn.TextColor3 = ncfg.tc
local s = ModeBtn:FindFirstChildWhichIsA("UIStroke")
if s then s.Color = ncfg.br end
end)
FireBtn.MouseButton1Click:Connect(function() FireRemote(remote) end)
FireBtn.MouseEnter:Connect(function() FireBtn.TextColor3 = C.WHITE end)
FireBtn.MouseLeave:Connect(function() FireBtn.TextColor3 = C.MID end)
KeybindBtn.MouseButton1Click:Connect(function()
if CapturingKeybindFor ~= nil then CancelCapture() return end
CapturingKeybindFor = remote
CapturingKeybindBtn = KeybindBtn
KeybindBtn.Text = "press key..."
KeybindBtn.TextColor3 = C.WHITE
KeybindBtn.BackgroundColor3 = Color3.fromRGB(25,25,18)
CaptureOverlay.Visible = true
end)
KeybindBtn.MouseButton2Click:Connect(function()
AttackKeybinds[remote] = nil
KeybindBtn.Text = "None"
KeybindBtn.TextColor3 = C.DIM
KeybindBtn.BackgroundColor3 = C.SEARCH
if CapturingKeybindFor == remote then CancelCapture() end
end)
end
end
local function ApplySearch(query)
query = query:lower()
for _, entry in ipairs(SidebarEntries) do
entry.btn.Visible = query == "" or entry.folder.Name:lower():find(query,1,true) ~= nil
end
end
local function BuildSidebar()
for _, c in pairs(SidebarScroll:GetChildren()) do
if c:IsA("GuiObject") then c:Destroy() end
end
SidebarEntries = {}
local folders = {}
for _, f in pairs(CHARS_PATH:GetChildren()) do
if f:FindFirstChild("Remotes") then table.insert(folders, f) end
end
table.sort(folders, function(a,b) return a.Name:lower() < b.Name:lower() end)
for _, charFolder in ipairs(folders) do
local CharBtn = make("TextButton", {
Size=UDim2.new(1,0,0,28), BackgroundColor3=C.PANEL,
Text=charFolder.Name, TextColor3=C.DIM,
Font=Enum.Font.Gotham, TextSize=11,
BorderSizePixel=0, ZIndex=5
}, SidebarScroll)
corner(5, CharBtn)
stroke(1, C.BORDLO, CharBtn)
table.insert(SidebarEntries, {folder=charFolder, btn=CharBtn})
CharBtn.MouseButton1Click:Connect(function()
for _, entry in ipairs(SidebarEntries) do
entry.btn.BackgroundColor3 = C.PANEL
entry.btn.TextColor3 = C.DIM
end
CharBtn.BackgroundColor3 = C.SEL_BG
CharBtn.TextColor3 = C.SEL_TXT
LoadAttacks(charFolder)
end)
end
ApplySearch(SearchBox.Text)
end
SearchBox:GetPropertyChangedSignal("Text"):Connect(function()
ApplySearch(SearchBox.Text)
end)
RunService.Heartbeat:Connect(function()
local char = LocalPlayer.Character
local chosen = char and char:FindFirstChild(CHOSEN_VALUE_NAME)
StatusLabel.Text = chosen and ("> " .. tostring(chosen.Value)) or "> None"
StatusLabel.TextColor3 = chosen and C.WHITE or C.DIM
local now = tick()
for remote, key in pairs(AttackKeybinds) do
if not HeldKeys[key] then continue end
local mode = AttackModes[remote] or "Click"
local interval = mode == "Rapid" and RAPID_INTERVAL or mode == "Hold" and HOLD_INTERVAL or nil
if interval then
local last = FireTimers[remote] or 0
if now - last >= interval then
FireTimers[remote] = now
FireRemote(remote)
end
end
end
end)
CloseBtn.MouseButton1Click:Connect(function()
CancelCapture()
MainFrame.Visible = false
end)
MinimizeBtn.MouseButton1Click:Connect(function()
Minimized = not Minimized
Body.Visible = not Minimized
TabBar.Visible = not Minimized
MainFrame.Size = Minimized and UDim2.new(0,500,0,32) or UDim2.new(0,500,0,420)
end)
UserInputService.InputBegan:Connect(function(input, processed)
if input.KeyCode == UI_TOGGLE_KEY then
MainFrame.Visible = not MainFrame.Visible
return
end
if input.KeyCode == MOUSE_UNLOCK_KEY and not processed then
SetMouseUnlock(not MouseUnlocked)
return
end
if CapturingKeybindFor ~= nil then
if input.KeyCode == Enum.KeyCode.Escape then
CancelCapture()
elseif input.UserInputType == Enum.UserInputType.Keyboard then
local keyName = input.KeyCode.Name
AttackKeybinds[CapturingKeybindFor] = keyName
CapturingKeybindBtn.Text = keyName
CapturingKeybindBtn.TextColor3 = C.MID
CapturingKeybindBtn.BackgroundColor3 = C.SEARCH
CapturingKeybindFor, CapturingKeybindBtn = nil, nil
CaptureOverlay.Visible = false
end
return
end
if not processed then
local keyName = input.KeyCode.Name
HeldKeys[keyName] = true
for remote, key in pairs(AttackKeybinds) do
if key == keyName and (AttackModes[remote] or "Click") == "Click" then
FireRemote(remote)
end
end
end
end)
UserInputService.InputEnded:Connect(function(input)
HeldKeys[input.KeyCode.Name] = nil
end)
local isDragging, dragStart, startPos = false, nil, nil
TitleBar.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
isDragging = true
dragStart = input.Position
startPos = MainFrame.Position
end
end)
TitleBar.InputChanged:Connect(function(input)
if isDragging and input.UserInputType == Enum.UserInputType.MouseMovement then
local d = input.Position - dragStart
MainFrame.Position = UDim2.new(
startPos.X.Scale, startPos.X.Offset + d.X,
startPos.Y.Scale, startPos.Y.Offset + d.Y
)
end
end)
TitleBar.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
isDragging = false
end
end)
BuildSidebar()