Run it
Copy the script and paste it into your executor.
().AimSens = /;
().LookSens = /;
().PreAimDis = ;
().KnifeOutDis = ;
().ReloadDis = ;
().RecalDis = ;
PathfindingService = :();
Players = :();
ReplicatedStorage = :();
RunService = :();
TweenService = :();
VIM = :();
UserInputService = :();
Plr = Players.LocalPlayer;
Char = Plr.Character Plr.CharacterAdded:();
Head = Char:(, );
Root = Char:(, );
Humanoid = Char:(, );
MainMenu = Plr.PlayerGui:(, );
PlayButton = MainMenu:(, ).Play;
MainHUD = Plr.PlayerGui:(, );
TeamSelection = MainHUD:(, );
Events = ReplicatedStorage:(, );
buttonColors = {, , , };
i,v ((:().Error)) v:()
(:(, ))()
currpath = PathfindingService:({[] = });
Camera = .CurrentCamera;
Mouse = Plr:();
Map = :(, )
Spawns = :(, ):(, )
RayIgnore = :(, )
MapIgnore = Map:(, )
CurrentEquipped = ;
ClosestPlr;
IsAiming;
InitialPosition;
WalkToObject;
()
nearestPlayer, nearestDistance
_, player (Players:())
player.TeamColor ~= Plr.TeamColor player ~= Plr
character = player.Character
character
nroot = character:()
nroot player:().Alive.Value
character.Humanoid (character.Humanoid:() ~= .HumanoidStateType.Climbing character.Humanoid:() ~= .HumanoidStateType.Freefall)
distance = Plr:(nroot.Position)
(nearestDistance distance >= nearestDistance)
nearestDistance = distance
nearestPlayer = player
nearestPlayer
(target, ignorelist)
obsParts = Camera:({target}, ignorelist);
#obsParts ==
;
;
()
aimpart = ;
ClosestPlr ClosestPlr.Character
i,v (ClosestPlr.Character:())
v v:()
(v.Position,{Camera,Char,ClosestPlr.Character,RayIgnore,MapIgnore})
aimpart = v;
;
aimpart
IsAiming = ;
tcamcframe = Camera.CFrame;
i = , , AimSens
aimpart ;
(Head.Position.Y + aimpart.Position.Y) < ;
Camera.CFrame = tcamcframe:(.(Camera.CFrame.p, aimpart.Position), i)
.()
VIM:(Mouse.X, Mouse.Y, , , , )
.()
VIM:(Mouse.X, Mouse.Y, , , , )
IsAiming = ;
()
MainMenu.Enabled
(PlayButton.MouseButton1Down);
.() TeamSelection.Visible;
TeamSelection:().Visible
i, teamButton (TeamSelection:():())
.(buttonColors, teamButton.Name) teamButton.lock.Visible
(teamButton.MouseButton1Down);
;
TeamSelection:().Visible
(TeamSelection:().FFA.MouseButton1Down);
WalkToObject = ()
ClosestPlr ClosestPlr.Character
CRoot = ClosestPlr.Character:()
CRoot
InitialPosition = CRoot.Position;
success, errorMessage = (()
currpath:(Root.Position, CRoot.Position)
)
success currpath.Status == .PathStatus.Success
waypoints = currpath:();
i, wap (waypoints)
i ==
ClosestPlr ClosestPlr.Character ClosestPlr ~= () ClosestPlr:().Alive.Value Plr:().Alive.Value
ClosestPlr = ;
;
(InitialPosition - CRoot.Position).Magnitude > RecalDis
();
;
wap.Action == .PathWaypointAction.Jump Humanoid Humanoid.Jump ==
Humanoid:(.HumanoidStateType.Jumping)
.(()
primary = ClosestPlr.Character.PrimaryPart.Position;
studs = Plr:(primary)
tcamcframe = Camera.CFrame;
i = , , LookSens
IsAiming ;
primary studs
.(studs + ) < PreAimDis
ClosestPlr ClosestPlr.Character
CChar = ClosestPlr.Character;
Char:() CChar CChar:()
MiddleAim = (.(wap.Position.X,Char.Head.Position.Y,wap.Position.Z) + .(CChar.Head.Position.X,CChar.Head.Position.Y,CChar.Head.Position.Z))/;
Camera.CFrame = tcamcframe:(.(Camera.CFrame.p, MiddleAim), i);
mixedaim = (Camera.CFrame.p.Y + Char.Head.Position.Y)/;
Camera.CFrame = tcamcframe:(.(Camera.CFrame.p, .(wap.Position.X,mixedaim,wap.Position.Z)), i);
.()
)
.(()
primary = ClosestPlr.Character.PrimaryPart.Position;
studs = Plr:(primary)
primary studs
arms = Camera:();
arms
arms = arms:();
.(studs + ) > KnifeOutDis (primary, {Camera,Char,ClosestPlr.Character,RayIgnore,MapIgnore})
arms.Value ~= CurrentEquipped ==
VIM:(, .KeyCode.Q, , );
CurrentEquipped = ;
arms.Value == CurrentEquipped ~=
VIM:(, .KeyCode.Q, , );
CurrentEquipped = ;
)
Humanoid
Humanoid:(wap.Position);
Humanoid.MoveToFinished:();
();
();
()
ClosestPlr = ();
ClosestPlr ClosestPlr.Character ClosestPlr.Character:()
Humanoid.WalkSpeed > Plr:().Alive.Value ClosestPlr:().Alive.Value
studs = Plr:(ClosestPlr.Character.PrimaryPart.Position)
(ClosestPlr.Character.Head, ClosestPlr.Name, , .(, , ), .(studs + ));
.(studs + ) > ReloadDis (ClosestPlr.Character.HumanoidRootPart.Position, {Camera,Char,ClosestPlr.Character,RayIgnore,MapIgnore})
VIM:(, .KeyCode.R, , )
(ClosestPlr.Character.HumanoidRootPart);
.(()
.()
();
)
.(()
.()
(ClosestPlr == ClosestPlr ~= ())
();
();
)
.(()
.()
ClosestPlr ~= Camera
Plr:().Alive.Value Humanoid.WalkSpeed >
();
)
stuckamt = ;
.(()
.()
Humanoid
Humanoid.MoveDirection.Magnitude ==
stuckamt ==
Humanoid:(.HumanoidStateType.Jumping)
Humanoid:(.HumanoidStateType.Jumping)
();
stuckamt = ;
stuckamt >=
();
();
();
stuckamt = ;
)Loads code from the internet. It downloads more code when it runs (loadstring + HttpGet), which can change after it was posted. From: raw.githubusercontent.com.
The main limitations/issues of this bot currently: Can't do the Free For All gamemodes Can't find players in the air / on roofs (as it's unable to calculate paths to them) Sometimes bugs out and sits there (If it can't find anyone it just sits there as well) Sometimes doesn't shoot like its supposed to (I assume this has something to do with the IsVisible check) Sometimes it just doesn't run at all (lmao) and you have to rerun it. The bot has some aim jitters here and there (I believe it's due to the waypoints) It can't knife people yet, it will try to chase people but if it ever knife killed someone it'd be a miracle. With all of that being said, this isn't perfect. I will say it does seem to do better in other FPS games that don't have so much variety. I tested it on several other FPS games and it did just fine really. It can be easily ported to other FPS games with just some simple editing and you can have a realistic auto farm bot for an FPS. This bot uses ROBLOX's pathfinding service to find paths to the players, it also aims and shoots at players. It has stuck detection (needs to be better), auto reload, swap to knife for faster walking, and pre-aiming. You can check out th

Universal