Sword AI REVAMPED
Key RequiredUniversal

Sword AI REVAMPED

Universal Scriptmxthqusmxthqus 33.7K views 81 executesUpdated Aug 23, 2022
Unrated
00
Lua Script•296 lines (8304 chars)
local char = game:GetService("Players").LocalPlayer.Character

function isthere(folder)
   local a ={}
for i,v in pairs(workspace:GetChildren()) do
   if v:IsA("Folder") and v.Name == folder then
       table.insert(a, v)
       end
end
if#a==0 then
   return false
   else
       return true
       end
end

local Filter1
if isthere("Filter") == false then
  local Filter = Instance.new("Folder", workspace)
  Filter.Name = "Filter"
  Filter1 = Filter
else
  Filter1 = workspace:WaitForChild("Filter")
end

local Map1
if isthere("Map") == false then
  local Map = Instance.new("Folder", workspace)
  Map.Name = "Map"
  Map1 = Map
else
  Map1 = workspace:WaitForChild("Map")
end

local ActivePlayers1
if isthere("ActivePlayers") == false then
  local ActivePlayers = Instance.new("Folder", workspace)
  ActivePlayers.Name = "ActivePlayers"
  ActivePlayers1 = ActivePlayers
else
  ActivePlayers1 = workspace:WaitForChild("ActivePlayers")
end



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)
};

-------- coroutine ---
coroutine.wrap(function()

while task.wait(1) do
for i,v in pairs(game:GetService("Workspace"):GetDescendants()) do
    if v:IsA("Humanoid") and v.Parent:IsA("Model") then
          v.Parent.Parent = workspace.ActivePlayers      
   end
 end
end

end)()



-----------

--------- FUNCTIONS -------------------

function FindBestAngle(p1, p2, p3)
local v1 = RaycastParams.new();
v1.FilterType = Enum.RaycastFilterType.Blacklist;
v1.FilterDescendantsInstances = { p1, workspace.Filter, p3, table.unpack(p2.Humanoid:GetAccessories()), workspace.Map };
local v2 = {};
table.insert(v2, { workspace:Raycast(p1["Right Arm"].Position, p1.PrimaryPart.CFrame.LookVector * 10, v1), 0 });
table.insert(v2, { workspace:Raycast(p1["Right Arm"].Position, (p1.PrimaryPart.CFrame * CFrame.Angles(0, -0.017453292519943295, 0)).LookVector.Unit * 10, v1), -1 });
table.insert(v2, { workspace:Raycast(p1["Right Arm"].Position, (p1.PrimaryPart.CFrame * CFrame.Angles(0, 0.017453292519943295, 0)).LookVector.Unit * 10, v1), 1 });
table.insert(v2, { workspace:Raycast(p1["Right Arm"].Position, (p1.PrimaryPart.CFrame * CFrame.Angles(0, 0.03490658503988659, 0)).LookVector.Unit * 10, v1), 2 });
table.insert(v2, { workspace:Raycast(p1["Right Arm"].Position, (p1.PrimaryPart.CFrame * CFrame.Angles(0, -0.03490658503988659, 0)).LookVector.Unit * 10, v1), -2 });
workspace.Filter:ClearAllChildren();
local v3 = math.huge;
local v4 = 0;
for v5, v6 in pairs(v2) do
if v6[1] then
local l__Magnitude__7 = (p1["Right Arm"].Position - v6[1].Position).Magnitude;
if l__Magnitude__7 < v3 then
v3 = l__Magnitude__7;
v4 = v6[2];
local l__Position__8 = v6.Position;
end;
end;
end;
return v4;
end;



function GetClosestPart(p7, p8)
local v7 = nil;
local v8 = math.huge;
for v9, v10 in pairs(p8:GetChildren()) do
if v10:IsA("BasePart") then
local v11 = Vector3.new(0, 0, 0);
if v10.Name == "Right Arm" then
v11 = p8.PrimaryPart.CFrame.LookVector * 3;
end;
local l__Magnitude__12 = (p7 - (v10.Position + v11)).Magnitude;
if l__Magnitude__12 < v8 then
v8 = l__Magnitude__12;
v7 = v10;
end;
end;
end;
return v7;
end

