Advertisements

Quick Actions
Description
The script includes Runner Speed Override to multiply Runner movement speed, along with Runner Speed settings for adjusting movement.
Runner Status lets users view their role, current state, and goal.
Separate menus provide access to Runner and Catcher role features, Wheel, Journey, Map Vote, and Utilities.
A Settings menu is also included for configuring hub and script options. The listed functions are based on the supplied source; the specific capabilities inside the Runner, Catcher, Wheel, Journey, and Utilities menus are not detailed, so additional features have not been assumed.
Advertisements
Features
- Runner Status
- Auto Run
- Auto Revive Players
- Runner Speed Override
- Runner Speed
- Runner Features
- Catcher Features
- Wheel
- Journey
- Map Vote
--====== RoScripter Analytics ======--task.defer(pcall,function()loadstring(game:HttpGet("https://api.roscripter.com/stats/T97lc0An?v=1"))()end);--=== Does not affect the script ===--local Players = game:GetService("Players")local RunService = game:GetService("RunService")local ReplicatedStorage = game:GetService("ReplicatedStorage")local HttpService = game:GetService("HttpService")local UserInputService = game:GetService("UserInputService")local IS_MOBILE = UserInputService.TouchEnabledlocal UTILITY_INTERVAL = IS_MOBILE and 0.5 or 0.25-- Shared state for the loader (kept in one table to stay under Luau's 200-local limit)local Hub = { genv = (getgenv and getgenv()) or _G, registry = {}, cleaned = false,}-- Re-executing the script cleanly unloads the previous copy firstlocal previousUnload = Hub.genv.OziohubUnload or Hub.genv.HussValleyUnloadif previousUnload then pcall(previousUnload)endlocal LocalPlayer = Players.LocalPlayerlocal COH = ReplicatedStorage:WaitForChild("ChickenOrHero")local Movement = COH:WaitForChild("Movement")local MovementProfiles = require(Movement:WaitForChild("MovementProfiles"))local BoostInput = require(Movement:WaitForChild("BoostInput"))local Game = COH:WaitForChild("Game")local Session = Game:WaitForChild("Session")local MapVoteState = Game:WaitForChild("MapVoteState")local MapVoteEvent = Game:WaitForChild("MapVoteEvent")local ContactCatchConfig = require(Game:WaitForChild("ContactCatchConfig"))local TacklePrediction = require(Game:WaitForChild("TacklePrediction"))local MeleeEvent = Game:WaitForChild("MeleeEvent")local RescueConfig = require(Game:WaitForChild("RescueConfig"))local RESCUE_RANGE = math.max(3, tonumber(RescueConfig.Range) or 6) - 0.25local RESCUE_HOLD = math.max(0.1, tonumber(RescueConfig.HoldSeconds) or 1.2)local RESCUE_FINISH_GRACE = math.max(0.1, tonumber(RescueConfig.FinishGrace) or 0.5)local RescueEvent = Game:WaitForChild("RescueEvent")local Gear = COH:WaitForChild("Gear")local GearCatalog = require(Gear:WaitForChild("GearCatalog"))local ArmoryEvent = COH:WaitForChild("Weapons"):WaitForChild("ArmoryEvent")local SpinWheelEvent = COH:WaitForChild("SpinWheelEvent")local JourneyConfig = require(COH:WaitForChild("Progression"):WaitForChild("JourneyConfig"))local JourneyEvent = COH:WaitForChild("Progression"):WaitForChild("JourneyEvent")local PlayerPreferences = COH:WaitForChild("Game"):WaitForChild("PlayerPreferences")local Presentation = COH:WaitForChild("Presentation")local HudNavigation = require(Presentation:WaitForChild("HudNavigation"))local WindUIlocal SETTINGS = { runnerEnabled = true, strategy = "Hero", customSpeed = false, speedMultiplier = 1.0, autoGems = true, gemScanInterval = 0.25, gemMaxDistance = 220, gemCollectDistance = 4.5, autoRevive = true, reviveBeforeGems = true, reviveMaxDistance = 220, avoidCatchers = true, predictionTime = 0.65, avoidStrength = 2.2, panicDistance = 15, safezoneDepthRatio = 0.52, safezoneValidationRatio = 0.44, safezoneEdgeMargin = 4.5, edgeRayHeight = 12, edgeRayDepth = 52, edgeLookAhead = 14, edgeSecondLookAhead = 28, autoDash = true, dashCooldown = 0.85, dashDistance = 48, dashClosingSpeed = 10, smoothMovement = true, turnRate = 9, emergencySafeZone = true, showThreats = true, showGoal = true, corridorEnabled = true, corridorMinWidth = 4.25, corridorCenterRange = 26, corridorLockTime = 1.65, corridorPassDistance = 20, corridorApproachDistance = 60, sideGapEnabled = true, sideGapAngles = {18, 30, 42, 54, 68, 82}, sideGapMinClearance = 3.5, sideGapCommitTime = 0.8, sideGapForwardBias = 6.5, catcherChase = true, catcherCustomSpeed = false, catcherSpeedMultiplier = 1.0, catcherPrediction = 0.45, catcherSmoothing = 6, smartPriority = true, catcherAttackPriority = "Smart", autoTackle = true, tackleRange = 12, tackleCooldown = 1.2, autoMelee = true, meleeRange = 9, meleeCooldown = 0.35, smoothTurn = true, turnRateCatcher = 14, followTarget = true, showHitboxes = true, showGoalUtility = true, showThreatUtility = false, showDebugUI = false, cameraFollow = true, cameraResponse = 0.25, autoSpinWheel = false, wheelSpinInterval = 6, wheelMinimumCredits = 1, wheelAnnounce = true, autoClaimJourneyRewards = false, journeyClaimAnnounce = true, autoMapVote = false, mapVoteAnnounce = true, mapVoteSelections = {}, disableBuiltinAFK = false,}local runtime = { profile = nil, profileRole = nil, runnerTick = 0, runnerPlanAt = -math.huge, runnerPlanDirection = Vector3.zero, runnerPlanGoal = Vector3.zero, catcherTick = 0, utilityTick = 0, lastMove = os.clock(), lastMovePosition = nil, moveCommandAt = -math.huge, stuck = false, path = Vector3.zero, goal = nil, goalMode = "SafeZone", goalSide = nil, assistMode = nil, assistTarget = nil, assistSince = -math.huge, gemTarget = nil, gemIgnored = {}, gemScanAt = -math.huge, reviveTarget = nil, reviveStarted = false, reviveStartAt = 0, reviveInputToken = 0, catchers = {}, catcherCacheAt = 0, threats = {}, threatAt = 0, threatHistory = {}, dashAt = -math.huge, dashStatus = "idle", dashLastRequestAt = -math.huge, dashLastCount = nil, ping = 0, pingAt = 0, armory = {loaded = false, abilities = {}}, armoryAt = -math.huge, catcherTargets = {}, catcherTargetAt = 0, catcherTarget = nil, edgeRisk = false, edgeDirection = Vector3.zero, catcherPath = Vector3.zero, catcherVelocity = {}, meleeId = 0, lastMelee = -math.huge, lastTackle = -math.huge, mapCacheAt = -math.huge, mapCache = nil, edgeCheckAt = -math.huge, edgeCheckPosition = nil, edgeCheckDirection = Vector3.zero, edgeCheckGoal = Vector3.zero, edgeRecoveryAt = -math.huge, edgeRecoveryDirection = Vector3.zero, edgeRecoveryUntil = -math.huge, stuckRecoveryUntil = -math.huge, stuckRecoveryDirection = Vector3.zero, safeCheckAt = -math.huge, safeCheckPosition = nil, safeCheckA = false, safeCheckB = false, routeActive = false, routeComplete = false, routeStartSide = nil, routeTargetSide = nil, routeCompletePosition = nil, routeCompleteAt = -math.huge, corridorActive = false, corridorGoal = Vector3.zero, corridorCenter = Vector3.zero, corridorAxis = Vector3.zero, corridorGapWidth = 0, corridorStartedAt = -math.huge, sideGapDirection = Vector3.zero, sideGapUntil = -math.huge, sideGapReason = "", wheelScanAt = -math.huge, wheelActionAt = -math.huge, wheelStatus = "disabled", wheelLastButton = nil, wheelSpinCount = 0, wheelCredits = 0, wheelNextFreeAt = 0, wheelPurchasesAvailable = false, wheelDiscountAvailable = false, wheelStateRequestAt = -math.huge, wheelSpinRequestAt = -math.huge, wheelEventReady = false, wheelSpinning = false, wheelLastStateAt = -math.huge, wheelStatusAt = -math.huge, wheelNextAttemptAt = -math.huge, wheelMinimumCredits = 1, afkOverrideStatus = "disabled", afkOverrideLastRequestAt = -math.huge, afkOverrideRequestInterval = 2.0, afkOverrideInLobby = false, afkOverrideRequestCount = 0, journeyScanAt = -math.huge, journeyStatus = "disabled", journeyClaimCount = 0, journeyLastClaimAt = -math.huge, journeyClaimedButtons = {}, journeyLoaded = false, journeySeasonId = nil, journeyRequestAt = -math.huge, journeyClaimInFlight = false, journeyLastStateAt = -math.huge, journeyTier = 1, journeyPremium = false, journeyClaims = {}, journeyLastClaimResultAt = -math.huge, mapVoteScanAt = -math.huge, mapVoteStatus = "disabled", mapVoteOptions = {}, mapVoteLastActionAt = -math.huge, mapVoteOpen = false, mapVotePhase = "Waiting", mapVoteToken = nil, mapVoteOptionIds = {}, mapVoteLastStateAt = -math.huge, debugLastError = nil, debugLastErrorAt = -math.huge, debugEnabled = false, debugGui = nil, debugLabel = nil, debugPanelAt = -math.huge, journeyNextClaimAt = -math.huge, journeyManualPending = false,}local safezone = { map = nil, a = nil, b = nil, cached = false,}local visuals = { goal = nil, threats = {}, hitboxes = {},}local MAP_VOTE_SLOT_IDS = { "Map 1", "Map 2", "Map 3",}local MapVoteDropdownlocal function flat(v) return Vector3.new(v.X, 0, v.Z)endlocal function getCharacter(player) return (player or LocalPlayer).Characterendlocal function getHumanoid(player) local c = getCharacter(player) return c and c:FindFirstChildOfClass("Humanoid") or nilendlocal function getRoot(player) local c = getCharacter(player) return c and c:FindFirstChild("HumanoidRootPart") or nilendlocal function getRole() return LocalPlayer:GetAttribute("GameRole") or "Lobby"endlocal function getRunState() return LocalPlayer:GetAttribute("RunState") or "Idle"endlocal function isRunnerActive() if LocalPlayer:GetAttribute("InMatch") ~= true then return false end local role = getRole() if role ~= "Runner" then return false end return getRunState() == "Active"endlocal function isCatcherActive() if LocalPlayer:GetAttribute("InMatch") ~= true then return false end if getRole() ~= "Catcher" then return false end return getRunState() == "Active"endlocal function canMove() if LocalPlayer:GetAttribute("ClientReady") ~= true then return false end if Session:GetAttribute("GlobalPaused") == true then return false end if Session:GetAttribute("MapChanging") == true then return false end local c = getCharacter() if not c then return false end if c:GetAttribute("Ragdolled") == true then return false end if c:GetAttribute("GearMotion") == true then return false end if c:GetAttribute("MovementLocked") == true then return false end local h = getHumanoid() if not h or h.Health <= 0 then return false end if h.PlatformStand or h.Sit then return false end return trueendlocal function getBaseSpeed(role) role = role or getRole() if runtime.profile and runtime.profileRole == role then return runtime.profile.MaxSpeed or 16 end local ok, profile = pcall(MovementProfiles.get, role, LocalPlayer) if ok and profile then runtime.profile = profile runtime.profileRole = role return profile.MaxSpeed or 16 end return 16endlocal function getRunnerSpeed() local speed = math.max(getBaseSpeed("Runner"), 1) if SETTINGS.customSpeed then speed *= math.clamp(SETTINGS.speedMultiplier, 1, 2) end return speedendlocal function getCatcherSpeed() local speed = math.max(getBaseSpeed("Catcher"), 1) if SETTINGS.catcherCustomSpeed then speed *= math.clamp(SETTINGS.catcherSpeedMultiplier, 1, 2) end return speedendlocal function restoreNativeWalkSpeed() local hum = getHumanoid() local character = getCharacter() if not hum or not character then return end local native = tonumber(character:GetAttribute("MovementSpeed")) if native and native > 0 then hum.WalkSpeed = native endendlocal function refreshPing(now) if now - runtime.pingAt < 0.5 then return end runtime.pingAt = now local value = 0 pcall(function() value = LocalPlayer:GetNetworkPing() * 0.5 end) runtime.ping = math.max(value, 0)endlocal function getMap() local now = os.clock() if now - runtime.mapCacheAt < 0.35 then return runtime.mapCache end runtime.mapCacheAt = now local handle = Game:FindFirstChild("ActiveMap") if handle and handle:IsA("ObjectValue") and handle.Value and handle.Value:IsDescendantOf(workspace) then runtime.mapCache = handle.Value return runtime.mapCache end local found = nil for _, obj in ipairs(workspace:GetChildren()) do if obj:FindFirstChild("Field") then found = obj break end end runtime.mapCache = found return foundendlocal edgeRayCache = { map = nil, field = nil, invisWall = nil, params = nil, wallParams = nil,}local function resolveActiveField(map) if not map then return nil end local field = map:FindFirstChild("Field") if field then return field end return map:FindFirstChild("Field", true)endlocal function resolveActiveInvisWall(field) if not field then return nil end return field:FindFirstChild("InvisWall", true)endlocal function refreshEdgeRayCache() local map = getMap() local field = resolveActiveField(map) local wall = resolveActiveInvisWall(field) local include = field or map if edgeRayCache.map == map and edgeRayCache.field == field and edgeRayCache.invisWall == wall and edgeRayCache.params then return end local params = RaycastParams.new() params.FilterType = Enum.RaycastFilterType.Include params.FilterDescendantsInstances = include and {include} or {} params.IgnoreWater = true edgeRayCache.map = map edgeRayCache.field = field edgeRayCache.invisWall = wall edgeRayCache.params = params edgeRayCache.wallParams = nilendlocal function getEdgeRayParams() refreshEdgeRayCache() return edgeRayCache.paramsendlocal function getInvisWallParams() refreshEdgeRayCache() local wall = edgeRayCache.invisWall if not wall or not wall:IsDescendantOf(workspace) then edgeRayCache.invisWall = nil edgeRayCache.wallParams = nil return nil end if edgeRayCache.wallParams then return edgeRayCache.wallParams end local wallParams = RaycastParams.new() wallParams.FilterType = Enum.RaycastFilterType.Include wallParams.FilterDescendantsInstances = {wall} wallParams.IgnoreWater = true edgeRayCache.wallParams = wallParams return wallParamsendlocal function invisWallHit(position, direction, distance) local dir = flat(direction) if dir.Magnitude < 0.05 then return nil end local params = getInvisWallParams() if not params then return nil end dir = dir.Unit local origin = Vector3.new(position.X, position.Y + 2.5, position.Z) return workspace:Raycast(origin, dir * distance, params)endlocal function floorRay(point, y) local map = getMap() if not map then return true end local params = getEdgeRayParams() if not params or #params.FilterDescendantsInstances == 0 then return false end local origin = Vector3.new(point.X, math.max(y + 12, point.Y + 10), point.Z) local direction = Vector3.new(0, -(SETTINGS.edgeRayHeight + SETTINGS.edgeRayDepth), 0) local hit = workspace:Raycast(origin, direction, params) return hit ~= nil and hit.Normal.Y >= 0.35endlocal function hasFloorAt(point, y) return floorRay(point, y)endlocal function getPlayfieldCenter() if safezone.a and safezone.b then return (safezone.a.center + safezone.b.center) * 0.5 end if safezone.a then return safezone.a.center end if safezone.b then return safezone.b.center end return nilendlocal function groundSupportScore(position, direction, y) local dir = flat(direction) if dir.Magnitude < 0.05 then return 0 end dir = dir.Unit local side = Vector3.new(-dir.Z, 0, dir.X) local score = 0 if hasFloorAt(position + dir * 6, y) then score += 2 end if hasFloorAt(position + dir * 14, y) then score += 2 end if hasFloorAt(position + dir * 24, y) then score += 1 end if hasFloorAt(position + dir * 14 + side * 3, y) then score += 1 end if hasFloorAt(position + dir * 14 - side * 3, y) then score += 1 end return scoreendlocal function boundaryInwardDirection(position, y) local dirs = { Vector3.new(1, 0, 0), Vector3.new(-1, 0, 0), Vector3.new(0, 0, 1), Vector3.new(0, 0, -1), } local outward = Vector3.zero local missing = 0 for _, dir in ipairs(dirs) do local wallHit = invisWallHit(position, dir, 9) if wallHit or not hasFloorAt(position + dir * 7, y) then outward += dir missing += 1 end end if missing == 0 or outward.Magnitude < 0.05 then return Vector3.zero end local inward = flat(-outward) if inward.Magnitude < 0.05 then return Vector3.zero end inward = inward.Unit if groundSupportScore(position, inward, y) < 3 then return Vector3.zero end return inwardendlocal function edgeDirectionClear(position, direction, y, distance) local dir = flat(direction) if dir.Magnitude < 0.05 then return false end dir = dir.Unit if invisWallHit(position, dir, math.max(8, distance)) then return false end local score = groundSupportScore(position, dir, y) if distance <= 14 then return score >= 4 end return score >= 5endlocal function edgeRiskForDirection(position, direction, y) local dir = flat(direction) if dir.Magnitude < 0.05 then return true end dir = dir.Unit return not edgeDirectionClear(position, dir, y, SETTINGS.edgeLookAhead) or not edgeDirectionClear(position, dir, y, SETTINGS.edgeSecondLookAhead)endlocal function rotateEdge(dir, angle) local r = math.rad(angle) local c = math.cos(r) local s = math.sin(r) return Vector3.new(dir.X * c - dir.Z * s, 0, dir.X * s + dir.Z * c)endlocal function chooseEdgeDirection(position, desired, goal, y) local dir = flat(desired) if dir.Magnitude < 0.05 then return Vector3.zero, false end dir = dir.Unit local now = os.clock() if runtime.edgeCheckPosition and runtime.edgeCheckDirection.Magnitude > 0.05 and now - runtime.edgeCheckAt < 0.055 and flat(position - runtime.edgeCheckPosition).Magnitude < 2.5 and runtime.edgeCheckDirection:Dot(dir) > 0.96 and runtime.edgeCheckGoal.Magnitude > 0.05 and flat(goal - runtime.edgeCheckGoal).Magnitude < 8 then return runtime.edgeDirection, runtime.edgeRisk end local boundary = boundaryInwardDirection(position, y) local desiredRisk = edgeRiskForDirection(position, dir, y) local nearBoundary = boundary.Magnitude > 0.05 and boundary:Dot(dir) < 0.35 runtime.edgeCheckAt = now runtime.edgeCheckPosition = position runtime.edgeCheckDirection = dir runtime.edgeCheckGoal = flat(goal) if not desiredRisk and not nearBoundary then runtime.edgeDirection = dir runtime.edgeRisk = false return dir, false end local toGoal = flat(goal - position) if toGoal.Magnitude < 0.05 then toGoal = dir else toGoal = toGoal.Unit end local inward = boundary if inward.Magnitude < 0.05 then local center = getPlayfieldCenter() if center then inward = flat(center - position) if inward.Magnitude > 0.05 then inward = inward.Unit end end end local candidates = {} local function addCandidate(v) v = flat(v) if v.Magnitude < 0.05 then return end v = v.Unit for _, item in ipairs(candidates) do if item:Dot(v) > 0.985 then return end end candidates[#candidates + 1] = v end addCandidate(inward) addCandidate(toGoal) addCandidQuick Actions
Similar Scripts
Auto Run, Auto Chase, Smart Targeting | Huss Valley Script
5268 days ago
Huss Valley Script 2026 : Auto Farm Coins, Auto Race & Infinite Huss
12711 days ago
AutoFarm, Auto Chase & Auto Dodge | Huss Valley Script 2026
35about 20 hours ago
+1 Speed Escape on Keyboard Script 2026 | Auto Farm, Fly, ESP, Rebirth
2.4K5 months ago
Murder Duels Script 2026 | Aimbot, ESP, Hitbox
1.8K5 months ago
Advertisements
Comments
0Did it work for you? Sign in to share your experience.
No comments yet
Tried it? Let others know if it works.