-- [[ Slap Battles Macro]] -- local Players = game:GetService("Players") local RunService = game:GetService("RunService") local TeleportService = game:GetService("TeleportService") local HttpService = game:GetService("HttpService") local VirtualInputManager = game:GetService("VirtualInputManager") local PathfindingService = game:GetService("PathfindingService") local GuiService = game:GetService("GuiService") local Player = Players.LocalPlayer local PlayerGui = Player:WaitForChild("PlayerGui") local FileName = "MacroGloveConfig.json" -- [[ DEFAULT SETTINGS ]] -- local Settings = { Enabled = false, BotType = "Closest", IgnoreRagdoll = false, SlapRadius = 10, Shiftlock = false, ShiftlockRadius = 20, Jumps = false, JumpChance = 10, IgnoreOneshots = false, DistanceRadius = 5, StrafeEnabled = false, StrafeRadius = 15, UnequipFar = false, UnequipRadius = 30, DangerMode = false, DangerType = "Backoff", DangerHP = 40, AutoAbility = false, AbilityMode = "Combat", ServerHopMode = "Main", MinPlayers = 0, IgnoreLowPlayers = false, AutoHopTimerEnabled = false, AutoHopMinutes = 30, HopOnOneshotsEnabled = false, MaxOneshotsAllowed = 1, LastHopTick = tick(), AutoTournament = false } -- [[ DATA TRACKING ]] -- local LastSlapCount = 0 local LastReachedTime = tick() local LastClickTick = 0 local function GetSlaps() local stats = Player:FindFirstChild("leaderstats") local slaps = stats and stats:FindFirstChild("Slaps") return slaps and slaps.Value or 0 end LastSlapCount = GetSlaps() -- [[ SAVE / LOAD LOGIC ]] -- local function SaveSettings() local success, encoded = pcall(function() return HttpService:JSONEncode(Settings) end) if success then writefile(FileName, encoded) end end local function LoadSettings() if isfile(FileName) then local success, decoded = pcall(function() return HttpService:JSONDecode(readfile(FileName)) end) if success then for k, v in pairs(decoded) do Settings[k] = v end end end end LoadSettings() local GameIDs = { Main = 6403373529, NoOneshots = 9015014224, KS = 11520107397 } local OneShotGloves = {"OVERKILL", "God's Hand", "The Flex", "Error", "rob", "Shopkeeper", "Spectator", "buddies"} -- [[ CORE FUNCTIONS ]] -- local function ServerHop() SaveSettings() local targetID = GameIDs[Settings.ServerHopMode] or GameIDs.Main TeleportService:Teleport(targetID, Player) end local function TriggerAbility() local char = Player.Character if not char or not char:FindFirstChildOfClass("Tool") then return end VirtualInputManager:SendKeyEvent(true, Enum.KeyCode.E, false, game) task.wait(0.05) VirtualInputManager:SendKeyEvent(false, Enum.KeyCode.E, false, game) end local function MoveToTargetSmooth(targetPos) local char = Player.Character if not char then return end local hum = char:FindFirstChildOfClass("Humanoid") local root = char:FindFirstChild("HumanoidRootPart") if not root or not hum then return end local path = PathfindingService:CreatePath({AgentRadius = 3, AgentCanJump = true}) path:ComputeAsync(root.Position, targetPos) if path.Status == Enum.PathStatus.Success then local waypoints = path:GetWaypoints() if waypoints[2] then hum:MoveTo(waypoints[2].Position) if waypoints[2].Action == Enum.PathWaypointAction.Jump then hum.Jump = true end end else hum:MoveTo(targetPos) end end local function GetTarget() local pot = {} local char = Player.Character local myRoot = char and char:FindFirstChild("HumanoidRootPart") if not myRoot then return nil end for _, p in pairs(Players:GetPlayers()) do if p ~= Player and p.Character and p.Character:FindFirstChild("HumanoidRootPart") then local c = p.Character local h = c:FindFirstChildOfClass("Humanoid") local tRoot = c.HumanoidRootPart local rayParams = RaycastParams.new() rayParams.FilterType = Enum.RaycastFilterType.Exclude rayParams.FilterDescendantsInstances = {c, Player.Character} local floorCheck = workspace:Raycast(tRoot.Position, Vector3.new(0, -15, 0), rayParams) local isOneshots = false for _, g in pairs(OneShotGloves) do if c:FindFirstChild(g) or p.Backpack:FindFirstChild(g) then isOneshots = true break end end if h and h.Health > 0 and not c:FindFirstChild("rock") and (not Settings.IgnoreOneshots or not isOneshots) then if math.abs(myRoot.Position.Y - tRoot.Position.Y) < 12 and floorCheck then if not (Settings.IgnoreRagdoll and c:FindFirstChild("Ragdolled") and c.Ragdolled.Value) then table.insert(pot, p) end end end end end if #pot == 0 then return nil end if Settings.BotType == "Closest" then table.sort(pot, function(a,b) return Player:DistanceFromCharacter(a.Character.PrimaryPart.Position) < Player:DistanceFromCharacter(b.Character.PrimaryPart.Position) end) elseif Settings.BotType == "Furthest" then table.sort(pot, function(a,b) return Player:DistanceFromCharacter(a.Character.PrimaryPart.Position) > Player:DistanceFromCharacter(b.Character.PrimaryPart.Position) end) end return Settings.BotType == "Random" and pot[math.random(1,#pot)] or pot[1] end -- [[ TOURNAMENT CLICKER ]] -- local function HandleTournamentGUI() if tick() - LastClickTick < 1 then return end for _, gui in pairs(PlayerGui:GetChildren()) do if gui.Name == "Component" then local container = gui:FindFirstChild("SlapTournament") if container and container.Visible then local targetButton = Settings.AutoTournament and container:FindFirstChild("AcceptButton") or container:FindFirstChild("DeclineButton") if targetButton and targetButton.Visible then -- Get center of button local absPos = targetButton.AbsolutePosition local absSize = targetButton.AbsoluteSize -- Offset for the Roblox TopBar (approx 36-58 pixels) local inset = GuiService:GetGuiInset() local centerX = absPos.X + (absSize.X / 2) + inset.X local centerY = absPos.Y + (absSize.Y / 2) + inset.Y VirtualInputManager:SendMouseButtonEvent(centerX, centerY, 0, true, game, 0) task.wait(0.05) VirtualInputManager:SendMouseButtonEvent(centerX, centerY, 0, false, game, 0) LastClickTick = tick() warn("Tournament Button Clicked at: " .. tostring(centerX) .. ", " .. tostring(centerY)) end end end end end -- [[ UI ENGINE ]] -- local ScreenGui = Instance.new("ScreenGui", game:GetService("CoreGui")) local MainFrame = Instance.new("Frame", ScreenGui) MainFrame.Size = UDim2.new(0, 480, 0, 320); MainFrame.Position = UDim2.new(0.5, -240, 0.5, -160); MainFrame.BackgroundColor3 = Color3.fromRGB(20, 20, 20) Instance.new("UICorner", MainFrame) local Sidebar = Instance.new("Frame", MainFrame) Sidebar.Size = UDim2.new(0, 110, 1, 0); Sidebar.BackgroundColor3 = Color3.fromRGB(30, 30, 30) Instance.new("UICorner", Sidebar) local SideList = Instance.new("UIListLayout", Sidebar); SideList.Padding = UDim.new(0, 2) local Container = Instance.new("Frame", MainFrame) Container.Size = UDim2.new(1, -130, 1, -50); Container.Position = UDim2.new(0, 120, 0, 40); Container.BackgroundTransparency = 1 local TabFrames = {} local function CreateTab(name) local btn = Instance.new("TextButton", Sidebar) btn.Size = UDim2.new(1, 0, 0, 35); btn.Text = name; btn.BackgroundColor3 = Color3.fromRGB(40, 40, 40); btn.TextColor3 = Color3.new(1, 1, 1); btn.BorderSizePixel = 0 local page = Instance.new("ScrollingFrame", Container) page.Size = UDim2.new(1, 0, 1, 0); page.Visible = false; page.BackgroundTransparency = 1; page.CanvasSize = UDim2.new(0, 0, 0, 0); page.ScrollBarThickness = 2 local list = Instance.new("UIListLayout", page); list.Padding = UDim.new(0, 10) list:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function() page.CanvasSize = UDim2.new(0, 0, 0, list.AbsoluteContentSize.Y + 20) end) btn.MouseButton1Click:Connect(function() for _, v in pairs(TabFrames) do v.Visible = false end page.Visible = true end) TabFrames[name] = page return page end local function AddSlider(parent, text, min, max, default, callback) local actualDefault = Settings[text] or default local f = Instance.new("Frame", parent); f.Size = UDim2.new(1, -10, 0, 45); f.BackgroundTransparency = 1 local l = Instance.new("TextLabel", f); l.Text = text..": "..actualDefault; l.Size = UDim2.new(1, 0, 0, 20); l.TextColor3 = Color3.new(1,1,1); l.BackgroundTransparency = 1; l.TextXAlignment = 0 local val = actualDefault local function update(nV) val = math.clamp(nV, min, max); l.Text = text..": "..val; callback(val); SaveSettings() end local mi = Instance.new("TextButton", f); mi.Size = UDim2.new(0,35,0,25); mi.Position = UDim2.new(0,0,0,20); mi.Text = "-"; mi.BackgroundColor3 = Color3.fromRGB(60,60,60); mi.TextColor3 = Color3.new(1,1,1) local pl = Instance.new("TextButton", f); pl.Size = UDim2.new(0,35,0,25); pl.Position = UDim2.new(1,-35,0,20); pl.Text = "+"; pl.BackgroundColor3 = Color3.fromRGB(60,60,60); pl.TextColor3 = Color3.new(1,1,1) mi.MouseButton1Click:Connect(function() update(val - 1) end); pl.MouseButton1Click:Connect(function() update(val + 1) end) end local function AddToggle(parent, text, settingKey, callback) local default = Settings[settingKey] local f = Instance.new("Frame", parent); f.Size = UDim2.new(1, -10, 0, 30); f.BackgroundTransparency = 1 local l = Instance.new("TextLabel", f); l.Text = text; l.Size = UDim2.new(0.7, 0, 1, 0); l.TextColor3 = Color3.new(1,1,1); l.BackgroundTransparency = 1; l.TextXAlignment = 0 local b = Instance.new("TextButton", f); b.Size = UDim2.new(0, 45, 0, 22); b.Position = UDim2.new(1, -50, 0.5, -11); b.Text = "" local function setVisual(val) b.BackgroundColor3 = val and Color3.fromRGB(0, 200, 100) or Color3.fromRGB(200, 50, 50) end setVisual(default) Instance.new("UICorner", b) b.MouseButton1Click:Connect(function() Settings[settingKey] = not Settings[settingKey] setVisual(Settings[settingKey]) callback(Settings[settingKey]) SaveSettings() end) end -- [[ TABS ]] -- local MainTab = CreateTab("Main") local BotTab = CreateTab("Bot") local ServerTab = CreateTab("Server") -- [[ MAIN TAB ]] -- local StartBtn = Instance.new("TextButton", MainTab); StartBtn.Size = UDim2.new(1,-10,0,50); StartBtn.Text = Settings.Enabled and "STOP MACRO" or "START MACRO"; StartBtn.BackgroundColor3 = Settings.Enabled and Color3.fromRGB(180,0,50) or Color3.fromRGB(0,180,50); StartBtn.TextColor3 = Color3.new(1,1,1) StartBtn.MouseButton1Click:Connect(function() Settings.Enabled = not Settings.Enabled StartBtn.Text = Settings.Enabled and "STOP MACRO" or "START MACRO" StartBtn.BackgroundColor3 = Settings.Enabled and Color3.fromRGB(180,0,50) or Color3.fromRGB(0,180,50) LastReachedTime = tick() SaveSettings() end) -- [[ BOT TAB ]] -- local BotTypeBtn = Instance.new("TextButton", BotTab); BotTypeBtn.Size = UDim2.new(1,-10,0,30); BotTypeBtn.Text = "Bot Type: "..Settings.BotType; BotTypeBtn.BackgroundColor3 = Color3.fromRGB(50,50,50); BotTypeBtn.TextColor3 = Color3.new(1,1,1) BotTypeBtn.MouseButton1Click:Connect(function() local modes = {"Closest", "Random", "Furthest"} Settings.BotType = modes[table.find(modes, Settings.BotType) % 3 + 1] BotTypeBtn.Text = "Bot Type: "..Settings.BotType SaveSettings() end) AddToggle(BotTab, "Auto Go In Tournaments", "AutoTournament", function(v) end) AddToggle(BotTab, "Ignore Ragdoll", "IgnoreRagdoll", function(v) end) AddSlider(BotTab, "Slap Radius", 5, 20, 10, function(v) Settings.SlapRadius = v end) AddToggle(BotTab, "Shiftlock Mode", "Shiftlock", function(v) end) AddSlider(BotTab, "Shiftlock Radius", 5, 50, 20, function(v) Settings.ShiftlockRadius = v end) AddToggle(BotTab, "Strafe Around Player", "StrafeEnabled", function(v) end) AddSlider(BotTab, "Strafe Radius", 5, 30, 15, function(v) Settings.StrafeRadius = v end) AddToggle(BotTab, "Jumps", "Jumps", function(v) end) AddSlider(BotTab, "Jump Chance (%)", 1, 100, 10, function(v) Settings.JumpChance = v end) AddToggle(BotTab, "Ignore Oneshots", "IgnoreOneshots", function(v) end) AddSlider(BotTab, "Distance Radius", 0, 30, 5, function(v) Settings.DistanceRadius = v end) AddToggle(BotTab, "Unequip Glove Far", "UnequipFar", function(v) end) AddSlider(BotTab, "Unequip Radius", 5, 50, 30, function(v) Settings.UnequipRadius = v end) AddToggle(BotTab, "Danger Mode", "DangerMode", function(v) end) local DangerTypeBtn = Instance.new("TextButton", BotTab); DangerTypeBtn.Size = UDim2.new(1,-10,0,30); DangerTypeBtn.Text = "Danger Type: "..Settings.DangerType; DangerTypeBtn.BackgroundColor3 = Color3.fromRGB(50,50,50); DangerTypeBtn.TextColor3 = Color3.new(1,1,1) DangerTypeBtn.MouseButton1Click:Connect(function() local types = {"Backoff", "Give up", "Ahh"} Settings.DangerType = types[table.find(types, Settings.DangerType) % 3 + 1] DangerTypeBtn.Text = "Danger Type: "..Settings.DangerType SaveSettings() end) AddSlider(BotTab, "Danger HP", 10, 90, 40, function(v) Settings.DangerHP = v end) AddToggle(BotTab, "Auto Ability (E)", "AutoAbility", function(v) end) local AbilityModeBtn = Instance.new("TextButton", BotTab); AbilityModeBtn.Size = UDim2.new(1,-10,0,30); AbilityModeBtn.Text = "Ability Mode: "..Settings.AbilityMode; AbilityModeBtn.BackgroundColor3 = Color3.fromRGB(50,50,80); AbilityModeBtn.TextColor3 = Color3.new(1,1,1) AbilityModeBtn.MouseButton1Click:Connect(function() local modes = {"Combat", "Defensive", "Instant", "Combo", "Camping"} local currentIdx = table.find(modes, Settings.AbilityMode) or 1 Settings.AbilityMode = modes[currentIdx % #modes + 1] AbilityModeBtn.Text = "Ability Mode: "..Settings.AbilityMode SaveSettings() end) -- [[ SERVER TAB ]] -- local HopNow = Instance.new("TextButton", ServerTab); HopNow.Size = UDim2.new(1,-10,0,40); HopNow.Text = "SERVER HOP NOW"; HopNow.BackgroundColor3 = Color3.fromRGB(0, 120, 200); HopNow.TextColor3 = Color3.new(1,1,1) HopNow.MouseButton1Click:Connect(ServerHop) local HopModeBtn = Instance.new("TextButton", ServerTab); HopModeBtn.Size = UDim2.new(1,-10,0,30); HopModeBtn.Text = "Mode: "..Settings.ServerHopMode; HopModeBtn.BackgroundColor3 = Color3.fromRGB(50,50,50); HopModeBtn.TextColor3 = Color3.new(1,1,1) HopModeBtn.MouseButton1Click:Connect(function() local m = {"Main", "NoOneshots", "KS"} Settings.ServerHopMode = m[table.find(m, Settings.ServerHopMode) % 3 + 1] HopModeBtn.Text = "Mode: "..Settings.ServerHopMode SaveSettings() end) AddSlider(ServerTab, "Hop if Players <", 0, 14, 0, function(v) Settings.MinPlayers = v end) AddToggle(ServerTab, "Ignore Low Players", "IgnoreLowPlayers", function(v) end) AddToggle(ServerTab, "Hop on Timer", "AutoHopTimerEnabled", function(v) end) AddSlider(ServerTab, "Timer (Minutes)", 10, 300, 30, function(v) Settings.AutoHopMinutes = v end) AddToggle(ServerTab, "Hop on Oneshots", "HopOnOneshotsEnabled", function(v) end) AddSlider(ServerTab, "Oneshot Limit", 1, 5, 1, function(v) Settings.MaxOneshotsAllowed = v end) -- [[ MINIMIZE SYSTEM ]] -- local Plus = Instance.new("TextButton", ScreenGui); Plus.Size = UDim2.new(0,45,0,45); Plus.Position = UDim2.new(0.05,0,0.05,0); Plus.Text = "+"; Plus.Visible = false; Plus.BackgroundColor3 = Color3.fromRGB(0,180,50); Instance.new("UICorner", Plus).CornerRadius = UDim.new(1,0) local Minus = Instance.new("TextButton", MainFrame); Minus.Size = UDim2.new(0,30,0,30); Minus.Position = UDim2.new(1,-35,0,5); Minus.Text = "-"; Minus.BackgroundTransparency = 1; Minus.TextColor3 = Color3.new(1,1,1); Minus.TextSize = 25 Minus.MouseButton1Click:Connect(function() MainFrame.Visible = false; Plus.Visible = true end) Plus.MouseButton1Click:Connect(function() MainFrame.Visible = true; Plus.Visible = false end) -- [[ MOVEMENT & COMBAT LOOP ]] -- RunService.Heartbeat:Connect(function() HandleTournamentGUI() if not Settings.Enabled then LastReachedTime = tick() return end local char = Player.Character; local hum = char and char:FindFirstChildOfClass("Humanoid"); local root = char and char:FindFirstChild("HumanoidRootPart") if not root or not hum then return end local toolInChar = char:FindFirstChildOfClass("Tool") local toolInBackpack = Player.Backpack:FindFirstChildOfClass("Tool") -- TOURNAMENT SAFETY CHECK local tourneyOpen = false for _, gui in pairs(PlayerGui:GetChildren()) do if gui.Name == "Component" and gui:FindFirstChild("SlapTournament") and gui.SlapTournament.Visible then tourneyOpen = true break end end if not toolInChar and not toolInBackpack then if tourneyOpen and Settings.AutoTournament then hum:Move(Vector3.new(0,0,0)) return end local teleport = workspace:FindFirstChild("Lobby") and workspace.Lobby:FindFirstChild("Teleport1") if teleport then MoveToTargetSmooth(teleport.Position) end LastReachedTime = tick() return end if Settings.Jumps and math.random(1, 100) <= Settings.JumpChance then hum.Jump = true end local target = GetTarget() if target and target.Character and target.Character:FindFirstChild("HumanoidRootPart") then local tRoot = target.Character.HumanoidRootPart local dist = (root.Position - tRoot.Position).Magnitude if dist <= (Settings.SlapRadius + 5) then LastReachedTime = tick() end if tick() - LastReachedTime > 45 then LastReachedTime = tick() hum.Health = 0 return end if Settings.Shiftlock and dist <= Settings.ShiftlockRadius then root.CFrame = CFrame.lookAt(root.Position, Vector3.new(tRoot.Position.X, root.Position.Y, tRoot.Position.Z)) end if Settings.UnequipFar then if dist > Settings.UnequipRadius then hum:UnequipTools() elseif dist <= Settings.UnequipRadius and toolInBackpack then hum:EquipTool(toolInBackpack) end elseif toolInBackpack then hum:EquipTool(toolInBackpack) end if Settings.StrafeEnabled and dist <= Settings.StrafeRadius then local speed = 4 local time = tick() * speed local offset = Vector3.new(math.cos(time) * Settings.DistanceRadius, 0, math.sin(time) * Settings.DistanceRadius) MoveToTargetSmooth(tRoot.Position + offset) elseif dist > Settings.DistanceRadius then MoveToTargetSmooth(tRoot.Position) end if dist <= Settings.SlapRadius and toolInChar then toolInChar:Activate() end else LastReachedTime = tick() end end) -- [[ ABILITY ENGINE LOOP ]] -- task.spawn(function() while true do task.wait(0.1) if not Settings.Enabled or not Settings.AutoAbility then continue end local char = Player.Character local tool = char and char:FindFirstChildOfClass("Tool") if not tool then continue end local target = GetTarget() local dist = 999 if target and target.Character and target.Character:FindFirstChild("HumanoidRootPart") then dist = (char.HumanoidRootPart.Position - target.Character.HumanoidRootPart.Position).Magnitude end if Settings.AbilityMode == "Combat" then if dist <= 15 then TriggerAbility(); task.wait(1) end elseif Settings.AbilityMode == "Defensive" then local hum = char:FindFirstChildOfClass("Humanoid") if (dist > 15 and dist < 30) or (hum and hum.Health < Settings.DangerHP) then TriggerAbility(); task.wait(1) end elseif Settings.AbilityMode == "Instant" then TriggerAbility() task.wait(0.5) elseif Settings.AbilityMode == "Combo" then local currentSlaps = GetSlaps() if currentSlaps > LastSlapCount then task.wait(0.5) TriggerAbility() LastSlapCount = currentSlaps end elseif Settings.AbilityMode == "Camping" then if dist > 50 then TriggerAbility(); task.wait(1) end end LastSlapCount = GetSlaps() end end) MainTab.Visible = true