function GetDistance(p5, p6)
return (p5.PrimaryPart.Position - p6.PrimaryPart.Position).Magnitude;
end

function GetClosestEnemy(p4)
local v2 = nil;
local v3 = math.huge;
for v4, v5 in pairs(workspace.ActivePlayers:GetChildren()) do
if v5 ~= p4 then
local l__Magnitude__6 = (v5.PrimaryPart.Position - p4.PrimaryPart.Position).Magnitude;
if l__Magnitude__6 < v3 then
v3 = l__Magnitude__6;
v2 = v5;
end;
end;
end;
return v2;
end


function GetRetreatDirection(p9, p10, p11)
local v13 = p9.PrimaryPart.Position - p10.PrimaryPart.Position;
local v14 = RaycastParams.new();
v14.FilterType = Enum.RaycastFilterType.Blacklist;
v14.FilterDescendantsInstances = { workspace.ActivePlayers };
local v15 = -135;
local v16 = 0;
local v17 = nil;
for v18 = 1, 10 do
local v19 = workspace:Raycast(p9.PrimaryPart.Position, (CFrame.lookAt(p9.PrimaryPart.Position, p9.PrimaryPart.Position + v13) * CFrame.Angles(0, math.rad(v15), 0)).LookVector * p11, v14);
if v19 then
local l__Magnitude__20 = (v19.Position - p10.PrimaryPart.Position).Magnitude;
if v16 < l__Magnitude__20 then
v17 = v19.Position;
v16 = l__Magnitude__20;
end;
end;
v15 = v15 + 27;
end;
return v17;
end

function SideCast(p12)
local v21 = RaycastParams.new();
v21.FilterType = Enum.RaycastFilterType.Blacklist;
v21.FilterDescendantsInstances = { workspace.ActivePlayers };
local v22 = 0;
for v23 = 1, 10 do
local v24 = workspace:Raycast(p12.PrimaryPart.Position, (p12.PrimaryPart.CFrame * CFrame.Angles(0, math.rad(v22), 0)).LookVector * 8, v21);
v22 = v22 + 36;
if v24 then
return v24;
end;
end;
end

----------------------- AI CODE

