
Key Required
Sword Fight Bot For This Follower Game
Lua Script•342 lines (11727 chars)
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local CoreGui = game:GetService("CoreGui")
local LocalPlayer = Players.LocalPlayer
local Character = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait()
local Humanoid = Character:WaitForChild("Humanoid")
local RootPart = Character:WaitForChild("HumanoidRootPart")
-- Update references when character respawns
LocalPlayer.CharacterAdded:Connect(function(newChar)
Character = newChar
Humanoid = newChar:WaitForChild("Humanoid")
RootPart = newChar:WaitForChild("HumanoidRootPart")
end)
-- === CONFIGURABLE SETTINGS ===
local ArenaCenter = workspace["ExeDi's SwordFight Model"].Part.OuterRing.Position
local ArenaRadius = 45 -- Max distance from center to still be considered "in arena"
local AttackRange = 4 -- How close you need to be to start circling/attacking
local ToolAttackRadius = math.random(6, 8) -- Distance for tool auto-attack (randomized a bit)
local BotEnabled = false
local WalkSpeed = 16
local JumpPower = 50
local IdleWanderMode = false
local NextWanderTime = 0
local WanderChancePerFrame = 0.1
-- === UTILITY FUNCTIONS ===
local function GetRandomPointInRing()
local angle = math.random() * math.pi * 2
local distance = math.random() * (ArenaRadius - 5)
return ArenaCenter + Vector3.new(math.cos(angle) * distance, 0, math.sin(angle) * distance)
end
local function MoveTo(pos)
if Humanoid then
Humanoid:MoveTo(pos)
end
end
local function IsInsideArena()
if (RootPart.Position - ArenaCenter).Magnitude > ArenaRadius - 5 then
MoveTo(ArenaCenter)
return false
end
return true
end
local function PlayerHasTool(plr)
if not plr.Character then return false end
return plr.Character:FindFirstChildOfClass("Tool") or plr.Backpack:FindFirstChildOfClass("Tool")
end
-- Returns all valid enemies inside the arena that have a tool equipped/in backpack
local function GetEnemiesInArena()
local enemies = {}
for _, plr in ipairs(Players:GetPlayers()) do
if plr ~= LocalPlayer and plr.Character and plr.Character:FindFirstChild("HumanoidRootPart") then
local hrp = plr.Character.HumanoidRootPart
local hum = plr.Character:FindFirstChild("Humanoid")
if hum and hum.Health > 0
and (hrp.Position - ArenaCenter).Magnitude <= ArenaRadius
and PlayerHasTool(plr) then
table.insert(enemies, plr)
end
end
end
return enemies
end
-- Returns the closest valid enemy
local function GetClosestEnemy()
local closestPlayer = nil
local closestDist = math.huge
for _, plr in ipairs(GetEnemiesInArena()) do
local theirRoot = plr.Character:FindFirstChild("HumanoidRootPart")
local theirHum = plr.Character:FindFirstChild("Humanoid")
if theirRoot and theirHum and theirHum.Health > 0 then
local dist = (theirRoot.Position - RootPart.Position).Magnitude
if dist < closestDist then
closestDist = dist
closestPlayer = plr
end
end
end
return closestPlayer
end
-- === AUTO-ATTACK WITH TOOL (RenderStepped) ===
RunService.RenderStepped:Connect(function()
if not BotEnabled then return end
for _, plr in ipairs(Players:GetPlayers()) do
if plr == LocalPlayer then continue end
local char = plr.Character
if not char or not char:FindFirstChild("Humanoid") or char.Humanoid.Health <= 0 then continue end
local theirRoot = char.HumanoidRootPart
if LocalPlayer:DistanceFromCharacter(theirRoot.Position) > ToolAttackRadius then continue end
if not PlayerHasTool(LocalPlayer) then continue end
local tool = LocalPlayer.Character:FindFirstChildOfClass("Tool")
if tool and tool:FindFirstChild("Handle") then
tool:Activate() -- Swing/activate the tool
for _, part in ipairs(char:GetChildren()) do
if part:IsA("BasePart") then
firetouchinterest(tool.Handle, part, 0)
firetouchinterest(tool.Handle, part, 1)
end
end
end
end
end)
-- === GUI (Simple draggable settings window) ===
local screenGui = Instance.new("ScreenGui", CoreGui)
screenGui.Name = "AurexPVPBotGUI"
screenGui.ResetOnSpawn = false
local mainFrame = Instance.new("Frame", screenGui)
mainFrame.Size = UDim2.new(0, 320, 0, 220)
mainFrame.Position = UDim2.new(0.5, -160, 0.4, -110)
mainFrame.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
mainFrame.ClipsDescendants = true
Instance.new("UICorner", mainFrame).CornerRadius = UDim.new(0, 12)
-- Title bar
local titleBar = Instance.new("Frame", mainFrame)
titleBar.Size = UDim2.new(1, 0, 0, 35)
titleBar.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
local titleLabel = Instance.new("TextLabel", titleBar)
titleLabel.Size = UDim2.new(0.75, 0, 1, 0)
titleLabel.Position = UDim2.new(0, 10, 0, 0)
titleLabel.BackgroundTransparency = 1
titleLabel.Text = "PvP Bot Settings"
titleLabel.TextColor3 = Color3.new(1, 1, 1)
titleLabel.Font = Enum.Font.GothamBold
titleLabel.TextScaled = true
titleLabel.TextXAlignment = Enum.TextXAlignment.Left
local minimizeBtn = Instance.new("TextButton", titleBar)
minimizeBtn.Size = UDim2.new(0.25, 0, 1, 0)
minimizeBtn.Position = UDim2.new(0.75, 0, 0, 0)
minimizeBtn.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
minimizeBtn.Text = "−"
minimizeBtn.TextColor3 = Color3.new(1, 1, 1)
minimizeBtn.Font = Enum.Font.GothamBold
minimizeBtn.TextScaled = true
-- Toggle button (visible when minimized)
local openBtn = Instance.new("TextButton", screenGui)
openBtn.Size = UDim2.new(0, 60, 0, 60)
openBtn.Position = UDim2.new(0, 20, 0, 20)
openBtn.BackgroundColor3 = Color3.fromRGB(35, 35, 35)
openBtn.Text = "PvP"
openBtn.TextColor3 = Color3.new(1, 1, 1)
openBtn.Font = Enum.Font.GothamBold
openBtn.TextScaled = true
openBtn.Visible = false
-- PvP Bot Toggle Button
local toggleBtn = Instance.new("TextButton", mainFrame)
toggleBtn.Size = UDim2.new(0.9, 0, 0, 40)
toggleBtn.Position = UDim2.new(0.05, 0, 0.2, 0)
toggleBtn.BackgroundColor3 = Color3.fromRGB(70, 70, 70)
toggleBtn.TextColor3 = Color3.new(1, 1, 1)
toggleBtn.Text = "PvP Bot: OFF"
toggleBtn.Font = Enum.Font.GothamBold
toggleBtn.TextScaled = true
Instance.new("UICorner", toggleBtn).CornerRadius = UDim.new(0, 8)
toggleBtn.MouseButton1Click:Connect(function()
BotEnabled = not BotEnabled
toggleBtn.Text = BotEnabled and "PvP Bot: ON" or "PvP Bot: OFF"
end)
-- WalkSpeed setting
local wsLabel = Instance.new("TextLabel", mainFrame)
wsLabel.Size = UDim2.new(0.4, 0, 0, 25)
wsLabel.Position = UDim2.new(0.05, 0, 0.5, 0)
wsLabel.BackgroundTransparency = 1
wsLabel.Text = "WalkSpeed:"
wsLabel.TextColor3 = Color3.new(1, 1, 1)
wsLabel.TextXAlignment = Enum.TextXAlignment.Left
wsLabel.Font = Enum.Font.Gotham
wsLabel.TextScaled = true
local wsBox = Instance.new("TextBox", mainFrame)
wsBox.Size = UDim2.new(0.5, 0, 0, 25)
wsBox.Position = UDim2.new(0.45, 0, 0.5, 0)
wsBox.BackgroundColor3 = Color3.fromRGB(70, 70, 70)
wsBox.TextColor3 = Color3.new(1, 1, 1)
wsBox.PlaceholderText = tostring(WalkSpeed)
wsBox.ClearTextOnFocus = false
wsBox.TextScaled = true
wsBox.FocusLost:Connect(function()
local num = tonumber(wsBox.Text)
if num then
WalkSpeed = num
Humanoid.WalkSpeed = num
end
end)
-- JumpPower setting
local jpLabel = Instance.new("TextLabel", mainFrame)
jpLabel.Size = UDim2.new(0.4, 0, 0, 25)
jpLabel.Position = UDim2.new(0.05, 0, 0.65, 0)
jpLabel.BackgroundTransparency = 1
jpLabel.Text = "JumpPower:"
jpLabel.TextColor3 = Color3.new(1, 1, 1)
jpLabel.TextXAlignment = Enum.TextXAlignment.Left
jpLabel.Font = Enum.Font.Gotham
jpLabel.TextScaled = true
local jpBox = Instance.new("TextBox", mainFrame)
jpBox.Size = UDim2.new(0.5, 0, 0, 25)
jpBox.Position = UDim2.new(0.45, 0, 0.65, 0)
jpBox.BackgroundColor3 = Color3.fromRGB(70, 70, 70)
jpBox.TextColor3 = Color3.new(1, 1, 1)
jpBox.PlaceholderText = tostring(JumpPower)
jpBox.ClearTextOnFocus = false
jpBox.TextScaled = true
jpBox.FocusLost:Connect(function()
local num = tonumber(jpBox.Text)
if num then
JumpPower = num
Humanoid.JumpPower = num
end
end)
-- Minimize / Restore logic
minimizeBtn.MouseButton1Click:Connect(function()
mainFrame.Visible = false
openBtn.Visible = true
end)
openBtn.MouseButton1Click:Connect(function()
mainFrame.Visible = true
openBtn.Visible = false
end)
-- Draggable window
local dragging = false
local dragInput, mouseStart, frameStart
titleBar.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
dragging = true
mouseStart = input.Position
frameStart = mainFrame.Position
input.Changed:Connect(function()
if input.UserInputState == Enum.UserInputState.End then
dragging = false
end
end)
end
end)
titleBar.InputChanged:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseMovement then
dragInput = input
end
end)
UserInputService.InputChanged:Connect(function(input)
if input == dragInput and dragging then
local delta = input.Position - mouseStart
mainFrame.Position = UDim2.new(
frameStart.X.Scale,
frameStart.X.Offset + delta.X,
frameStart.Y.Scale,
frameStart.Y.Offset + delta.Y
)
end
end)
-- === MAIN BOT LOGIC (Heartbeat) ===
RunService.Heartbeat:Connect(function()
if not BotEnabled then return end
if not IsInsideArena() then return end
local target = GetClosestEnemy()
if target then
IdleWanderMode = false
local targetRoot = target.Character.HumanoidRootPart
if (targetRoot.Position - RootPart.Position).Magnitude > AttackRange then
-- Walk straight to them if too far
MoveTo(targetRoot.Position)
else
-- Circle around them while staying very close
local offset = Vector3.new(math.sin(tick() * 2) * 2, 0, math.cos(tick() * 2) * 2)
MoveTo(targetRoot.Position + offset)
end
-- Random jumps for evasion / style
if math.random(1, 40) == 1 then
Humanoid.Jump = true
end
else
-- No target found
if not IdleWanderMode then
IdleWanderMode = true
NextWanderTime = tick() + math.random(5, 10)
MoveTo(GetRandomPointInRing())
elseif tick() < NextWanderTime then
-- Occasionally stop or change direction while waiting
if math.random() < WanderChancePerFrame then
Humanoid:MoveTo(RootPart.Position) -- briefly stop
end
if math.random() < 0.02 then
MoveTo(GetRandomPointInRing())
end
else
-- Return to center after idle timeout
IdleWanderMode = false
MoveTo(ArenaCenter)
end
end
end)
-- Watermark (original script had this)
local watermark = Instance.new("TextLabel", CoreGui)
watermark.Size = UDim2.new(0, 300, 0, 30)
watermark.Position = UDim2.new(0.5, -150, 0, 10)
watermark.BackgroundTransparency = 0.5
watermark.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
watermark.Text = "I hate black guys so muchh"
watermark.TextColor3 = Color3.new(1, 1, 1)
watermark.Font = Enum.Font.GothamBold
watermark.TextScaled = true
watermark.TextStrokeTransparency = 0Features & Information
• Just a lame sword fight bot which kind of works and it's better to act fair instead of using reach and end up getting banned
• This Follower Games Works well and gives you followers.
Best way to earn follower is to make a private server which actually cost no robux and just kill your alt account.

PLS MAKE THIS UNIVERSAL
@imsomeguyidkman99 dude this is open source you can do it by yourself or uh the chatgpt.
*
It isn't letting me join