My AI weapon is not working when it's converted into a tool! Need help ASAP!

Hey devs, I need help ASAP! I’m working on an AI weapon that can be deployed to kill enemies. Everything is working well with the weapon while it’s a model in “Workspace”. It can find enemies and kill them. But when I make it as a tool, it stops shooting and stops to find enemies and kill them. How can I make it work?

When the weapon is converted to model in Workspace:

robloxapp-20210905-0954171


When the model is converted into a tool in StarterPack:

robloxapp-20210905-0954597


Script of the AI weapon:

local clone = script.Parent:Clone()

local human = script.Parent.Humanoid
local body = script.Parent.Head
local barrel = script.Parent.Barrel
local legs = script.Parent.Legs
local hinge = script.Parent.Torso

local aimer = script.Parent.Aimer
local aimAttach = legs.Aim

while hinge:GetNetworkOwnershipAuto() do
	wait()
	hinge:SetNetworkOwner(nil)
end

local settingsFolder = script.Parent.Settings

local barrelHinge = script.Parent.BarrelHinge

local aimPos = barrel.AimPoint
local barrelTip = body.BarrelTip
local barrelChamber = body.BarrelChamber
local shootSound = body.Shoot
local impact = body.Impact
local smoke = barrelTip.Smoke
local sparks = body.Capcitor.Sparks

--Lightweight Humanoid
human:SetStateEnabled(Enum.HumanoidStateType.Climbing,false)
human:SetStateEnabled(Enum.HumanoidStateType.FallingDown,false)
human:SetStateEnabled(Enum.HumanoidStateType.Flying,false)
human:SetStateEnabled(Enum.HumanoidStateType.Freefall,false)
human:SetStateEnabled(Enum.HumanoidStateType.GettingUp,false)
human:SetStateEnabled(Enum.HumanoidStateType.Jumping,false)
human:SetStateEnabled(Enum.HumanoidStateType.Landed,false)
human:SetStateEnabled(Enum.HumanoidStateType.Physics,false)
human:SetStateEnabled(Enum.HumanoidStateType.PlatformStanding,false)
human:SetStateEnabled(Enum.HumanoidStateType.Ragdoll,false)
human:SetStateEnabled(Enum.HumanoidStateType.Running,false)
human:SetStateEnabled(Enum.HumanoidStateType.RunningNoPhysics,false)
human:SetStateEnabled(Enum.HumanoidStateType.Seated,false)
human:SetStateEnabled(Enum.HumanoidStateType.StrafingNoPhysics,false)
human:SetStateEnabled(Enum.HumanoidStateType.Swimming,false)

local particleFlash = {barrelTip.Flash1,barrelTip.Flash2,barrelTip.Flash3}
local currentFlash = 1
local lightFlash = barrelTip.PointLight

local tween = game:GetService("TweenService")

local currentTarget = nil
local canSeeTarget = false

local event = Instance.new("BindableEvent")
function spawner(func,...)
	local connection = event.Event:Connect(func)
	event:Fire(...)
	connection:Disconnect()
end

function checkDist(target)
	return (body.Position - target.Position).Magnitude
end

function checkSight(target)
	local params = RaycastParams.new()
	params.FilterDescendantsInstances = {script.Parent}
	local hit = workspace:Raycast(aimPos.WorldPosition,(target.Position - aimPos.WorldPosition).Unit * settingsFolder.Range.Value, params)
	if hit then
		if hit.Instance:IsDescendantOf(target.Parent) then
			return true		
		end
	end
	return false
end