function Ai(p1)
local l__Humanoid__7 = p1.Humanoid;
local l__PrimaryPart__8 = p1.PrimaryPart;
local v9 = p1:FindFirstChildOfClass("Tool");
if not v9 then
while true do
v9 = p1:FindFirstChildOfClass("Tool");
wait();
if v9 then
break;
end;
end;
end;
local v10 = 0;
local v11 = 0;
local v12 = 0;
local v13 = false;
while p1.PrimaryPart and l__Humanoid__7.Health > 0  do
v10 = v10 + game:GetService("RunService").RenderStepped:Wait();
local v14 = GetClosestEnemy(p1);
if v14 and v14.Humanoid.Health > 0 then
local v15 = GetClosestPart(v9.Handle.Position, v14);
local v16 = v14:FindFirstChildOfClass("Tool");
local v17 = false;
if v16 and v16.Grip == Grips.Out then
if v13 == false then
v12 = v10;
end;
v13 = true;
end;
if v9.Grip ~= Grips.Out then
v17 = true;
end;
local v18 = v14.Humanoid.Health < p1.Humanoid.Health;
local l__Position__19 = p1.PrimaryPart.Position;
local l__Position__20 = v14.PrimaryPart.Position;
local v21 = math.sqrt((l__Position__19.X - l__Position__20.X) ^ 2 + (l__Position__19.Z - l__Position__20.Z) ^ 2);
local v22 = GetDistance(p1, v14);
local v23 = math.abs(v14.PrimaryPart.Position.Y - p1.PrimaryPart.Position.Y) < 3;
local l__Position__24 = v14.PrimaryPart.Position;
if v13 and v17 and v23 and v22 > 6 and v16 then
local l__Position__25 = l__PrimaryPart__8.Position;
local v26 = v16.Handle.Position + v14.PrimaryPart.CFrame.LookVector * v16.Handle.Size.Y * 2.2;
p1:SetPrimaryPartCFrame(CFrame.lookAt(l__Position__25, v26 - Vector3.new(0, v26.Y - l__Position__25.Y, 0)) * CFrame.Angles(0, 0.30543261909900765, 0));
else
if v9.Parent ~= p1 then
p1:EquipTool(v9)
end;
v9.Parent = p1;
p1:SetPrimaryPartCFrame(CFrame.lookAt(l__PrimaryPart__8.Position, v15.Position - Vector3.new(0, v15.Position.Y - l__PrimaryPart__8.Position.Y, 0)) * CFrame.Angles(0, 0.30543261909900765, 0));
local v27 = 0;
local v28 = v27;
for v29 = 1, 10 do
v27 = v27 + FindBestAngle(p1, v14, v16);
if v28 == v27 then
if v18 then
local v30 = v27 + math.random(-10, 10);
else
v30 = v27 + math.random(-2, 2);
end;
p1:SetPrimaryPartCFrame(CFrame.lookAt(l__PrimaryPart__8.Position, v15.Position - Vector3.new(0, v15.Position.Y - l__PrimaryPart__8.Position.Y, 0)) * CFrame.Angles(0, math.rad(17.5 + v30), 0));
break;
end;
v28 = v27;
p1:SetPrimaryPartCFrame(CFrame.lookAt(l__PrimaryPart__8.Position, v15.Position - Vector3.new(0, v15.Position.Y - l__PrimaryPart__8.Position.Y, 0)) * CFrame.Angles(0, math.rad(17.5 + v27), 0));
end;
end;
local v31 = ((p1.PrimaryPart.Position - v14.PrimaryPart.Position).Unit - v14.Humanoid.MoveDirection).Magnitude < 1;
if v13 then
local v32 = 8;
else
v32 = 7;
end;
if v31 then
local v33 = 2;
else
v33 = 0;
end;
local v34 = v32 + v33;
if v9.Enabled and v9.Grip == Grips.Up then
v11 = v10;
end;
if v16 and not v16.Enabled and v10 - v12 > 0.1 and not (v10 - v12 < 0.2) and v10 - v11 > 0.05 then
v34 = v34 - 2;
end;
if v10 - v11 > 0.5 then
v34 = v34 + 2;
end;
if v21 < 15 then
v9:Activate();
end;
if v22 > 8 and p1.Humanoid.Health < v14.Humanoid.Health then
v34 = v34 + 10;
end;
local v35 = -v14.PrimaryPart.CFrame.RightVector;
if v18 and v23 then
v35 = v35 * 3;
v34 = 2;
end;
if SideCast(v14) or v9.Grip == Grips.Up then
v35 = Vector3.new(0, 0, 0);
end;
local v36 = l__Position__24 - (l__Position__24 - l__PrimaryPart__8.Position).Unit * v34 + v35;
if v18 then

end;
if v22 < v34 then
if GetRetreatDirection(p1, v14, 10) and v31 then
l__Humanoid__7:MoveTo((GetRetreatDirection(p1, v14, 100)));
else
l__Humanoid__7:MoveTo(v36);
end;
else
l__Humanoid__7:MoveTo(v36);
end;
end;
end;
end;

------------------------

Ai(char)

Features & Information

Works with games with swords. Remove shift lock or the script won't work and if it does only move the character (like a little teleport) then execute again Thread: https://v3rmillion.net/showthread.php?tid=1185214

Community Comments (4)

LetsgoayeLetsgoayeAug 24, 2022(edited)

Is this purpose to be a gui or something because nothing happens

ninjaseyi2ninjaseyi2Aug 24, 2022(edited)

Yo can someone respond with a guide on how to consistently get it too work it works sometimes then the next its just broken

LunarUILunarUIAug 24, 2022(edited)

can you make a kill aura for Wave Sword Bots Game? And also anti cheat

ThrillSeekerThrillSeekerAug 24, 2022(edited)

it doesnt work it only moves my character no moving but changing it to like camera on different side my character it doesnt do anything else

More Scripts for Universal Scripts