The nearest enemy detection is not working

the hitbox module that i use is not mine

i know, thats why it gets confusing for u, just use the script i made above

it dont changes nothing i suppose

here use this instead

local grabRemote = RP.remotes.grab
local ss = game:GetService("ServerStorage")
local modules = ss:WaitForChild("Modules")
local slow = require(modules:WaitForChild("slow"))
local runService = game:GetService("RunService")
local rockModule = require(modules:WaitForChild("RockModule"))
local utilities = require(modules:WaitForChild("particleEmitter"))
local hitbox = require(modules:WaitForChild("hitbox"))
local hitService = require(modules:WaitForChild("hitService"))

local hitedPeople = {}
local grabAnins = {}

local looping = false

local startTick
local weld
local enemy
local enemyHumRP

local TheTarget = nil
local TheTargetRP = nil



local function aplyVelocity(targetHumRP,direction)
	local linearV = Instance.new("LinearVelocity",targetHumRP)
	local attach = targetHumRP.RootAttachment
	linearV.MaxForce = 100000
	linearV.ForceLimitMode = Enum.ForceLimitMode.PerAxis
	linearV.MaxAxesForce = Vector3.new(100000,0,100000)
	linearV.VectorVelocity = direction
	linearV.VelocityConstraintMode = Enum.VelocityConstraintMode.Vector
	linearV.Attachment0 = attach
	linearV.RelativeTo = Enum.ActuatorRelativeTo.Attachment0
	attach.WorldPosition = targetHumRP.AssemblyCenterOfMass
	linearV.ForceLimitsEnabled = true
	game.Debris:AddItem(linearV,0.2)
end

local function GetAllEnemiesWithinHitbox(Hitbox, MyHumanoid)
	local AllEnemies = {}
	local CurrentDistance = math.huge
	local CurrentTarget = nil
	local CurrentTargetHRP = nil
	
	local Array = workspace:GetPartBoundsInBox(hitbox.CFrame, hitbox.Size)
	
	if Array ~= nil then
		for i, v in Array do
			local Model = v:FindFirstAncestorOfClass("Model")
			if Model then
				local Hum = Model:FindFirstChild("Humanoid")
				if Hum and Hum ~= MyHumanoid then
					
					local Dist = (Model.PrimaryPart.Position - MyHumanoid.Parent.PrimaryPart.Position).Magnitude
					
					if Dist < CurrentDistance then
						CurrentTarget = Model
						CurrentDistance = Dist
						CurrentTargetHRP = Model:FindFirstChild("HumanoidRootPart")
					end
					
				end
			end
		end
	end
	
	return CurrentTarget, CurrentTargetHRP
	
end

grabRemote.OnServerEvent:Connect(function(plr,grab,input)	
	local character = plr.Character
	local humanoid = character:WaitForChild("Humanoid")
	local humanoidRootPart = character:FindFirstChild("HumanoidRootPart")

	local grabing = character:GetAttribute("Grab")
	local attacking = character:GetAttribute("Attacking")
	local punching = character:GetAttribute("Punching")
	local blocking = character:GetAttribute("Blocking")
	local jumping = character:GetAttribute("Jumping")
	local slowed = character:GetAttribute("Slowed")
	local stunned = character:GetAttribute("Stunned")
	local dashing = character:GetAttribute("Dash")
	local dashing2 = character:GetAttribute("Dash2")

	if grab then
		if grabing or attacking or punching or blocking or stunned or dashing or dashing2 then return end

		local animation = Instance.new("Animation")
		animation.AnimationId = "http://www.roblox.com/asset/?id=85032147152709"
		local animationTrack = humanoid:LoadAnimation(animation)

		local animationGrabing = Instance.new("Animation")
		animationGrabing.AnimationId = "http://www.roblox.com/asset/?id=anim"
		local animationTrackGrabing = humanoid:LoadAnimation(animationGrabing)

		local function GrabFunc()
			local hitbox = Instance.new("Part")
			hitbox.Name = "HitBox"
			hitbox.Transparency = 1
			hitbox.CanCollide = false
			hitbox.Anchored = true
			hitbox.Size = Vector3.new(14,14,14)
			hitbox.CFrame = humanoidRootPart.CFrame + Vector3.new(0, 0, -2)

			local Target, TargetHRP = GetAllEnemiesWithinHitbox(hitbox, humanoid)

			if Target ~= nil then
				
				TheTarget = Target
				TheTargetRP = TargetHRP
				
				looping = true
				character:SetAttribute("Grab",true)
				enemy = Target
				enemyHumRP = TargetHRP

				for i,v in pairs(Target:GetChildren()) do
					if v:IsA("BasePart") then
						v.Color = Color3.fromRGB(0,100,80)
					end
				end

				weld = Instance.new("Weld")
				weld.C1 = CFrame.new(0,0,-2) * CFrame.Angles(0,math.rad(180),0)
				weld.Part0 = TargetHRP
				weld.Part1 = humanoidRootPart
				weld.Name = "wellwellwell"

				local knockback = nil
				local maxForce = nil

				startTick = tick()

				while looping do
					humanoid.WalkSpeed = 10
					humanoid.JumpPower = 0

					weld.Parent = TargetHRP
					Target.Humanoid.PlatformStand = true


					if tick() - startTick > 3 then			
						print(Target,TargetHRP)
						character:SetAttribute("Grab",false)
						Target.Humanoid.PlatformStand = false
						humanoid.WalkSpeed = 20
						humanoid.JumpPower = 50

						for i,v in pairs(TargetHRP:GetChildren()) do
							if v:IsA("Weld") and v.Name == "wellwellwell" then
								v.Parent = nil
							end
						end


						aplyVelocity(TargetHRP,Vector3.new(0,0,30))

						break
					end

					task.wait()
				end

				hitService.hit(Target.Humanoid,nil,knockback,nil,character,nil,nil,maxForce,nil,nil)

			end	
		end
		


		animationTrack.KeyframeReached:Connect(function(kf)
			if kf == "grab" then
				GrabFunc()
			end
		end)

		animationTrack:Play()
		grabAnins[plr] = animationTrack
	else
		if grabing then				
			looping = false
			character:SetAttribute("Grab",false)
			grabAnins[plr]:Stop()
			grabAnins[plr] = nil

			humanoid.WalkSpeed = 20
			humanoid.JumpPower = 50

			TheTarget.Humanoid.PlatformStand = false

			for i,v in pairs(TheTargetRP:GetChildren()) do
				if v:IsA("Weld") and v.Name == "wellwellwell" then
					v.Enabled = false
				end
			end

			if tick() - startTick < 3 and input == Enum.KeyCode.T then
				aplyVelocity(TheTargetRP,Vector3.new(0,0,30))
			elseif input == Enum.KeyCode.Y then
				aplyVelocity(TheTargetRP,Vector3.new(30,0,0))
			elseif input == Enum.KeyCode.G then
				aplyVelocity(TheTargetRP,Vector3.new(-30,0,0))
			end			

			hitedPeople = {}
		end

	end	
end)

oh, i think i understand it now

Wait I think I found the issue give me a second

of course, took the time you want.

i’ll wait for the another guy reply, so i’ll try your code

take a picture of the error output if it gives any error

1 Like

i have never mentioned that,but, i have watched a video of a guy that use the same hitbox module that i use, and he create a nearest enemy detection that works for him, but not for me

Ok there is alot wrong with this script I don’t think i can explain all of it.
The main issue is you only get the first person that touches it and sends only that one person to the hitedpeople variable, so it will only get the distance of that one person and therefore only return that one person (and that is excluding the other 15 different mistakes).
I can try to fix it for you but it would take me a few minutes.

did u try my code? was there any output?

ok, i’ll try the veexas code while you fix the problens

here is the video link if someone get interested https://youtu.be/Kq_uv6Wk8DI?si=eaS_6VNkCgYkmic8

here is the first error:

okay it change that into this

	local Array = workspace:GetPartBoundsInBox(Hitbox.CFrame, Hitbox.Size)

i uppercase the “H” in hitbox, hitbox i created is uppercase H

1 Like

Before I give the final verdict, how do I visualiza the hitbox?

i cant see the hitbox, i think that is the only problem, thanks :smile:

1 Like

by changing this

			hitbox.Transparency = 1

to this

			hitbox.Transparency = 0.5

and add this under it

			game.Debris:AddItem(hitbox, 5) --deletes the part after 5 seconds

ure welcome, im glad i was able to help