function updateTarget()
	local dist = settingsFolder.Range.Value
	local tempTarget
	for i,model in pairs(workspace:GetChildren()) do
		local enemyHuman = model:FindFirstChildWhichIsA("Humanoid")
		if model ~= script.Parent and enemyHuman and enemyHuman.Health>0 and enemyHuman.RootPart then
			
			local enemySettings = model:FindFirstChild("Settings")
			local enemyTeam
			local team = false
			if enemySettings then
				enemyTeam = enemySettings:FindFirstChild("Team")
			else
				enemyTeam = model:FindFirstChild("Team")
			end
			if enemyTeam then
				if enemyTeam.Value == settingsFolder.Team.Value then
					team = true
				end
			end
			
			if not settingsFolder.AttackPlayers.Value then
				if game.Players:GetPlayerFromCharacter(model) then
					team = true
				end
			end
			
			local enemyTorso = enemyHuman.RootPart
			local tempDist = checkDist(enemyTorso)
			if not team and tempDist < dist and tempDist > 8 and checkSight(enemyTorso) then
				tempTarget = enemyTorso
				dist = tempDist
			end
		end
	end
	currentTarget = tempTarget
end

function aim(target)
	local dist = checkDist(target)
	local targetPos = target.Position + target.Velocity/(3.9 - dist/30)
	local newCFrame = CFrame.new(aimer.Position,targetPos)
	local lookDiff = (newCFrame.LookVector - aimer.CFrame.LookVector).Magnitude
	aimAttach.WorldCFrame = newCFrame
end

function shootTarget()
	if (barrel.RotVelocity).Magnitude > 10 then
		
		lightFlash.Enabled = true
		spawner(function() wait(0.1) lightFlash.Enabled = false end)
		smoke.Enabled = true
		
		currentFlash += 1 
		if currentFlash > 3 then currentFlash = 1 end
		particleFlash[currentFlash]:Emit(1)
		
		local case = Instance.new("Part")
		case.Size = Vector3.new(0.2,0.2,0.7)
		case.Material = Enum.Material.Metal
		case.CanCollide = false
		case.BrickColor = BrickColor.new("New Yeller")
		case.CFrame = body.Eject.WorldCFrame * CFrame.Angles(0,math.rad(180),0)
		case.Velocity = case.CFrame.RightVector * -10
		case.Parent = workspace
		spawner(function() wait(0.2) case.CanCollide = true end)
		game:GetService("Debris"):AddItem(case,2)
		
		local bullet = Instance.new("Part")
		bullet.Size = Vector3.new(0.1,0.1,0.5)
		bullet.Material = Enum.Material.Neon
		bullet.CanCollide = false
		bullet.BrickColor = BrickColor.new("New Yeller")
		bullet.CFrame = barrelChamber.WorldCFrame
		bullet.Anchored = true
		bullet.Parent = script.Parent
		
		local fileMesh = Instance.new("FileMesh")
		fileMesh.MeshId = "rbxassetid://5435476321"
		fileMesh.TextureId = "rbxassetid://5435476346"
		fileMesh.Scale = Vector3.new(0.2,0.2,0.15)
		fileMesh.Parent = case
		
		local speed = 200--75
		local params = RaycastParams.new()
		local iterations = 50
		params.FilterDescendantsInstances = {script.Parent}
		local bulletConnection
		bulletConnection = game:GetService("RunService").Heartbeat:Connect(function(deltaTime)
			local position,nextPosition = bullet.Position,bullet.CFrame.LookVector * deltaTime * speed
	        local result = workspace:Raycast(position,nextPosition,params)
			if result then	
				bulletConnection:Disconnect()
				bullet:Destroy()
				local human = result.Instance.Parent:FindFirstChildWhichIsA("Humanoid")
				impact.WorldPosition = result.Position
				if human and human.Health > 0 then
					human:TakeDamage(math.random(5,15))
					impact.Hit:Play()
					if human.Health <= 0 then
						updateTarget()
					end
				elseif not human then
					impact.Miss:Play()
					impact.Debris:Emit(1)
					for i = 1, math.random(5,10) do
						local chunk = Instance.new("Part")
						chunk.Color = result.Instance.Color
						chunk.Material = result.Instance.Material
						local size = math.random(5)/10
						chunk.Size = Vector3.new(size,size,size)
						chunk.CFrame = CFrame.new(result.Position)
						chunk.Velocity = Vector3.new(math.random(-20,20),math.random(10,20),math.random(-20,20))
						chunk.Parent = workspace
						game:GetService("Debris"):AddItem(chunk,1)
					end
				end
	        else
	            bullet.Position = position + nextPosition
			end
			
			iterations -= 1
			if iterations < 0 then
				bulletConnection:Disconnect()
				bullet:Destroy()
			end
		end)
		
		local a0 = Instance.new("Attachment")
		a0.Position = Vector3.new(0.05,0,0.05)
		a0.Parent = bullet
		
		local a1 = Instance.new("Attachment")
		a1.Position = Vector3.new(-0.05,0,-0.05)
		a1.Parent = bullet
		
		local trail = Instance.new("Trail")
		trail.Color = ColorSequence.new(bullet.Color)
		trail.WidthScale = NumberSequence.new(1,0)
		trail.Lifetime = 0.2
		trail.Attachment0 = a0
		trail.Attachment1 = a1
		trail.Parent = bullet
		
		local shootSfx = shootSound:Clone()
		shootSfx.Parent = body
		shootSfx:Play()
		game:GetService("Debris"):AddItem(shootSfx,1)
		
		game:GetService("Debris"):AddItem(bullet,10)
	end
