Hosters FR Swordfighting Bot
Key RequiredUniversal

Hosters FR Swordfighting Bot

Universal ScriptHosterOnCrackHosterOnCrack 184 views 355 executesUpdated Jul 4, 2026
Unrated
00
Lua Script•226 lines (7842 chars)
local RunService = game:GetService("RunService")
local PathfindingService = game:GetService("PathfindingService")
local Players = game:GetService("Players")
local CoreGui = game:GetService("CoreGui")
local Teams = game:GetService("Teams")
local Terrain = workspace.Terrain
local MarketplaceService = game:GetService("MarketplaceService")

repeat task.wait() until game:IsLoaded()

if _G.HosterBot then
    warn("Bot already running.")
    return
end
_G.HosterBot = true

-- Settings
local Settings = { Enabled = false }
local Team = #Teams:GetChildren() > 0 and Players.LocalPlayer.Team or nil

Players.LocalPlayer:GetPropertyChangedSignal("Team"):Connect(function()
    Team = Players.LocalPlayer.Team
end)

-- Core Targets & Character Variables
local Player = Players.LocalPlayer
local Backpack = Player:WaitForChild("Backpack")
local Bot = Player.Character or Player.CharacterAdded:Wait()
local Humanoid = Bot:WaitForChild("Humanoid")
local HumanoidRootPart = Bot:WaitForChild("HumanoidRootPart")

Player.CharacterAdded:Connect(function(c)
    Bot = c
    Humanoid = Bot:WaitForChild("Humanoid")
    HumanoidRootPart = Bot:WaitForChild("HumanoidRootPart")
    Backpack = Player:WaitForChild("Backpack")
end)

-- Raycasting Params
local rayParams = RaycastParams.new()
rayParams.FilterType = Enum.RaycastFilterType.Exclude
rayParams.FilterDescendantsInstances = {Bot}

-- Minimalist Toggle UI
local UI = Instance.new("ScreenGui")
UI.Name = "SimpleBot_UI"
UI.ResetOnSpawn = false
UI.Parent = CoreGui or Player:WaitForChild("PlayerGui")

local ToggleBtn = Instance.new("TextButton")
ToggleBtn.Size = UDim2.new(0, 120, 0, 40)
ToggleBtn.Position = UDim2.new(0, 10, 0, 10)
ToggleBtn.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
ToggleBtn.TextColor3 = Color3.new(1, 1, 1)
ToggleBtn.Font = Enum.Font.SourceSansBold
ToggleBtn.TextSize = 16
ToggleBtn.Text = "Bot: OFF"
ToggleBtn.Parent = UI

local UICorner = Instance.new("UICorner")
UICorner.CornerRadius = UDim.new(0, 8)
UICorner.Parent = ToggleBtn

-- Pathfinding variables
local path = PathfindingService:CreatePath({
    AgentRadius = 2,
    AgentHeight = 5,
    AgentCanJump = true
})
local waypoints = {}
local nextWaypointIndex = 1
local reachedConnection
local PathBlocked = false
local TargetLastPos = nil

local function DisconnectPath()
    if reachedConnection then
        reachedConnection:Disconnect()
        reachedConnection = nil
    end
    waypoints = {}
end

ToggleBtn.MouseButton1Click:Connect(function()
    Settings.Enabled = not Settings.Enabled
    if Settings.Enabled then
        ToggleBtn.Text = "Bot: ON"
        ToggleBtn.BackgroundColor3 = Color3.fromRGB(46, 204, 113)
    else
        ToggleBtn.Text = "Bot: OFF"
        ToggleBtn.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
        DisconnectPath()
        Humanoid.AutoRotate = true
    end
end)

-- Core Target Acquisition
local function GetNearestTarget()
    local nearest, maxDist = nil, math.huge
    for _, v in pairs(workspace:GetChildren()) do
        if v:IsA("Model") and v ~= Bot and not v:FindFirstChildOfClass("ForceField") then
            local hum = v:FindFirstChildOfClass("Humanoid")
            local hrp = v:FindFirstChild("HumanoidRootPart")
            if hum and hum.Health > 0 and hrp and hum.Health ~= math.huge then
                local player = Players:GetPlayerFromCharacter(v)
                if player and Team and player.Team == Team then continue end
                
                local dist = (HumanoidRootPart.Position - hrp.Position).Magnitude
                if dist < maxDist then
                    nearest = v
                    maxDist = dist
                end
            end
        end
    end
    return nearest
