Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local Players = game:GetService("Players")
- local RunService = game:GetService("RunService")
- local Stats = game:GetService("Stats")
- local Workspace = game:GetService("Workspace")
- local TextChatService = game:GetService("TextChatService")
- local UserInputService = game:GetService("UserInputService")
- local LocalPlayer = Players.LocalPlayer
- local OrionLib = loadstring(game:HttpGet(('https://raw.githubusercontent.com/jensonhirst/Orion/main/source')))()
- local Window = OrionLib:MakeWindow({
- Name = "V1rpShot",
- HidePremium = false,
- SaveConfig = true,
- ConfigFolder = "ChanceScript",
- IntroEnabled = true,
- IntroText = "Chance Aimbot",
- })
- -- ════════════════════════════════════════
- -- STATE
- -- ════════════════════════════════════════
- local aimEnabled = false
- local predMode = "Velocity"
- local predValue = 0.5
- local aimBehavior = "Normal"
- local spinDuration = 0.5
- local msgOnAim = false
- local msgText = ""
- local customAnim = false
- local customAnimID = ""
- local antiBait = true
- local smoothSpeed = 14
- local heightAim = true
- local holdToAim = true
- local aimKey = Enum.KeyCode.Q
- local holdingAimKey = false
- -- ════════════════════════════════════════
- -- KILLER SPEED TABLE
- -- ════════════════════════════════════════
- local killerSpeeds = {
- Slasher = { walk = 9, run = 28 },
- c00lkidd = { walk = 7.75, run = 28 },
- JohnDoe = { walk = 9, run = 27.25 },
- ["1x1x1x1"] = { walk = 8.5, run = 27 },
- Noli = { walk = 7.5, run = 27.5 },
- Guest666 = { walk = 9, run = 27 },
- Nosferatu = { walk = 7.25, run = 27.5 },
- Doombringer = { walk = 8, run = 27 },
- JaneDoe = { walk = 9, run = 27 },
- Builderman = { walk = 8.5, run = 27.5 },
- Dusekkar = { walk = 8, run = 27.5 },
- }
- -- ════════════════════════════════════════
- -- CHARACTER REFS
- -- ════════════════════════════════════════
- local Humanoid, HRP
- local function setChar(char)
- Humanoid = char:WaitForChild("Humanoid")
- HRP = char:WaitForChild("HumanoidRootPart")
- end
- if LocalPlayer.Character then setChar(LocalPlayer.Character) end
- LocalPlayer.CharacterAdded:Connect(setChar)
- -- ════════════════════════════════════════
- -- TARGET SELECTION
- -- ════════════════════════════════════════
- local function getNearest()
- if not HRP then return end
- local folder = Workspace:FindFirstChild("Players")
- folder = folder and folder:FindFirstChild("Killers")
- if not folder then return end
- local closest, dist = nil, math.huge
- for _, m in ipairs(folder:GetChildren()) do
- local r = m:FindFirstChild("HumanoidRootPart")
- local h = m:FindFirstChildOfClass("Humanoid")
- if r and h and h.Health > 0 then
- local d = (r.Position - HRP.Position).Magnitude
- if d < dist then dist = d; closest = r end
- end
- end
- return closest
- end
- -- ════════════════════════════════════════
- -- MOTION TRACKER
- -- ════════════════════════════════════════
- local motionData = {}
- local function getMotion(hrp)
- local now = tick()
- local pos = hrp.Position
- local data = motionData[hrp]
- if not data then
- motionData[hrp] = { lastPos = pos, lastTime = now,
- velocity = Vector3.zero, accel = Vector3.zero }
- return Vector3.zero, Vector3.zero
- end
- local dt = now - data.lastTime
- if dt <= 0 then return data.velocity, data.accel end
- local vel = (pos - data.lastPos) / dt
- local accel = (vel - data.velocity) / dt
- data.lastPos = pos
- data.lastTime = now
- data.accel = accel
- data.velocity = vel
- return vel, accel
- end
- -- ════════════════════════════════════════
- -- PING
- -- ════════════════════════════════════════
- local pingSamples = {}
- local function getPing()
- local ok, stat = pcall(function()
- return Stats.Network.ServerStatsItem["Data Ping"]:GetValue()
- end)
- local raw = (ok and stat or 100) / 1000
- table.insert(pingSamples, raw)
- if #pingSamples > 5 then table.remove(pingSamples, 1) end
- local sum = 0
- for _, v in ipairs(pingSamples) do sum = sum + v end
- return sum / #pingSamples
- end
- -- ════════════════════════════════════════
- -- PREDICTION
- -- ════════════════════════════════════════
- local function predict(hrp)
- local vel, accel = getMotion(hrp)
- local pos = hrp.Position
- local speed = vel.Magnitude
- if antiBait then
- local model = hrp.Parent
- if model and killerSpeeds[model.Name] then
- local maxSpeed = killerSpeeds[model.Name].run + 2
- if speed > maxSpeed then
- vel = vel.Unit * maxSpeed
- speed = maxSpeed
- end
- end
- end
- local ping = getPing()
- local dist = HRP and (hrp.Position - HRP.Position).Magnitude or 0
- local distScale = dist * 0.003
- local lead
- if predMode == "Velocity" then
- lead = predValue + distScale
- elseif predMode == "Ping" then
- lead = ping * predValue + distScale
- elseif predMode == "Look" then
- return pos + hrp.CFrame.LookVector * (speed * predValue)
- elseif predMode == "LookPing" then
- return pos + hrp.CFrame.LookVector * (speed * ping)
- else
- lead = predValue
- end
- if HRP and speed > 1 then
- local toKiller = (hrp.Position - HRP.Position).Unit
- local strafe = math.abs(vel.Unit:Dot(
- Vector3.new(-toKiller.Z, 0, toKiller.X)))
- if strafe > 0.5 then lead = lead + strafe * 0.06 end
- end
- if speed < 0.5 then return pos end
- local accelContrib = accel * lead * lead * 0.5
- local accelMag = accelContrib.Magnitude
- if accelMag > speed * 0.4 then
- accelContrib = accelContrib.Unit * (speed * 0.4)
- end
- return pos + vel * lead + accelContrib
- end
- -- ════════════════════════════════════════
- -- ANIMATION TRIGGERS
- -- ════════════════════════════════════════
- local aiming = false
- local startTime = 0
- local duration = 1.7
- local triggers = {
- ["133607163653602"] = true,
- ["133491532453922"] = true,
- ["131189930305001"] = true,
- ["111384272984267"] = true,
- ["103601716322988"] = true,
- ["76649505662612"] = true,
- }
- local function hookAnimator(char)
- local hum = char:WaitForChild("Humanoid")
- local animator = hum:WaitForChild("Animator")
- animator.AnimationPlayed:Connect(function(track)
- if not aimEnabled or holdToAim then return end
- local id = track.Animation.AnimationId:match("%d+")
- if id and triggers[id] then
- aiming = true
- startTime = tick()
- if msgOnAim and msgText ~= "" then
- local ch = TextChatService.TextChannels.RBXGeneral
- if ch then pcall(ch.SendAsync, ch, msgText) end
- end
- if customAnim and tonumber(customAnimID) then
- local a = Instance.new("Animation")
- a.AnimationId = "rbxassetid://" .. customAnimID
- hum.Animator:LoadAnimation(a):Play()
- end
- end
- end)
- end
- if LocalPlayer.Character then hookAnimator(LocalPlayer.Character) end
- LocalPlayer.CharacterAdded:Connect(hookAnimator)
- -- ════════════════════════════════════════
- -- PC KEYBIND
- -- ════════════════════════════════════════
- UserInputService.InputBegan:Connect(function(input, gpe)
- if gpe then return end
- if holdToAim and input.KeyCode == aimKey then
- holdingAimKey = true
- aiming = true
- startTime = tick()
- end
- end)
- UserInputService.InputEnded:Connect(function(input)
- if holdToAim and input.KeyCode == aimKey then
- holdingAimKey = false
- aiming = false
- end
- end)
- -- ════════════════════════════════════════
- -- RENDER LOOP
- -- ════════════════════════════════════════
- RunService.RenderStepped:Connect(function(dt)
- if not aimEnabled or not HRP then return end
- if holdToAim then
- if not holdingAimKey then return end
- else
- if not aiming then return end
- if tick() - startTime > duration then aiming = false; return end
- end
- local target = getNearest()
- if not target then return end
- local pos = predict(target)
- if not pos then return end
- local aimPos
- if heightAim then
- aimPos = pos
- else
- aimPos = Vector3.new(pos.X, HRP.Position.Y, pos.Z)
- end
- if aimBehavior == "360" then
- local prog = (tick() - startTime) / spinDuration
- if prog < 1 then
- local spunCF = CFrame.new(HRP.Position)
- * CFrame.Angles(0, math.rad(360 * prog), 0)
- HRP.CFrame = spunCF
- return
- end
- end
- local goalCF = CFrame.lookAt(HRP.Position, aimPos)
- local isMoving = HRP.AssemblyLinearVelocity.Magnitude > 0.5
- local speed = isMoving and math.max(smoothSpeed, 20) or smoothSpeed
- local alpha = 1 - math.exp(-speed * dt)
- HRP.CFrame = HRP.CFrame:Lerp(goalCF, alpha)
- end)
- -- ════════════════════════════════════════
- -- UI - CHANCE TAB
- -- ════════════════════════════════════════
- local ChanceTab = Window:MakeTab({
- Name = "Chance",
- Icon = "rbxassetid://4483345998",
- PremiumOnly = false,
- })
- ChanceTab:AddLabel("Aimbot")
- ChanceTab:AddToggle({
- Name = "Enable Aimbot",
- Default = false,
- Callback = function(v) aimEnabled = v end,
- })
- ChanceTab:AddDropdown({
- Name = "Prediction Mode",
- Default = "Velocity",
- Options = { "Velocity", "Ping", "Look", "LookPing" },
- Callback = function(v) predMode = v end,
- })
- ChanceTab:AddTextbox({
- Name = "Prediction Value",
- Default = "0.5",
- TextDisappear = true,
- Callback = function(v)
- local n = tonumber(v)
- if n then predValue = n end
- end,
- })
- ChanceTab:AddSlider({
- Name = "Smooth Speed",
- Min = 1,
- Max = 30,
- Default = 14,
- Color = Color3.fromRGB(255, 255, 255),
- Increment = 1,
- ValueName = "",
- Callback = function(v) smoothSpeed = v end,
- })
- ChanceTab:AddToggle({
- Name = "Height-Aware Aim",
- Default = true,
- Callback = function(v) heightAim = v end,
- })
- ChanceTab:AddDropdown({
- Name = "Aim Behavior",
- Default = "Normal",
- Options = { "Normal", "360" },
- Callback = function(v) aimBehavior = v end,
- })
- ChanceTab:AddTextbox({
- Name = "Spin Duration",
- Default = "0.5",
- TextDisappear = true,
- Callback = function(v)
- local n = tonumber(v)
- if n then spinDuration = n end
- end,
- })
- ChanceTab:AddToggle({
- Name = "Anti Bait",
- Default = true,
- Callback = function(v) antiBait = v end,
- })
- ChanceTab:AddToggle({
- Name = "Message When Aim",
- Default = false,
- Callback = function(v) msgOnAim = v end,
- })
- ChanceTab:AddTextbox({
- Name = "Message Text",
- Default = "",
- TextDisappear = true,
- Callback = function(v) msgText = v end,
- })
- ChanceTab:AddButton({
- Name = "Ping Aim Preset",
- Callback = function()
- aimEnabled = true
- predMode = "Ping"
- predValue = 1.5
- print("[Chance] Preset Applied: Ping mode, value 1.5")
- end,
- })
- ChanceTab:AddButton({
- Name = "Owner's Setting Opinion",
- Callback = function()
- print("[Chance] 0.5 works best for 90-120 ping | Same for ping 1.5 | High ping: 0.4 velocity | Else: 1.3 ping")
- end,
- })
- ChanceTab:AddButton({
- Name = "Tester's Setting Opinion",
- Callback = function()
- print("[Chance] 60 ping: 0.1-0.2 | 120 ping: ~0.5 | 200-300 ping: don't use")
- end,
- })
- -- PC / Input
- ChanceTab:AddLabel("PC / Input")
- ChanceTab:AddToggle({
- Name = "Hold-to-Aim",
- Default = true,
- Callback = function(v) holdToAim = v end,
- })
- ChanceTab:AddDropdown({
- Name = "Aim Key",
- Default = "Q",
- Options = { "Q", "E", "R", "T", "F", "G", "X", "C", "V" },
- Callback = function(v)
- aimKey = Enum.KeyCode[v]
- end,
- })
- -- Misc
- ChanceTab:AddLabel("Misc")
- ChanceTab:AddToggle({
- Name = "Custom Shoot Anim",
- Default = false,
- Callback = function(v) customAnim = v end,
- })
- ChanceTab:AddTextbox({
- Name = "Animation ID",
- Default = "",
- TextDisappear = true,
- Callback = function(v) customAnimID = v end,
- })
- -- ════════════════════════════════════════
- -- UI - CREDITS TAB
- -- ════════════════════════════════════════
- local CreditsTab = Window:MakeTab({
- Name = "Credits",
- Icon = "rbxassetid://4483345998",
- PremiumOnly = false,
- })
- CreditsTab:AddLabel("Script Credits")
- CreditsTab:AddLabel("Credits to eternal.hope_ on Discord for helping test the script!")
- -- ════════════════════════════════════════
- -- INIT
- -- ════════════════════════════════════════
- OrionLib:Init()
Advertisement
Add Comment
Please, Sign In to add comment