Pastebin

Paste #34084: sf

< previous paste - next paste>

Pasted by sf

Download View as text

-- Constants for easy adjustment
local AVOIDANCE_DISTANCE_GEAR = 7    -- Safe distance when enemy has gear
local AVOIDANCE_DISTANCE_NO_GEAR = 5 -- Safe distance when no gear
local ATTACK_DISTANCE = 20           -- Distance to activate tool
local DODGE_DISTANCE = 4             -- Distance to dodge when enemy attacks
local STRAFE_OFFSET = 3              -- Strafing distance when close
local STRAFE_SWITCH_FRAMES = 30      -- Frames before switching strafe direction

-- Global variables (unchanged where specified)
_G.x = nil  -- Target, do not change
_G.e = nil
_G.rage = 0
_G.y = 0    -- Combat mode toggle
_G.pos = nil
local player = game.Players.LocalPlayer

print("h:loaded (  :")

-- Grip configurations
local Grips = {
    Up = CFrame.new(0, 0, -1.70000005, 0, 0, 1, 1, 0, 0, 0, 1, 0),
    Out = CFrame.new(0, 0, -1.70000005, 0, 1, 0, 1, -0, 0, 0, 0, -1)
}

-- Find the closest enemy with a humanoid
local function findClosestHumanoidRootPart()
    local closestRootPart = nil
    local closestDistance = math.huge
    local localPlayerPosition = player.Character and player.Character:FindFirstChild("HumanoidRootPart") and player.Character.HumanoidRootPart.Position
    if not localPlayerPosition then return nil end

    for _, part in pairs(workspace:GetDescendants()) do
        if part:IsA("BasePart") and part.Name == "HumanoidRootPart" and part.Parent ~= player.Character then
            local humanoid = part.Parent:FindFirstChild("Humanoid")
            if humanoid and humanoid.Health > 0 then
                local distance = (part.Position - localPlayerPosition).Magnitude
                if distance < closestDistance then
                    closestDistance = distance
                    closestRootPart = part.Parent
                end
            end
        end
    end
    return closestRootPart
end

-- Auto-targeting system
local function autoTarget()
    local closestRootPart = findClosestHumanoidRootPart()
    if not closestRootPart then _G.x = nil return end

    if _G.x and (not _G.x:FindFirstChild("Humanoid") or _G.x.Humanoid.Health <= 0) then
        _G.x = nil
    end

    if _G.x then
        local currentDist = (_G.x.HumanoidRootPart.Position - player.Character.HumanoidRootPart.Position).Magnitude
        local closestDist = (closestRootPart.HumanoidRootPart.Position - player.Character.HumanoidRootPart.Position).Magnitude
        if closestRootPart ~= _G.x and closestDist < currentDist then
            _G.x = closestRootPart
            print("Switched to closer target: " .. _G.x.Name)
            game:GetService("StarterGui"):SetCore("ChatMakeSystemMessage", {
                Text = "Switched target to: " .. _G.x.Name,
                Color = Color3.fromRGB(0, 255, 255),
                Font = Enum.Font.SourceSansBold,
                TextSize = 18
            })
        end
    else
        _G.x = closestRootPart
        if _G.x then
            print("Auto-targeting: " .. _G.x.Name)
            game:GetService("StarterGui"):SetCore("ChatMakeSystemMessage", {
                Text = "Auto-targeting: " .. _G.x.Name,
                Color = Color3.fromRGB(0, 255, 255),
                Font = Enum.Font.SourceSansBold,
                TextSize = 18
            })
        end
    end
end

-- Check if enemy is holding a tool in their right hand
local function isHoldingGearInRightHand(character)
    return character and character:FindFirstChildOfClass("Tool") ~= nil
end

-- Detect if enemy is attacking (sword swing)
local function isEnemyAttacking(enemy)
    local tool = enemy and enemy:FindFirstChildOfClass("Tool")
    if tool then
        local handle = tool:FindFirstChild("Handle")
        if handle and handle.Velocity.Magnitude > 10 then -- Threshold for swing detection
            return true
        end
    end
    return false
end

-- Calculate optimal attack position (left side of enemy)
local function getOptimalAttackPosition(target)
    if not target or not target:FindFirstChild("HumanoidRootPart") then return Vector3.new(0, 0, 0) end
    local targetRoot = target.HumanoidRootPart
    local basePosition = targetRoot.Position
    if isHoldingGearInRightHand(target) then
        return basePosition + targetRoot.CFrame.RightVector * -7 + targetRoot.CFrame.LookVector * -3
    else
        return basePosition + targetRoot.CFrame.RightVector * -4 + targetRoot.CFrame.LookVector * -2
    end
end