end

local function PathfindTo(startPos, goalPos)
    DisconnectPath()
    pcall(function()
        path:ComputeAsync(startPos, goalPos)
        if path.Status == Enum.PathStatus.Success then
            waypoints = path:GetWaypoints()
            nextWaypointIndex = 1
            
            reachedConnection = RunService.Heartbeat:Connect(function()
                if not Settings.Enabled or not waypoints[nextWaypointIndex] then
                    DisconnectPath()
                    return
                end
                
                local wpPos = waypoints[nextWaypointIndex].Position
                Humanoid:MoveTo(wpPos)
                
                if waypoints[nextWaypointIndex].Action == Enum.PathWaypointAction.Jump then
                    Humanoid.Jump = true
                end
                
                if (HumanoidRootPart.Position - wpPos).Magnitude < 2 then
                    nextWaypointIndex += 1
                end
            end)
        end
    end)
end

-- Core Engine Loop
local StrafeTimer = tick()
local StrafeTime = 0.5
local CrossProduct = 1
local StrafeOffset = Vector3.zero

while true do
    RunService.RenderStepped:Wait()
    
    if not Settings.Enabled or not HumanoidRootPart or not Humanoid or Humanoid.Health <= 0 then 
        continue 
    end
    
    local target = GetNearestTarget()
    if target then
        local hrp = target:FindFirstChild("HumanoidRootPart")
        local tool = Bot:FindFirstChildOfClass("Tool")
        
        -- Automatically Equip Tool
        if not tool then
            tool = Backpack:FindFirstChildOfClass("Tool")
            if tool then Humanoid:EquipTool(tool) end
        end
        
        if hrp then
            local diff = (hrp.Position - HumanoidRootPart.Position)
            local dist = diff.Magnitude
            local unit = diff.Unit
            
            -- Keep looking at target (Shiftlock behavior)
            Humanoid.AutoRotate = false
            HumanoidRootPart.CFrame = HumanoidRootPart.CFrame:Lerp(CFrame.new(HumanoidRootPart.Position, HumanoidRootPart.Position + unit * Vector3.new(1,0,1)) * CFrame.Angles(0, math.rad(10), 0), 0.7)
            
            if tool then tool:Activate() end
            if Humanoid.Sit then Humanoid.Jump = true end
            
            -- Visibility Check
            local ray = workspace:Raycast(HumanoidRootPart.Position, unit * dist, rayParams)
            local canSee = not ray or (ray.Instance and ray.Instance:IsDescendantOf(target))
            
            if not canSee then
                -- Target is hidden; fallback to pathfinding
                if not TargetLastPos or (TargetLastPos - hrp.Position).Magnitude > 5 then
                    TargetLastPos = hrp.Position
                    PathfindTo(HumanoidRootPart.Position, hrp.Position)
                end
            else
                -- Line of sight clear; engage combat movement (Strafing / Flanking)
                DisconnectPath()
                TargetLastPos = nil
                
                if tick() - StrafeTimer >= StrafeTime then
                    StrafeTimer = tick()
                    StrafeTime = math.random(4, 9) / 10
                    CrossProduct = (math.random(0, 1) == 1) and 1 or -1
                    StrafeOffset = Vector3.new(math.random(-5, 5), 0, math.random(-5, 5))
                end
                
                if dist > 15 then
                    -- Close the gap directly
                    Humanoid:MoveTo(hrp.Position)
                else
                    -- Flank and weave inside weapon striking distance
                    local side = unit:Cross(Vector3.new(0, 1, 0)) * CrossProduct
                    local combatPos = hrp.Position + (side * 6) + StrafeOffset
                    Humanoid:MoveTo(combatPos)
                    
                    if math.random(1, 40) == 1 then
                        Humanoid.Jump = true
                    end
                end
            end
        end
    else
        -- Idle safely if no target exists
        Humanoid.AutoRotate = true
        DisconnectPath()
    end
end

Features & Information

Literally used Gemini to degrade the full version because why not? It still has basic pathfinding and swordfighting skills so I guess you can't be mad about that. Maybe someday I'll release an actual lite version. Full version is closed source, it is used for my personal use or deploying the official bot accounts.

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts