--end)


task.spawn(function()
	while true do

		if Dead then
			break
		end

		AI()

		local n,mag,hum=near()
		if n and not Dead then
			n=n.p
			if not r then
				w=.14
				local dir=h.Position-n
				local tst ,_ =workspace:FindPartOnRay(Ray.new(t.Torso.Position,(n-t.Torso.Position).Unit*999),t)
				local aim =n+Vector3.new(math.random(-mag*RecoilSpread,mag*RecoilSpread),math.random(-mag*RecoilSpread,mag*RecoilSpread),math.random(-mag*RecoilSpread,mag*RecoilSpread))+hum


				if tst and not Dead then

					local FoundHuman,VitimaHuman = CheckForHumanoid(tst)
					if FoundHuman == true and VitimaHuman.Health > 0 and game.Players:GetPlayerFromCharacter(VitimaHuman.Parent) and perception >= 10 then


						function lookAt(target, eye)
							local forwardVector = (eye - target).Unit
							local upVector = Vector3.new(0, 1, 0)
							-- You have to remember the right hand rule or google search to get this right
							local rightVector = forwardVector:Cross(upVector)
							local upVector2 = rightVector:Cross(forwardVector)

							return CFrame.fromMatrix(eye, rightVector, upVector2)
						end

						local direction = (n+hum)-h.CFrame.LookVector
						script.Parent:SetPrimaryPartCFrame(CFrame.new(t.Head.CFrame.Position,Vector3.new(direction.X,h.CFrame.Y,direction.Z)))

						Evt.ServerBullet:FireAllClients(nil, h.Position,(aim - h.Position).Unit,WeaponData,nil)
						h.Echo:Play()
						h.Fire:Play()

						local raycastParams = RaycastParams.new()
						raycastParams.FilterDescendantsInstances = Ray_Ignore
						raycastParams.FilterType = Enum.RaycastFilterType.Blacklist
						raycastParams.IgnoreWater = true

						local raycastResult = workspace:Raycast(h.Position, (aim - h.Position).Unit*999, raycastParams)
						if raycastResult and raycastResult.Instance and not Dead then

							Hitmaker(raycastResult.Instance, raycastResult.Position, raycastResult.Normal, raycastResult.Material)
							local FoundHuman,VitimaHuman = CheckForHumanoid(raycastResult.Instance)
							if FoundHuman == true and VitimaHuman.Health > 0 and game.Players:GetPlayerFromCharacter(VitimaHuman.Parent) then
								local TotalDistTraveled = (raycastResult.Position - h.Position).Magnitude
								------ How much damage the gun inflicts
								if raycastResult.Instance.Name == "Head" or raycastResult.Instance.Parent.Name == "Top" or raycastResult.Instance.Parent.Name == "Headset" or raycastResult.Instance.Parent.Name == "Olho" or raycastResult.Instance.Parent.Name == "Face" or raycastResult.Instance.Parent.Name == "Numero" then
									local DanoBase = math.random(WeaponData.HeadDamage[1], WeaponData.HeadDamage[2])
									local Dano,DanoColete,DanoCapacete = CalcularDano(DanoBase, TotalDistTraveled, VitimaHuman, "Head")	
									Damage(VitimaHuman,Dano,DanoColete,DanoCapacete)
								elseif (raycastResult.Instance.Parent:IsA('Accessory') or raycastResult.Instance.Parent:IsA('Hat')) then
									local DanoBase = math.random(WeaponData.HeadDamage[1], WeaponData.HeadDamage[2])
									local Dano,DanoColete,DanoCapacete = CalcularDano(DanoBase, TotalDistTraveled, VitimaHuman, "Head")	
									Damage(VitimaHuman,Dano,DanoColete,DanoCapacete)
								elseif raycastResult.Instance.Name == "Torso" or raycastResult.Instance.Parent.Name == "Chest" or raycastResult.Instance.Parent.Name == "Waist" then
									local DanoBase = math.random(WeaponData.TorsoDamage[1], WeaponData.TorsoDamage[2])
									local Dano,DanoColete,DanoCapacete = CalcularDano(DanoBase, TotalDistTraveled, VitimaHuman, "Body")	
									Damage(VitimaHuman,Dano,DanoColete,DanoCapacete)
								elseif raycastResult.Instance.Name == "Right Arm" or raycastResult.Instance.Name == "Left Arm" or raycastResult.Instance.Name == "Right Leg" or raycastResult.Instance.Name == "Left Leg" or raycastResult.Instance.Parent.Name == "Back" or raycastResult.Instance.Parent.Name == "Leg1" or raycastResult.Instance.Parent.Name == "Leg2" or raycastResult.Instance.Parent.Name == "Arm1" or raycastResult.Instance.Parent.Name == "Arm2" then
									local DanoBase = math.random(WeaponData.LimbDamage[1], WeaponData.LimbDamage[2])
									local Dano,DanoColete,DanoCapacete = CalcularDano(DanoBase, TotalDistTraveled, VitimaHuman, "Body")	
									Damage(VitimaHuman,Dano,DanoColete,DanoCapacete)
								else
									local DanoBase = math.random(WeaponData.LimbDamage[1], WeaponData.LimbDamage[2])
									local Dano,DanoColete,DanoCapacete = CalcularDano(DanoBase, TotalDistTraveled, VitimaHuman, "Body")	
									Damage(VitimaHuman,Dano,DanoColete,DanoCapacete)
								end	


							end
						end
						ammo=ammo-1
						if raycastResult then
							mag=(h.Position-raycastResult.Position).magnitude

						end
						t.Humanoid.WalkSpeed = ShootingWalkspeed
					elseif FoundHuman == true and VitimaHuman.Health > 0 and game.Players:GetPlayerFromCharacter(VitimaHuman.Parent) and perception < 10 then
						perception = perception + Settings.Level.Value
						t.Humanoid.WalkSpeed = SearchingWalkspeed
						Memory = Settings.Level.Value * 100
						CanSee = true
					elseif perception > 0 then
						perception = perception - 1/Settings.Level.Value * 2
						t.Humanoid.WalkSpeed = SearchingWalkspeed
						CanSee = false
					elseif perception <= 0 then
						perception = 0
						t.Humanoid.WalkSpeed = RegularWalkspeed
						Memory = Memory - .25
					end
					--print(Memory)
				end
				task.wait(RPM) -- How fast the enemy shoots
				if ammo==0 then
					reload()
				end
			end
		end
	end
end)