-- [[ 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 ]] --[[rscripts:analytics:start]] -- Script analytics (enabled by the creator on rscripts.net). -- Runs in its own thread and cannot affect the script below. task.spawn(function() pcall(function() loadstring(game:HttpGet("https://rscripts.net/api/telemetry/v2/client.lua?s=6ad25dd8f668b8e8a8258487"))() end) end) --[[rscripts:analytics:end]] --[[* *If you enjoy the script, please consider liking the post.* *It helps motivate me to release more open-source scripts* *and keep existing ones updated.* *MADE BY: [https://rscripts.net/@Yamis_Scripts]* *]] local placeId = 90568084448279 local prefix = "[YS OneTap]" if game.PlaceId ~= placeId then warn(('%s The correct game for this script is [One Tap] (%d).'):format(prefix, placeId)) return end local executor = "Unknown" if type(identifyexecutor) == "function" then local identified, name = pcall(identifyexecutor) if identified and type(name) == "string" then executor = name end end local executorLower = executor:lower() if executorLower:find("xeno", 1, true) or executorLower:find("solara", 1, true) then task.spawn(function() for _ = 1, 6 do local displayed = pcall(function() game:GetService("StarterGui"):SetCore("SendNotification", { Title = "YS HUB - One Tap", Text = "Your current executor isn't supported due to missing required capabilities.", Duration = 8, }) end) if displayed then break end task.wait(0.5) end end) print(prefix .. " Unsupported executor: " .. executor) return end local environment = type(getgenv) == "function" and getgenv() if type(environment) ~= "table" then warn(prefix .. " Missing getgenv.") return end local previous = rawget(environment, "YSOneTap") if previous ~= nil then if type(previous) ~= "table" or rawget(previous, "kind") ~= "OneTap" or type(rawget(previous, "stop")) ~= "function" then warn(prefix .. " YSOneTap is occupied by another value.") return end previous.stop() print(prefix .. " Previous instance cleared; rerunning.") end local readUpvalues = debug and debug.getupvalues if type(readUpvalues) ~= "function" then warn(prefix .. " Missing debug.getupvalues.") return end local Players = game:GetService("Players") local CollectionService = game:GetService("CollectionService") local ReplicatedStorage = game:GetService("ReplicatedStorage") local localPlayer = Players.LocalPlayer local start = localPlayer.PlayerScripts:WaitForChild("Start", 8) local gameModules = start and start:WaitForChild("Game", 8) local weaponModule = gameModules and gameModules:WaitForChild("WeaponClient", 8) if not weaponModule then warn(prefix .. " WeaponClient was not found in PlayerScripts.Start.Game.") return end local weaponClient = require(weaponModule) local weaponManager = require(ReplicatedStorage.Common.Managers.WeaponManager) local maxDistance = weaponManager.Constants.DEFAULT_MAX_DISTANCE local viewmodelModule = gameModules:FindFirstChild("ViewmodelClient") local viewmodelClient = viewmodelModule and require(viewmodelModule) local originalViewmodelShoot = viewmodelClient and viewmodelClient.shoot local function findWeaponSpring() if type(originalViewmodelShoot) ~= "function" then return nil end local weaponSpring for _, value in pairs(readUpvalues(originalViewmodelShoot)) do if type(value) == "table" and rawget(value, "Mass") == 5 and rawget(value, "Force") == 100 and rawget(value, "Damping") == 15 and rawget(value, "Speed") == 3 and type(rawget(value, "shove")) == "function" then if weaponSpring then return nil end weaponSpring = value end end return weaponSpring end local weaponSpring = findWeaponSpring() local originalWeaponKick = weaponSpring and weaponSpring.shove local function findShotPacket() local fireShot for _, value in pairs(readUpvalues(weaponClient.fire)) do if type(value) == "function" then if fireShot then return nil end fireShot = value end end if not fireShot then return nil end local packet for _, value in pairs(readUpvalues(fireShot)) do if type(value) == "table" and type(rawget(value, "send")) == "function" and type(rawget(value, "reader")) == "function" and type(rawget(value, "listen")) == "function" then if packet then return nil end packet = value end end return packet end local shotPacket local untilTime = os.clock() + 8 repeat shotPacket = findShotPacket() if shotPacket then break end task.wait(0.15) until os.clock() >= untilTime if not shotPacket then warn(prefix .. " WeaponClient's active shot sender wasn't found.") return end local params = RaycastParams.new() params.FilterType = Enum.RaycastFilterType.Exclude local offsets = { Vector3.new(0.36, 0, 0), Vector3.new(-0.36, 0, 0), Vector3.new(0, 0.36, 0), Vector3.new(0, -0.36, 0), } local function chooseHit(origin, direction) local exclusions = {} if localPlayer.Character then exclusions[#exclusions + 1] = localPlayer.Character end local effects = workspace:FindFirstChild("Effects") if effects then exclusions[#exclusions + 1] = effects end params.FilterDescendantsInstances = exclusions local candidates = {} local visited = {} local function consider(character) if not character or not character:IsA("Model") or visited[character] or character == localPlayer.Character or not character:IsDescendantOf(workspace) then return end visited[character] = true local owner = Players:GetPlayerFromCharacter(character) if owner and localPlayer.Team ~= nil and owner.Team == localPlayer.Team and not localPlayer.Neutral and not owner.Neutral then return end if owner and character:GetAttribute("deployed") == false then return end local humanoid = character:FindFirstChildOfClass("Humanoid") if not humanoid or humanoid.Health <= 0 or character:FindFirstChild("ForceField") then return end local head = character:FindFirstChild("Hitbox_Head") or character:FindFirstChild("Head") local torso = character:FindFirstChild("Torso") or character:FindFirstChild("UpperTorso") local rootPart = character:FindFirstChild("HumanoidRootPart") local aimPart = head or torso or rootPart if not aimPart or not aimPart:IsA("BasePart") then return end local towards = aimPart.Position - origin local distance = towards.Magnitude if distance <= 0 or distance > maxDistance then return end local parts = {} local used = {} local function include(part) if part and part:IsA("BasePart") and not used[part] then used[part] = true parts[#parts + 1] = part end end include(head) include(torso) include(rootPart) include(character:FindFirstChild("LowerTorso")) include(character:FindFirstChild("Left Arm") or character:FindFirstChild("LeftUpperArm")) include(character:FindFirstChild("Right Arm") or character:FindFirstChild("RightUpperArm")) local exposedParts = {} if head and head:IsA("BasePart") then exposedParts[#exposedParts + 1] = head end if torso and torso:IsA("BasePart") and torso ~= head then exposedParts[#exposedParts + 1] = torso end candidates[#candidates + 1] = { character = character, parts = parts, exposedParts = exposedParts, distance = distance, alignment = towards.Unit:Dot(direction), } end for _, character in CollectionService:GetTagged("Character") do consider(character) end for _, player in Players:GetPlayers() do if player ~= localPlayer and player.Character then consider(player.Character) end end if #candidates == 0 then return nil end table.sort(candidates, function(a, b) if a.alignment == b.alignment then return a.distance < b.distance end return a.alignment > b.alignment end) local function checkPoint(candidate, point) local towards = point - origin local distance = towards.Magnitude if distance <= 0 or distance > maxDistance then return end local hit = workspace:Raycast(origin, towards, params) if not hit or not hit.Instance:IsDescendantOf(candidate.character) then return end local impactPart = hit.Instance local parent = impactPart.Parent if parent and (parent:IsA("Hat") or parent:IsA("Accessory") and (parent.AccessoryType == Enum.AccessoryType.Hat or parent.AccessoryType == Enum.AccessoryType.Face)) then impactPart = candidate.character:FindFirstChild("Hitbox_Head") or candidate.character:FindFirstChild("Head") or impactPart end return candidate.character, impactPart, hit.Position, towards.Unit end -- Prefer the closest-aligned exposed opponent; there is no angular cutoff. for _, candidate in candidates do for _, part in candidate.parts do local character, hitPart, position, towards = checkPoint(candidate, part.Position) if character then return character, hitPart, position, towards end end -- Part centres can be covered even when an edge remains exposed. for _, part in candidate.exposedParts do for _, offset in offsets do local point = part.CFrame:PointToWorldSpace(Vector3.new( part.Size.X * offset.X, part.Size.Y * offset.Y, 0)) local character, hitPart, position, towards = checkPoint(candidate, point) if character then return character, hitPart, position, towards end end end end return nil end local originalSend = shotPacket.send local originalGetBullets = weaponClient.getBullets local originalDecreaseBullets = weaponClient.decreaseBullets local savedFireRates = {} local fireRate = 1000 local running = { kind = "OneTap", active = true, } function running.stop() if not running.active then return end running.active = false if shotPacket.send == running.send then shotPacket.send = originalSend end if weaponClient.getBullets == running.getBullets then weaponClient.getBullets = originalGetBullets end if weaponClient.decreaseBullets == running.decreaseBullets then weaponClient.decreaseBullets = originalDecreaseBullets end if viewmodelClient and viewmodelClient.shoot == running.shoot then viewmodelClient.shoot = originalViewmodelShoot end if weaponSpring and weaponSpring.shove == running.suppressKick then weaponSpring.shove = originalWeaponKick end for weaponData, originalRate in pairs(savedFireRates) do if rawget(weaponData, "firerate") == fireRate then weaponData.firerate = originalRate.value end end if rawget(environment, "YSOneTap") == running then rawset(environment, "YSOneTap", nil) end end function running.send(shot) if running.active and type(shot) == "table" and shot.weaponType ~= "Knife" and typeof(shot.origin) == "Vector3" and typeof(shot.direction) == "Vector3" then local character, part, position, direction = chooseHit(shot.origin, shot.direction) if character then shot.hitResult = character shot.hitPart = part shot.position = position shot.direction = direction end end return originalSend(shot) end function running.getBullets() local character = localPlayer.Character if character then local slot = character:GetAttribute("currentWeapon") if slot == nil or slot == "Primary" or slot == "Secondary" then return weaponClient.getMaxBulletsForCurrentWeapon() end end return originalGetBullets() end function running.decreaseBullets() local character = localPlayer.Character if character and character:GetAttribute("currentWeapon") == "Knife" then originalDecreaseBullets() end end function running.shoot(isKnife) originalViewmodelShoot(running.active or isKnife) end function running.suppressKick(...) if not running.active then originalWeaponKick(...) end end weaponClient.getBullets = running.getBullets weaponClient.decreaseBullets = running.decreaseBullets shotPacket.send = running.send rawset(environment, "YSOneTap", running) if weaponSpring then weaponSpring.shove = running.suppressKick viewmodelClient.shoot = running.shoot else warn(prefix .. " No Recoil unavailable: weapon spring not found.") end for _, weaponData in pairs(weaponManager.getWeapons()) do if type(weaponData) == "table" then savedFireRates[weaponData] = { value = rawget(weaponData, "firerate") } weaponData.firerate = fireRate end end if weaponClient.getState() == "reloading" then weaponClient.cancelReload() end print(prefix .. " Running - [YS OneTap] (" .. executor .. ").") print(prefix .. " Made by https://rscripts.net/@Yamis_Scripts")