local ReplicatedStorage = game:GetService("ReplicatedStorage") local Players = game:GetService("Players") local CollectionService = game:GetService("CollectionService") local TweenService = game:GetService("TweenService") local LocalPlayer = Players.LocalPlayer local Remotes = ReplicatedStorage:WaitForChild("Remotes") local WorldConfig = require(ReplicatedStorage.Modules.WorldConfig) local SG = Instance.new("ScreenGui") SG.Name = "PickaxeTestGUI" SG.ResetOnSpawn = false SG.Parent = LocalPlayer:WaitForChild("PlayerGui") local Main = Instance.new("Frame") Main.Size = UDim2.fromOffset(460, 640) Main.Position = UDim2.new(0, 20, 0, 120) Main.BackgroundColor3 = Color3.fromRGB(24, 24, 34) Main.BackgroundTransparency = 0.08 Main.BorderSizePixel = 0 Main.Parent = SG do local c = Instance.new("UICorner"); c.CornerRadius = UDim.new(0, 10); c.Parent = Main local s = Instance.new("UIStroke"); s.Color = Color3.fromRGB(255, 170, 60); s.Thickness = 1.5; s.Parent = Main end do local drag = Instance.new("TextLabel") drag.Size = UDim2.new(1, 0, 0, 28) drag.BackgroundColor3 = Color3.fromRGB(40, 40, 55) drag.Text = "Pickaxe Swing Test Lab" drag.Font = Enum.Font.GothamBold drag.TextSize = 14 drag.TextColor3 = Color3.new(1, 1, 1) drag.Parent = Main local c = Instance.new("UICorner"); c.CornerRadius = UDim.new(0, 10); c.Parent = drag local dragging, off = false drag.InputBegan:Connect(function(i) if i.UserInputType == Enum.UserInputType.MouseButton1 then dragging = true local p = i.Position off = Vector2.new(p.X, p.Y) - Main.AbsolutePosition end end) drag.InputChanged:Connect(function(i) if dragging and off and i.UserInputType == Enum.UserInputType.MouseMovement then local p = i.Position Main.Position = UDim2.fromOffset(p.X - off.X, p.Y - off.Y) end end) drag.InputEnded:Connect(function(i) if i.UserInputType == Enum.UserInputType.MouseButton1 then dragging = false end end) local close = Instance.new("TextButton") close.Size = UDim2.fromOffset(28, 28) close.Position = UDim2.new(1, -28, 0, 0) close.Text = "X" close.Font = Enum.Font.GothamBold close.TextSize = 14 close.BackgroundColor3 = Color3.fromRGB(180, 60, 60) close.Parent = drag close.MouseButton1Click:Connect(function() SG:Destroy() end) end local Log = Instance.new("ScrollingFrame") Log.Size = UDim2.new(1, -16, 0, 150) Log.Position = UDim2.new(0, 8, 0, 34) Log.BackgroundColor3 = Color3.fromRGB(16, 16, 22) Log.ScrollBarThickness = 4 Log.AutomaticCanvasSize = Enum.AutomaticSize.Y Log.CanvasSize = UDim2.new(0, 0, 0, 0) Log.Parent = Main do local c = Instance.new("UICorner"); c.CornerRadius = UDim.new(0, 8); c.Parent = Log local Layout = Instance.new("UIListLayout"); Layout.Padding = UDim.new(0, 2); Layout.Parent = Log Layout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function() Log.CanvasSize = UDim2.new(0, 0, 0, Layout.AbsoluteContentSize.Y) end) end local function LogLine(txt, col) col = col or Color3.new(1, 1, 1) local l = Instance.new("TextLabel") l.Size = UDim2.new(1, -8, 0, 16) l.BackgroundTransparency = 1 l.Text = txt l.TextXAlignment = Enum.TextXAlignment.Left l.Font = Enum.Font.Code l.TextSize = 12 l.TextColor3 = col l.TextWrapped = true l.AutomaticSize = Enum.AutomaticSize.Y l.Parent = Log task.delay(0.02, function() Log.CanvasPosition = Vector2.new(0, 9e9) end) end local Grid = Instance.new("ScrollingFrame") Grid.Size = UDim2.new(1, -16, 1, -200) Grid.Position = UDim2.new(0, 8, 0, 190) Grid.BackgroundTransparency = 1 Grid.ScrollBarThickness = 4 Grid.AutomaticCanvasSize = Enum.AutomaticSize.Y Grid.CanvasSize = UDim2.new(0, 0, 0, 0) Grid.Parent = Main local GLayout = Instance.new("UIListLayout") GLayout.Padding = UDim.new(0, 4) GLayout.Parent = Grid GLayout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function() Grid.CanvasSize = UDim2.new(0, 0, 0, GLayout.AbsoluteContentSize.Y) end) local GREEN = Color3.fromRGB(130, 235, 150) local RED = Color3.fromRGB(255, 130, 130) local YELLOW = Color3.fromRGB(255, 220, 120) local function Section(text) local s = Instance.new("TextLabel") s.Size = UDim2.new(1, 0, 0, 20) s.BackgroundColor3 = Color3.fromRGB(255, 170, 60) s.BackgroundTransparency = 0.8 s.Text = text s.Font = Enum.Font.GothamBold s.TextSize = 13 s.TextColor3 = Color3.fromRGB(255, 200, 120) s.TextXAlignment = Enum.TextXAlignment.Left s.Parent = Grid local c = Instance.new("UICorner"); c.CornerRadius = UDim.new(0, 4); c.Parent = s end local function MakeButton(text, color) local b = Instance.new("TextButton") b.Size = UDim2.new(1, 0, 0, 30) b.BackgroundColor3 = color or Color3.fromRGB(52, 58, 76) b.Text = text b.Font = Enum.Font.Gotham b.TextSize = 13 b.TextColor3 = Color3.new(1, 1, 1) b.Parent = Grid local c = Instance.new("UICorner"); c.CornerRadius = UDim.new(0, 6); c.Parent = b return b end local function Button(text, fn, color) local b = MakeButton(text, color) b.MouseButton1Click:Connect(function() LogLine(">> " .. text, YELLOW) local ok, err = pcall(fn) if not ok then LogLine("ERROR: " .. tostring(err), RED) end end) return b end local function ToggleButton(text, fn) local b = MakeButton(text) local state = false b.MouseButton1Click:Connect(function() state = not state b.BackgroundColor3 = state and Color3.fromRGB(60, 160, 80) or Color3.fromRGB(52, 58, 76) b.Text = text .. " [" .. (state and "ON" or "OFF") .. "]" LogLine((">> %s -> %s"):format(text, state and "ON" or "OFF"), YELLOW) local ok, err = pcall(fn, state) if not ok then LogLine("ERROR: " .. tostring(err), RED) end end) return b end local function RowBox(label, default) local row = Instance.new("Frame") row.Size = UDim2.new(1, 0, 0, 30) row.BackgroundTransparency = 1 row.Parent = Grid local lab = Instance.new("TextLabel") lab.Size = UDim2.new(0, 150, 0, 30) lab.BackgroundTransparency = 1 lab.Text = label lab.Font = Enum.Font.Gotham lab.TextSize = 13 lab.TextColor3 = Color3.new(1, 1, 1) lab.TextXAlignment = Enum.TextXAlignment.Left lab.Parent = row local box = Instance.new("TextBox") box.Size = UDim2.new(1, -180, 0, 30) box.Position = UDim2.new(0, 150, 0, 0) box.BackgroundColor3 = Color3.fromRGB(16, 16, 22) box.Text = tostring(default) box.Font = Enum.Font.Code box.TextSize = 13 box.TextColor3 = Color3.new(1, 1, 1) box.Parent = row local c = Instance.new("UICorner"); c.CornerRadius = UDim.new(0, 6); c.Parent = box return row, box end local hacks = { Power = 1, AuraSwingBoost = 0, MultiplierPass = 1, TotalPickaxes = 1 } local locked = false Section("HACKS - attributes (client-authoritative)") do for _, name in ipairs({ "Power", "AuraSwingBoost", "MultiplierPass", "TotalPickaxes" }) do local row, box = RowBox(name, name == "Power" and "99999" or name == "AuraSwingBoost" and "50" or name == "MultiplierPass" and "100" or "20") local set = Instance.new("TextButton") set.Size = UDim2.new(0, 30, 0, 30) set.Position = UDim2.new(1, -30, 0, 0) set.BackgroundColor3 = Color3.fromRGB(60, 120, 200) set.Text = ">" set.Font = Enum.Font.GothamBold set.TextSize = 14 set.TextColor3 = Color3.new(1, 1, 1) set.Parent = row local c = Instance.new("UICorner"); c.CornerRadius = UDim.new(0, 6); c.Parent = set local apply = function() local v = tonumber(box.Text) if not v then LogLine("bad number: " .. box.Text, RED) return end hacks[name] = v LocalPlayer:SetAttribute(name, v) LogLine(("%s = %s"):format(name, tostring(v)), GREEN) end set.MouseButton1Click:Connect(apply) box.FocusLost:Connect(function(enter) if enter then apply() end end) end ToggleButton("Lock hacks (re-apply)", function(state) locked = state if state then for k, v in pairs(hacks) do LocalPlayer:SetAttribute(k, v) end end end) Button("Reset all attributes", function() LocalPlayer:SetAttribute("Power", 1) LocalPlayer:SetAttribute("AuraSwingBoost", 0) LocalPlayer:SetAttribute("MultiplierPass", 1) LocalPlayer:SetAttribute("TotalPickaxes", 1) hacks = { Power = 1, AuraSwingBoost = 0, MultiplierPass = 1, TotalPickaxes = 1 } LogLine("attributes reset to defaults", GREEN) end) Button("Log current attributes", function() for _, name in ipairs({ "Power", "AuraSwingBoost", "MultiplierPass", "TotalPickaxes", "Rebirths", "Wins" }) do local v = LocalPlayer:GetAttribute(name) LogLine(name .. " = " .. tostring(v)) end local ls = LocalPlayer:FindFirstChild("leaderstats") if ls then for _, v in ls:GetChildren() do LogLine("leaderstats." .. v.Name .. " = " .. tostring(v.Value)) end end end) end local function getCharacter() local char = LocalPlayer.Character if not char then char = LocalPlayer.CharacterAdded:Wait() end return char, char:WaitForChild("HumanoidRootPart", 5) end local function nearestByTag(tag) local best, bestDist for _, v in CollectionService:GetTagged(tag) do if v:IsA("BasePart") and v.Parent then local char = LocalPlayer.Character local hrp = char and char:FindFirstChild("HumanoidRootPart") local d = hrp and (v.Position - hrp.Position).Magnitude or 0 if not best or d < bestDist then best, bestDist = v, d end end end return best, bestDist end Section("REMOTES - server validation probes") do Button("DamageBlock (nearest block)", function() local b, d = nearestByTag("Damagable") if not b then LogLine("no Damagable block found", RED) return end LogLine(("invoking DamageBlock on %s (%.1f studs)"):format(b:GetFullName(), d)) local ok, res = pcall(Remotes.DamageBlock.InvokeServer, Remotes.DamageBlock, b) LogLine(("DamageBlock -> ok=%s res=%s"):format(tostring(ok), tostring(res)), ok and res and GREEN or RED) end) Button("DamageBlock spam x50", function() local b = nearestByTag("Damagable") if not b then LogLine("no Damagable block found", RED) return end local granted = 0 local start = os.clock() for i = 1, 50 do local ok, res = pcall(Remotes.DamageBlock.InvokeServer, Remotes.DamageBlock, b) if ok and res then granted = granted + 1 end task.wait(0.05) end LogLine(("spam done: %d/50 accepted in %.1fs"):format(granted, os.clock() - start), granted > 0 and GREEN or RED) end) Button("WinTouched (nearest gate)", function() local g, d = nearestByTag("Winable") if not g then LogLine("no Winable gate found", RED) return end LogLine(("invoking WinTouched on %s"):format(g:GetFullName())) local ok, v14, v15 = pcall(Remotes.WinTouched.InvokeServer, Remotes.WinTouched, g) LogLine(("WinTouched -> ok=%s wins=%s"):format(tostring(ok), tostring(v15)), ok and v15 and GREEN or RED) end) Button("WinTouched spam x20", function() local g = nearestByTag("Winable") if not g then LogLine("no Winable gate found", RED) return end local granted = 0 local start = os.clock() for i = 1, 20 do local ok, v14, v15 = pcall(Remotes.WinTouched.InvokeServer, Remotes.WinTouched, g) if ok and v14 then granted = granted + 1 end task.wait(0.2) end LogLine(("WinTouched spam: %d/20 accepted in %.1fs"):format(granted, os.clock() - start), granted > 0 and GREEN or RED) end) Button("Rebirth:FireServer", function() Remotes.Rebirth:FireServer() LogLine("Rebirth fired") end) Button("UpgradeSpeed:FireServer", function() Remotes.UpgradeSpeed:FireServer() LogLine("UpgradeSpeed fired") end) Button("SkipStage:FireServer", function() Remotes.SkipStage:FireServer() LogLine("SkipStage fired") end) Button("SpinRequest:FireServer", function() Remotes.SpinRequest:FireServer() LogLine("SpinRequest fired") end) Button("GetSpinState:InvokeServer", function() local ok, res = pcall(Remotes.GetSpinState.InvokeServer, Remotes.GetSpinState) LogLine(("GetSpinState -> ok=%s %s"):format(tostring(ok), tostring(res))) end) Button("ClaimPrize:FireServer", function() Remotes.ClaimPrize:FireServer() LogLine("ClaimPrize fired") end) Button("UseLuckyReroll:FireServer", function() Remotes.UseLuckyReroll:FireServer() LogLine("UseLuckyReroll fired") end) Button("AdminCommandFired(admin)", function() Remotes.AdminCommandFired:FireServer("admin", "") LogLine("admin command fired") end) Button("AdminAction: ActivatePower x100", function() local ok, res = pcall(Remotes.AdminAction.InvokeServer, Remotes.AdminAction, "ActivatePower", { multiplier = 100, duration = 60 }) LogLine(("ActivatePower -> ok=%s %s"):format(tostring(ok), tostring(res)), ok and GREEN or RED) end) Button("AdminAction: GlobalMessage", function() local ok, res = pcall(Remotes.AdminAction.InvokeServer, Remotes.AdminAction, "GlobalMessage", { text = "test from client" }) LogLine(("GlobalMessage -> ok=%s %s"):format(tostring(ok), tostring(res))) end) Button("AdminAction: SpawnLuckyRerolls", function() local ok, res = pcall(Remotes.AdminAction.InvokeServer, Remotes.AdminAction, "SpawnLuckyRerolls", { world = 1, amount = 5 }) LogLine(("SpawnLuckyRerolls -> ok=%s %s"):format(tostring(ok), tostring(res))) end) Button("ResetWorldBlocks:FireServer", function() Remotes.ResetWorldBlocks:FireServer() LogLine("ResetWorldBlocks fired") end) Button("DamageBlock on NON-tagged part", function() local found for _, v in workspace:GetDescendants() do if v:IsA("BasePart") and v.Parent and not CollectionService:HasTag(v, "Damagable") and v.Name ~= "Terrain" then local hrp = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart") local d = hrp and (v.Position - hrp.Position).Magnitude or 0 if d < 40 then found = v break end end end if not found then LogLine("no untagged part within 40 studs", RED) return end local ok, res = pcall(Remotes.DamageBlock.InvokeServer, Remotes.DamageBlock, found) LogLine(("DamageBlock(%s) -> ok=%s res=%s"):format(found.Name, tostring(ok), tostring(res)), ok and res and GREEN or RED) end) Button("WinTouched on NON-tagged part", function() local found for _, v in workspace:GetDescendants() do if v:IsA("BasePart") and v.Parent and not CollectionService:HasTag(v, "Winable") then local hrp = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart") local d = hrp and (v.Position - hrp.Position).Magnitude or 0 if d < 40 then found = v break end end end if not found then LogLine("no untagged part within 40 studs", RED) return end local ok, a, b = pcall(Remotes.WinTouched.InvokeServer, Remotes.WinTouched, found) LogLine(("WinTouched(%s) -> ok=%s a=%s b=%s"):format(found.Name, tostring(ok), tostring(a), tostring(b)), ok and a and GREEN or RED) end) Button("CollectLuckyReroll (any part)", function() local found for _, v in workspace:GetDescendants() do if v:IsA("BasePart") and v.Parent then found = v break end end if not found then LogLine("no parts", RED) return end Remotes.CollectLuckyReroll:FireServer(found) LogLine("CollectLuckyReroll fired with " .. found.Name) end) Button("TutorialProgress:FireServer(5)", function() Remotes.TutorialProgress:FireServer(5) LogLine("TutorialProgress(5) fired") end) Button("PickaxeShop:FireServer(Stone)", function() Remotes.PickaxeShop:FireServer("Stone_Pickaxe") LogLine("PickaxeShop(Stone_Pickaxe) fired") end) Button("PickaxeShop:FireServer(Emerald)", function() Remotes.PickaxeShop:FireServer("Emerald_Pickaxe") LogLine("PickaxeShop(Emerald_Pickaxe) fired") end) Button("BuyTrail + EquipTrail", function() Remotes.BuyTrail:FireServer("Trail1") task.wait(0.3) Remotes.EquipTrail:FireServer("Trail1") LogLine("BuyTrail/EquipTrail fired") end) Button("UnlockWorld(2) + SetWorld(2)", function() Remotes.UnlockWorld:FireServer(2) task.wait(0.3) Remotes.SetWorld:FireServer(2) LogLine("UnlockWorld/SetWorld fired") end) Button("MultiplierPurchased:FireServer", function() Remotes.MultiplierPurchased:FireServer() LogLine("MultiplierPurchased fired") end) Button("ClaimGroupReward:FireServer", function() Remotes.ClaimGroupReward:FireServer() LogLine("ClaimGroupReward fired") end) Button("Set NextFreeSpin = 0 (free spin test)", function() LocalPlayer:SetAttribute("NextFreeSpin", 0) LogLine("NextFreeSpin set to 0 - watch for FreeSpinGranted", YELLOW) end) Button("Fuzz AdminAction (25 cmd names)", function() local cmds = { "GiveWins", "AddWins", "SetWins", "GivePower", "AddPower", "SetPower", "GiveLuck", "AddSpins", "GiveSpins", "SetSpins", "GiveRebirths", "SetRebirths", "GiveXP", "AddXP", "GiveAll", "ResetAll", "ClearBlocks", "ResetBlocks", "ActivateBoost", "Kick", "Shutdown", "Announce", "Broadcast", "Dev", "Owner" } for _, cmd in ipairs(cmds) do local ok, res = pcall(Remotes.AdminAction.InvokeServer, Remotes.AdminAction, cmd, {}) LogLine(("AdminAction(%s) -> ok=%s %s"):format(cmd, tostring(ok), tostring(res)), ok and res and GREEN or nil) task.wait(0.15) end LogLine("fuzz done", GREEN) end) Button("AdminAction: SpinReward 6", function() local ok, res = pcall(Remotes.AdminAction.InvokeServer, Remotes.AdminAction, "SpinReward", { rewardId = 6 }) LogLine(("SpinReward(6) -> ok=%s %s"):format(tostring(ok), tostring(res)), ok and GREEN or RED) end) end Section("UTILITY") do local farmOn = false local farmThread local function farmLoop() while farmOn do local wid = WorldConfig.GetPlayerWorldId(LocalPlayer) local worldFolder = WorldConfig.GetWorldFolder(wid) local best, bestDist if worldFolder then for _, g in CollectionService:GetTagged("Winable") do if g:IsDescendantOf(worldFolder) and not CollectionService:HasTag(g, "Double") then local hrp = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart") local d = hrp and (g.Position - hrp.Position).Magnitude or 0 if not best or d < bestDist then best, bestDist = g, d end end end end local char, hrp = getCharacter() local hum = char and char:FindFirstChildOfClass("Humanoid") if best and hrp and hum then hum:MoveTo(best.Position) local t = os.clock() while farmOn and os.clock() - t < 8 do local d = (hrp.Position - best.Position).Magnitude if d < 6 then hum:MoveTo(best.Position) LogLine("farm: reached gate " .. best.Name, GREEN) break end task.wait(0.1) end task.wait(1) else local tp = WorldConfig.GetTPPart(wid) if tp and hrp and hum then hum:MoveTo(tp.Position) LogLine("farm: returning to spawn", YELLOW) task.wait(3) else task.wait(1) end end end end ToggleButton("Farm gates", function(state) farmOn = state if state then farmThread = task.spawn(farmLoop) end end) local jumpOn = false ToggleButton("Auto-jump", function(state) jumpOn = state task.spawn(function() while jumpOn do local char = LocalPlayer.Character local hum = char and char:FindFirstChildOfClass("Humanoid") if hum and hum:GetState() == Enum.HumanoidStateType.Running then hum.Jump = true end task.wait(0.3) end end) end) Button("Teleport to nearest block", function() local b, d = nearestByTag("Damagable") if not b then LogLine("no block found", RED) return end local char, hrp = getCharacter() hrp.CFrame = b.CFrame + Vector3.new(0, 3, 0) char:PivotTo(hrp.CFrame) LogLine("teleported to " .. b:GetFullName()) end) Button("Teleport to world spawn", function() local wid = WorldConfig.GetPlayerWorldId(LocalPlayer) local tp = WorldConfig.GetTPPart(wid) if not tp then LogLine("no TP part", RED) return end local char, hrp = getCharacter() hrp.CFrame = tp.CFrame + Vector3.new(0, 5, 0) char:PivotTo(hrp.CFrame) LogLine("teleported to spawn") end) do local row, box = RowBox("WalkSpeed", "16") local set = Instance.new("TextButton") set.Size = UDim2.new(0, 30, 0, 30) set.Position = UDim2.new(1, -30, 0, 0) set.BackgroundColor3 = Color3.fromRGB(60, 120, 200) set.Text = ">" set.Font = Enum.Font.GothamBold set.TextSize = 14 set.TextColor3 = Color3.new(1, 1, 1) set.Parent = row local c = Instance.new("UICorner"); c.CornerRadius = UDim.new(0, 6); c.Parent = set local apply = function() local v = tonumber(box.Text) if not v then LogLine("bad number: " .. box.Text, RED) return end local char = LocalPlayer.Character local hum = char and char:FindFirstChildOfClass("Humanoid") if hum then hum.WalkSpeed = v LogLine("WalkSpeed = " .. tostring(v), GREEN) else LogLine("no humanoid", RED) end end set.MouseButton1Click:Connect(apply) box.FocusLost:Connect(function(enter) if enter then apply() end end) end Button("Reveal hidden Admin GUI", function() local admin = LocalPlayer.PlayerGui:FindFirstChild("Game") and LocalPlayer.PlayerGui.Game:FindFirstChild("Admin") if admin then admin.Visible = true local scale = admin:FindFirstChildWhichIsA("UIScale") if scale then scale.Scale = 1 end LogLine("admin panel revealed - read its section buttons", GREEN) else LogLine("no Admin frame found", RED) end end) Button("Destroy ResetParts (anti-teleport)", function() local n = 0 local rp = workspace:FindFirstChild("ResetParts") if rp then for _, v in rp:GetChildren() do v:Destroy() n = n + 1 end end LogLine("destroyed " .. tostring(n) .. " reset parts", GREEN) end) Button("SetWorld(3) bypass probe", function() Remotes.SetWorld:FireServer(3) LogLine("SetWorld(3) fired") end) end task.spawn(function() while true do if locked then for k, v in pairs(hacks) do if LocalPlayer:GetAttribute(k) ~= v then LocalPlayer:SetAttribute(k, v) end end end task.wait(0.4) end end) LogLine("GUI loaded. Hacks apply via attributes; remotes probe the server.", GREEN)