-- Setup BodyGyro and main combat loop
delay(5, function()
    local bg = Instance.new("BodyGyro", game.ReplicatedStorage)
    bg.D = 1
    bg.P = 30000
    bg.MaxTorque = Vector3.new(400000000, 400000000, 400000000)

    -- Strafing variables moved outside RenderStepped for persistence
    local strafeCounter = 0
    local strafeDirection = STRAFE_OFFSET

    game:GetService("RunService").RenderStepped:Connect(function()
        if not player.Character or player.Character.Humanoid.Health <= 0 then
            bg.Parent = game.ReplicatedStorage
            return
        end

        if _G.y == 1 and _G.x and _G.x:FindFirstChild("HumanoidRootPart") and _G.x.Humanoid.Health > 0 then
            bg.Parent = player.Character.HumanoidRootPart
            local playerRoot = player.Character.HumanoidRootPart
            local targetRoot = _G.x.HumanoidRootPart

            -- Orientation
            local torso = playerRoot.CFrame.p + playerRoot.CFrame.LookVector * 1 + playerRoot.CFrame.RightVector * 1
            local torso2 = targetRoot.Position + targetRoot.Velocity / 10
            bg.CFrame = CFrame.new(torso - Vector3.new(0, torso.y, 0), torso2 - Vector3.new(0, torso2.y, 0))

            -- Base position
            local optimalPos = getOptimalAttackPosition(_G.x)
            _G.pos = optimalPos + playerRoot.CFrame.RightVector * STRAFE_OFFSET

            -- Adjust position based on enemy movement
            if targetRoot.Velocity.Magnitude > 5 then
                if isHoldingGearInRightHand(_G.x) then
                    _G.pos = optimalPos + targetRoot.CFrame.RightVector * -3 + targetRoot.CFrame.LookVector * -2 - targetRoot.Velocity / 2.5
                else
                    _G.pos = targetRoot.Position + targetRoot.CFrame.RightVector * -2 + targetRoot.CFrame.LookVector * -1 - targetRoot.Velocity / 3
                end
            end

            -- Strafing when close
            local distanceToTarget = (targetRoot.Position - playerRoot.Position).Magnitude
            local isClose = distanceToTarget <= 10
            if isClose then
                _G.pos = targetRoot.Position + targetRoot.CFrame.RightVector * -3 + targetRoot.CFrame.LookVector * -1 + playerRoot.CFrame.RightVector * strafeDirection
                strafeCounter = strafeCounter + 1
                if strafeCounter >= STRAFE_SWITCH_FRAMES then
                    strafeDirection = -strafeDirection
                    strafeCounter = 0
                end
            end

            -- Avoidance logic
            local avoidancePos = targetRoot.Position
            if isHoldingGearInRightHand(_G.x) then
                local tool = _G.x:FindFirstChildOfClass("Tool")
                if tool and tool:FindFirstChild("Handle") then
                    avoidancePos = tool.Handle.Position
                elseif _G.x:FindFirstChild("Right Arm") then
                    avoidancePos = _G.x["Right Arm"].Position
                end
            elseif _G.x:FindFirstChild("Right Arm") then
                avoidancePos = _G.x["Right Arm"].Position
            end

            local safeDistance = isHoldingGearInRightHand(_G.x) and AVOIDANCE_DISTANCE_GEAR or AVOIDANCE_DISTANCE_NO_GEAR
            if isEnemyAttacking(_G.x) then
                safeDistance = safeDistance + 3 -- Increase distance during attack
            end

            local vectorToAvoid = avoidancePos - _G.pos
            local distanceToAvoid = vectorToAvoid.Magnitude
            if distanceToAvoid < safeDistance then
                local directionAway = (_G.pos - avoidancePos).Unit
                _G.pos = _G.pos + directionAway * (safeDistance - distanceToAvoid)
            end

            -- Enhanced dodge: move diagonally (backward and to the side)
            local vectorToPlayer = (playerRoot.Position - targetRoot.Position).Unit
            local enemyLookVector = targetRoot.CFrame.LookVector
            if enemyLookVector:Dot(vectorToPlayer) > 0.8 and isEnemyAttacking(_G.x) then
                local dodgeDirection = (-targetRoot.CFrame.LookVector + -targetRoot.CFrame.RightVector).Unit
                _G.pos = _G.pos + dodgeDirection * DODGE_DISTANCE
            end

            -- Jump if enemy is above
            if targetRoot.Position.y - 0.5 > playerRoot.Position.y then
                delay(0, function() player.Character.Humanoid.Jump = true end)
            end

            -- Attack if in range
            if distanceToTarget <= ATTACK_DISTANCE then
                local tool = player.Character:FindFirstChildOfClass("Tool")
                if tool then tool:Activate() end
            end

            player.Character.Humanoid:MoveTo(_G.pos)
        else
            bg.Parent = game.ReplicatedStorage
            _G.x = nil
        end
    end)
end)

-- Input handling
game:GetService("UserInputService").InputBegan:Connect(function(key)
    if key.KeyCode == Enum.KeyCode.R then
        _G.y = _G.y == 1 and 0 or 1
        print(_G.y == 1 and "On y" or "Off y")
    elseif key.KeyCode == Enum.KeyCode.T then
        _G.rage = _G.rage == 0 and 1 or 0
    end
end)

-- Heartbeat for auto-targeting
game:GetService("RunService").Heartbeat:Connect(function()
    if _G.y == 1 and _G.rage == 0 then
        autoTarget()
    end
end)

-- Rage mode
while true do
    wait(0)
    if _G.rage == 1 and player.Character and player.Character:FindFirstChild("HumanoidRootPart") then
        local point1 = player.Character.HumanoidRootPart.Position + Vector3.new(-40, -40, -40)
        local point2 = player.Character.HumanoidRootPart.Position + Vector3.new(40, 40, 40)
        local region = Region3.new(point1, point2)
        local parts = workspace:FindPartsInRegion3(region, player.Character, math.huge)
        for _, v in pairs(parts) do
            if v.Parent:FindFirstChild("Humanoid") and v.Parent.Humanoid.Health > 0 then
                print(v.Name)
                _G.x = v.Parent
                wait(0.5)
                break
            end
        end
    end
end

New Paste


Do not write anything in this field if you're a human.

Go to most recent paste.