-- [[ Rscripts Risk Notice ]] -- This script is not verified by rscripts.net. Deal with caution. -- -- Stay safe: -- • Never log in on unofficial Roblox sites or lookalike domains. -- • Real Roblox links use roblox.com (check the .com ending). -- • Treat fake Roblox login / "claim reward" pages as phishing. -- [[ End Rscripts Risk Notice ]] --// Created By CDHW --// Them Basketball Hubs Finna Skid My Shit Dawg --//https://www.roblox.com/games/6549794549/RH2-The-Journey local remote, lastAction, lastDetail local lastRemote = 0 local releases = {} local sending = false local ping = 80 local biases = {} local low, high, window = 76, 77, 0 local family, animation local armed, fired = false, false local started = 0 local pending local oldPower, oldTime = 0, os.clock() local firstPower, firstTime local rate = 0 if hookmetamethod and getnamecallmethod then local old local function hook(self, ...) if getnamecallmethod() == "FireServer" then local state, action, detail = ... local shooting = action == "Shooting" or action == "Moving Dunk" or action == "Standing Dunk" or action == "Moving AO Dunk" or action == "Standing AO Dunk" if shooting and state == true then remote = self lastAction = action lastDetail = detail lastRemote = os.clock() elseif shooting and state == false and sending == false and self == remote and lastAction then releases[lastAction .. ":" .. tostring(lastDetail)] = {action, detail} end end return old(self, ...) end old = hookmetamethod(game, "__namecall", newcclosure and newcclosure(hook) or hook) end local function getShot(char) local hum = char:FindFirstChild("Humanoid") local animator = hum and hum:FindFirstChild("Animator") if animator then for number, track in animator:GetPlayingAnimationTracks() do local anim = track.Animation if anim then local folder = anim.Parent local found while folder and folder ~= game do local name = folder.Name if name == "ShootingAnimations" or name == "LayupAnimations" or name == "FloaterAnimations" or name == "PostUpAnimations" or name == "DunkingAnimations" then found = name break end folder = folder.Parent end local name = anim.Name local good = found == "ShootingAnimations" and (name == "Jumpshot" or name == "Freethrow_Shot" or string.sub(name, 1, 9) == "Jumpshot_") or found == "LayupAnimations" and string.find(name, "Layup", 1, true) and not string.find(name, "Clutch", 1, true) or found == "FloaterAnimations" and string.find(name, "Floater", 1, true) or found == "PostUpAnimations" and (string.find(name, "PostFade", 1, true) or string.find(name, "Hook", 1, true) and not string.find(name, "Fake", 1, true)) or found == "DunkingAnimations" and (string.sub(name, 1, 10) == "MovingDunk" or string.sub(name, 1, 12) == "StandingDunk") if good then return found, name end end end end end local function release(char) if typeof(remote) ~= "Instance" or not remote:IsA("RemoteEvent") or not remote.Parent then remote = nil local rh2 = rawget(_G, "RH2_Remotes") local found = rh2 and rh2.Shooting_RE if typeof(found) == "Instance" and found:IsA("RemoteEvent") then remote = found elseif getgc then for number, object in getgc(true) do if type(object) == "table" then found = rawget(object, "Shooting_RE") if typeof(found) == "Instance" and found:IsA("RemoteEvent") then remote = found break end end end end end if not remote then return false end local action local detail local saved = lastAction and releases[lastAction .. ":" .. tostring(lastDetail)] if os.clock() - lastRemote < 3 then if saved then action, detail = saved[1], saved[2] else action, detail = lastAction, lastDetail if action == "Shooting" and detail == "Side Post Hook" then detail = "Close Post Hook" end end end if not action then if family == "DunkingAnimations" then detail = tonumber(string.match(animation, "(%d+)$")) or 1 action = string.sub(animation, 1, 10) == "MovingDunk" and "Moving Dunk" or "Standing Dunk" elseif family == "ShootingAnimations" then action = "Shooting" if animation == "Freethrow_Shot" then detail = "Freethrow" elseif animation == "Jumpshot" then detail = char.Humanoid.MoveDirection.Magnitude > 0.05 and "Moving Shot" or "Standing Shot" else detail = "Moving Shot" end elseif family == "LayupAnimations" then action = "Shooting" if string.find(animation, "ReverseLayup", 1, true) then detail = "Reverse Layup" elseif string.find(animation, "CloseLayup", 1, true) then detail = "Close Layup" elseif animation == "RH_Layup" or animation == "LH_Layup" then detail = "Layup" elseif string.find(animation, "Standing_Layup", 1, true) then detail = char:FindFirstChild("CanCatchLob_Val") and "Standing AO Layup" or "Standing Layup" end elseif family == "FloaterAnimations" then action = "Shooting" detail = string.find(animation, "CloseFloater", 1, true) and "Close Floater" or "Floater" elseif family == "PostUpAnimations" then action = "Shooting" local root = char:FindFirstChild("HumanoidRootPart") local distance = math.huge local goals = game.Workspace:FindFirstChild("Goals") if root and goals then for number, part in goals:GetDescendants() do if part:IsA("BasePart") and string.sub(part.Name, 1, 4) == "Goal" then local mag = (part.Position - root.Position).Magnitude if mag < distance then distance = mag end end end end if string.find(animation, "Hook", 1, true) then detail = distance < 15 and "Close Post Hook" or "Post Hook" else detail = distance < 15 and "Close Post Fade" or "Post Fade" end end end if not action or detail == nil then return false end sending = true remote:FireServer(false, action, detail) sending = false return true end local function reset() family, animation = nil, nil armed, fired = false, false started = 0 oldPower, oldTime = 0, os.clock() firstPower, firstTime = nil, nil rate = 0 end game.ReplicatedStorage:WaitForChild("PlayerEvents"):WaitForChild("Magnitude").OnClientEvent:Connect(function(data) if data.Action == "Return Green Window" then local one = tonumber(data.Meter_1) local two = tonumber(data.Meter_2) if one and two then if two < one then one, two = two, one end low = one high = two - one < 1 and one + 1 or two window = os.clock() + 2.5 end end end) game.ReplicatedStorage:WaitForChild("PlayerEvents"):WaitForChild("ShotFeedBack").OnClientEvent:Connect(function(registered, _, perfect) if registered == "SetTargetBar" then return end local shot = pending pending = nil if not shot or perfect or typeof(registered) ~= "number" or os.clock() - shot.time > 3 then return end local lag = (registered - shot.power) / shot.rate if lag >= -0.05 and lag <= 0.65 then local wanted = math.clamp(lag - shot.ping, -0.025, 0.15) local old = biases[shot.name] biases[shot.name] = old and old + (wanted - old) * 0.35 or wanted end end) task.spawn(function() while true do local value = game.Stats.Network.ServerStatsItem["Data Ping"]:GetValue() ping = ping + (value - ping) * 0.25 task.wait(0.25) end end) game.RunService.Heartbeat:Connect(function() local char = game.Players.LocalPlayer.Character local backpack = game.Players.LocalPlayer:FindFirstChild("Backpack") if not char or not backpack then reset() return end local values = backpack:FindFirstChild("ActionValues") local power = values and values:FindFirstChild("Power") if not power then reset() return end local menu = backpack:FindFirstChild("MenuValues") local meterType = menu and menu:FindFirstChild("ShotmeterType") local meterName = meterType and meterType.Value or "Overhead" local meter if meterName == "On Floor" then meter = game.Players.LocalPlayer.PlayerGui:FindFirstChild("Stamina_OnFloor") else if meterName ~= "Overhead" and meterName ~= "Vertical Bar" and meterName ~= "Pill" then meterName = "Overhead" end local head = char:FindFirstChild("Head") meter = head and head:FindFirstChild("MeterUi " .. meterName) end local dunkMeter = game.Players.LocalPlayer.PlayerGui:FindFirstChild("Dunk_Meter") local meterUp = meter and meter.Enabled or dunkMeter and dunkMeter.Enabled local hasBall = char:FindFirstChild("BallConnect") local value = power.Value local now = os.clock() if not armed then if not meterUp or not hasBall or value <= 0 then reset() return end armed = true started = now elseif now - started > 0.15 and (value <= 0 or not meterUp or not hasBall) then reset() return end if value ~= oldPower then if not firstTime and value > 0 then firstPower = value firstTime = now elseif value > oldPower and now - firstTime >= 0.05 then rate = (value - firstPower) / (now - firstTime) end oldPower = value oldTime = now end if fired or rate <= 0 then return end if not family then family, animation = getShot(char) if not family then return end end if family == "DunkingAnimations" then local root = char:FindFirstChild("HumanoidRootPart") local goals = game.Workspace:FindFirstChild("Goals") if root and goals then local distance = math.huge for number, part in goals:GetDescendants() do if part:IsA("BasePart") and string.sub(part.Name, 1, 4) == "Goal" then local mag = (part.Position - root.Position).Magnitude if mag < distance then distance = mag end end end if distance <= (string.sub(animation, 1, 10) == "MovingDunk" and 7.5 or 4.5) then return end end end local shot = family .. "/" .. animation local target = now < window and (low + high) / 2 or 76.5 local oneWay = ping / 2000 local lead = math.clamp(oneWay + (biases[shot] or 0.005), 0, 0.5) local predicted = value + rate * math.min(now - oldTime, 0.08) if predicted >= target - rate * lead then fired = true pending = {name = shot, power = predicted, rate = rate, ping = oneWay, time = now} if release(char) == false then fired = false pending = nil end end end)