end

function combatLoop()
	while human.Health > 0 do
		if currentTarget and canSeeTarget then
			tween:Create(barrelHinge,TweenInfo.new(0.5),{AngularVelocity = 20}):Play()
			local lookDiff = (CFrame.new(body.Position,currentTarget.Position).LookVector - body.CFrame.LookVector).Magnitude
			if lookDiff < 0.5 then
				shootTarget()
			end
		else
			smoke.Enabled = false 
			tween:Create(barrelHinge,TweenInfo.new(2),{AngularVelocity = 0}):Play()
			wait(1)
		end
		wait(settingsFolder.FireRate.Value)
	end
	smoke.Enabled = false 
	tween:Create(barrelHinge,TweenInfo.new(2),{AngularVelocity = 0}):Play()
end

local noTargetIndex = 0
function aimLoop()
	while human.Health > 0 do
		if currentTarget then
			if checkSight(currentTarget) then
				noTargetIndex = 0
				canSeeTarget = true
				barrelHinge.AngularVelocity = barrelHinge.AngularVelocity
				aim(currentTarget)
			else
				canSeeTarget = false
			end
		else
			noTargetIndex += 1
			if noTargetIndex > 2 then
				noTargetIndex = 0
				local pos = body.Position + Vector3.new(math.random(-20,20),math.random(-2,3),math.random(-20,20))
				aim({Position = pos, Velocity = Vector3.new(0,0,0)})
			end
			wait(1)
		end
		wait()
	end
end

function updateTargetLoop()
	while human.Health > 0 do
		updateTarget()
		wait(3)
	end
end


spawner(aimLoop)
spawner(updateTargetLoop)
spawner(combatLoop)

human.Died:Connect(function()
	sparks.Enabled = true
	body.Shutdown:Play()
	aim({Position = (barrel.Position + barrel.CFrame.LookVector * 10) - Vector3.new(0,10,0),Velocity = Vector3.new(0,0,0)})
	wait(settingsFolder.RespawnDelay.Value)
	for i,v in pairs(script.Parent:GetChildren()) do
		if v:IsA("BasePart") then
			tween:Create(v,TweenInfo.new(0.5),{Transparency = 1}):Play()
		end
	end
	wait(0.5)
	if settingsFolder.Respawn.Value then
		clone.Parent = script.Parent.Parent
	end
	script.Parent:Destroy()
end)




Please reply back ASAP! :pray:

:memo: - Harmony

1 Like

While I haven’t used this plug in for making tools it is supposed to make tools as well as accessories… it’s super easy to use … maybe it will help???
(1) Asset Creator - Roblox

You’re reply is irrelevant buddy!

I wasn’t sure tbh… I just know it can make tools and this guy was having issues with a tool…
sorry…