local Players = game:GetService("Players") local RunService = game:GetService("RunService") local VirtualInputManager = game:GetService("VirtualInputManager") local UserInputService = game:GetService("UserInputService") local LocalPlayer = Players.LocalPlayer -- Cleanup previous instance local GLOBAL_KEY = "SquareUnderScript" if _G[GLOBAL_KEY] then local old = _G[GLOBAL_KEY] if old.part then old.part:Destroy() end if old.gui then old.gui:Destroy() end if old.connections then for _, c in ipairs(old.connections) do pcall(c.Disconnect, c) end end end _G[GLOBAL_KEY] = {} local storage = _G[GLOBAL_KEY] -- Animation IDs to detect local TARGET_ANIM_IDS = { 105018679651616, 138386253518573, 99539252076343, 92343089184929, 109073770803138, 108438446017492, 78844120285210, 96153006014341, 75726689596677, 129086720270183, 89934284994477 } local targetSet = {} for _, id in ipairs(TARGET_ANIM_IDS) do targetSet[id] = true end local COLOR = Color3.fromRGB(255, 0, 0) local FIXED_HEIGHT = 0.6 local DEFAULT_SIZE = 24 local MIN_SIZE = 10 local MAX_SIZE = 80 local CHECK_INTERVAL = 0.3 local currentSize = DEFAULT_SIZE local autoQEnabled = false local logEnabled = false -- Create square under feet local part = Instance.new("Part") part.Name = "SquareUnder" part.Shape = Enum.PartType.Block part.Size = Vector3.new(currentSize, FIXED_HEIGHT, currentSize) part.Color = COLOR part.Transparency = 0.5 part.CanCollide = false part.Anchored = true part.Material = Enum.Material.Neon part.Parent = workspace local renderConn = RunService.RenderStepped:Connect(function() if part.Parent and LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart") then local hrp = LocalPlayer.Character.HumanoidRootPart part.CFrame = hrp.CFrame * CFrame.new(0, -3.2, 0) end end) storage.part = part storage.connections = {renderConn} -- GUI local gui = Instance.new("ScreenGui") gui.ResetOnSpawn = false gui.Parent = LocalPlayer:WaitForChild("PlayerGui") local frame = Instance.new("Frame") frame.Size = UDim2.new(0, 260, 0, 180) frame.Position = UDim2.new(0.5, -130, 0.1, 0) frame.BackgroundColor3 = Color3.fromRGB(30,30,40) frame.Parent = gui local title = Instance.new("TextLabel") title.Size = UDim2.new(1,0,0,30) title.Text = "SQUARE UNDER FEET" title.TextColor3 = Color3.new(1,0.3,0.3) title.BackgroundTransparency = 1 title.Font = Enum.Font.GothamBold title.TextSize = 18 title.Parent = frame local sizeTxt = Instance.new("TextLabel") sizeTxt.Size = UDim2.new(1,0,0,25) sizeTxt.Position = UDim2.new(0,0,0,35) sizeTxt.Text = "Size: " .. currentSize sizeTxt.TextColor3 = Color3.new(1,1,1) sizeTxt.BackgroundTransparency = 1 sizeTxt.TextSize = 16 sizeTxt.Parent = frame local minus = Instance.new("TextButton") minus.Size = UDim2.new(0,50,0,30) minus.Position = UDim2.new(0.1,0,0,65) minus.Text = "-" minus.BackgroundColor3 = Color3.fromRGB(150,0,0) minus.TextColor3 = Color3.new(1,1,1) minus.TextSize = 22 minus.Parent = frame local plus = Instance.new("TextButton") plus.Size = UDim2.new(0,50,0,30) plus.Position = UDim2.new(0.7,0,0,65) plus.Text = "+" plus.BackgroundColor3 = Color3.fromRGB(0,150,0) plus.TextColor3 = Color3.new(1,1,1) plus.TextSize = 22 plus.Parent = frame local qBtn = Instance.new("TextButton") qBtn.Size = UDim2.new(0.8,0,0,35) qBtn.Position = UDim2.new(0.1,0,0,100) qBtn.Text = "AUTO Q: OFF" qBtn.BackgroundColor3 = Color3.fromRGB(80,80,80) qBtn.TextColor3 = Color3.new(1,1,1) qBtn.TextSize = 16 qBtn.Parent = frame local logBtn = Instance.new("TextButton") logBtn.Size = UDim2.new(0.8,0,0,35) logBtn.Position = UDim2.new(0.1,0,0,140) logBtn.Text = "ANIMATION LOG: OFF" logBtn.BackgroundColor3 = Color3.fromRGB(80,80,80) logBtn.TextColor3 = Color3.new(1,1,1) logBtn.TextSize = 16 logBtn.Parent = frame minus.MouseButton1Click:Connect(function() currentSize = math.max(MIN_SIZE, currentSize - 4) sizeTxt.Text = "Size: " .. currentSize part.Size = Vector3.new(currentSize, FIXED_HEIGHT, currentSize) end) plus.MouseButton1Click:Connect(function() currentSize = math.min(MAX_SIZE, currentSize + 4) sizeTxt.Text = "Size: " .. currentSize part.Size = Vector3.new(currentSize, FIXED_HEIGHT, currentSize) end) qBtn.MouseButton1Click:Connect(function() autoQEnabled = not autoQEnabled qBtn.Text = "AUTO Q: " .. (autoQEnabled and "ON" or "OFF") qBtn.BackgroundColor3 = autoQEnabled and Color3.fromRGB(0,180,0) or Color3.fromRGB(80,80,80) end) logBtn.MouseButton1Click:Connect(function() logEnabled = not logEnabled logBtn.Text = "ANIMATION LOG: " .. (logEnabled and "ON" or "OFF") logBtn.BackgroundColor3 = logEnabled and Color3.fromRGB(0,120,255) or Color3.fromRGB(80,80,80) end) storage.gui = gui -- Reliable Q press local function pressQ() VirtualInputManager:SendKeyEvent(true, Enum.KeyCode.Q, false, game) task.wait(0.04) VirtualInputManager:SendKeyEvent(false, Enum.KeyCode.Q, false, game) pcall(function() local input = { KeyCode = Enum.KeyCode.Q, UserInputType = Enum.UserInputType.Keyboard, UserInputState = Enum.UserInputState.Begin } firesignal(UserInputService.InputBegan, input, false) task.wait(0.04) input.UserInputState = Enum.UserInputState.End firesignal(UserInputService.InputEnded, input, false) end) print("Q PRESSED") end -- Detection loop (works after respawn) spawn(function() while true do if part.Parent then local half = currentSize / 2 local pos = part.Position for _, model in ipairs(workspace:GetChildren()) do if model:IsA("Model") and model ~= LocalPlayer.Character then local root = model:FindFirstChild("HumanoidRootPart") or model.PrimaryPart if root then local dx = math.abs(root.Position.X - pos.X) local dz = math.abs(root.Position.Z - pos.Z) if dx < half and dz < half and math.abs(root.Position.Y - pos.Y) < 6 then local controller = model:FindFirstChildOfClass("Humanoid") or model:FindFirstChild("AnimationController") if controller then local animator = controller:FindFirstChild("Animator") or controller for _, track in ipairs(animator:GetPlayingAnimationTracks()) do if track.IsPlaying and track.Animation then local id = tonumber(track.Animation.AnimationId:match("%d+")) if id and targetSet[id] and autoQEnabled then print("Q TRIGGERED → ID: " .. id .. " (" .. model.Name .. ")") pressQ() task.wait(0.3) break end end end end end end end end end task.wait(CHECK_INTERVAL) end end) -- Handle respawns for all players (including NPCs) local function hookCharacter(character) local humanoid = character:WaitForChild("Humanoid", 5) if not humanoid then return end -- Re-hook animator after respawn local animator = humanoid:WaitForChild("Animator", 5) if animator then -- You can add extra logic here if needed print("Animator re-hooked for: " .. character.Name) end end -- Hook all existing characters for _, player in ipairs(Players:GetPlayers()) do if player.Character then hookCharacter(player.Character) end player.CharacterAdded:Connect(hookCharacter) end Players.PlayerAdded:Connect(function(player) player.CharacterAdded:Connect(hookCharacter) end) print("Script loaded. Use AUTO Q toggle to enable.")