task.spawn(function()while true do if Dead then break end AI()local N,V,A=near()if N and not Dead then N=N.p if not r then w=.14 local i=h.Position-N local G,K=workspace:FindPartOnRay(Ray.new(t.Torso.Position,(N-t.Torso.Position).Unit*999),t)local o=(N+Vector3.new(math.random(-V*RecoilSpread,V*RecoilSpread),math.random(-V*RecoilSpread,V*RecoilSpread),math.random(-V*RecoilSpread,V*RecoilSpread)))+A if G and not Dead then local i,K=CheckForHumanoid(G)if i==true and(K.Health>0 and(game.Players:GetPlayerFromCharacter(K.Parent)and perception>=10))then function lookAt(N,V)local A=(V-N).Unit local i=Vector3.new(0,1,0)local t=A:Cross(i)local G=t:Cross(A)return CFrame.fromMatrix(V,t,G)end local i=(N+A)-h.CFrame.LookVector script.Parent:SetPrimaryPartCFrame(CFrame.new(t.Head.CFrame.Position,Vector3.new(i.X,h.CFrame.Y,i.Z)))Evt.ServerBullet:FireAllClients(nil,h.Position,(o-h.Position).Unit,WeaponData,nil)h.Echo:Play()h.Fire:Play()local G=RaycastParams.new()G.FilterDescendantsInstances=Ray_Ignore G.FilterType=Enum.RaycastFilterType.Blacklist G.IgnoreWater=true local K=workspace:Raycast(h.Position,(o-h.Position).Unit*999,G)if K and(K.Instance and not Dead)then Hitmaker(K.Instance,K.Position,K.Normal,K.Material)local N,V=CheckForHumanoid(K.Instance)if N==true and(V.Health>0 and game.Players:GetPlayerFromCharacter(V.Parent))then local N=(K.Position-h.Position).Magnitude if K.Instance.Name=="\072\101\097\100"or K.Instance.Parent.Name=="\084\111\112"or K.Instance.Parent.Name=="\072\101\097\100\115\101\116"or K.Instance.Parent.Name=="\079\108\104\111"or K.Instance.Parent.Name=="\070\097\099\101"or K.Instance.Parent.Name=="\078\117\109\101\114\111"then local A=math.random(WeaponData.HeadDamage[1],WeaponData.HeadDamage[2])local i,t,G=CalcularDano(A,N,V,"\072\101\097\100")Damage(V,i,t,G)elseif K.Instance.Parent:IsA("\065\099\099\101\115\115\111\114\121")or K.Instance.Parent:IsA("\072\097\116")then local A=math.random(WeaponData.HeadDamage[1],WeaponData.HeadDamage[2])local i,t,G=CalcularDano(A,N,V,"\072\101\097\100")Damage(V,i,t,G)elseif K.Instance.Name=="\084\111\114\115\111"or K.Instance.Parent.Name=="\067\104\101\115\116"or K.Instance.Parent.Name=="\087\097\105\115\116"then local A=math.random(WeaponData.TorsoDamage[1],WeaponData.TorsoDamage[2])local i,t,G=CalcularDano(A,N,V,"\066\111\100\121")Damage(V,i,t,G)elseif K.Instance.Name=="\082\105\103\104\116 \065\114\109"or K.Instance.Name=="\076\101\102\116 \065\114\109"or K.Instance.Name=="\082\105\103\104\116 \076\101\103"or K.Instance.Name=="\076\101\102\116 \076\101\103"or K.Instance.Parent.Name=="\066\097\099\107"or K.Instance.Parent.Name=="\076\101\103\049"or K.Instance.Parent.Name=="\076\101\103\050"or K.Instance.Parent.Name=="\065\114\109\049"or K.Instance.Parent.Name=="\065\114\109\050"then local A=math.random(WeaponData.LimbDamage[1],WeaponData.LimbDamage[2])local i,t,G=CalcularDano(A,N,V,"\066\111\100\121")Damage(V,i,t,G)else local A=math.random(WeaponData.LimbDamage[1],WeaponData.LimbDamage[2])local i,t,G=CalcularDano(A,N,V,"\066\111\100\121")Damage(V,i,t,G)end end end ammo=ammo-1 if K then V=(h.Position-K.Position).magnitude end t.Humanoid.WalkSpeed=ShootingWalkspeed elseif i==true and(K.Health>0 and(game.Players:GetPlayerFromCharacter(K.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 end task.wait(RPM)if ammo==0 then reload()end end end end 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)


