What is the issue? So, I’ve spent days trying to solve my problem, which is about making the closest enemy to my humanoid (who is detected by the hitbox) the target. This works perfectly, however, once I set an enemy as the target, it becomes the target forever. If this helps, here’s my script:
local RP = game:GetService("ReplicatedStorage")
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 closestDist = math.huge
local target = nil
local targetRP = 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.VelocityConstraintMode = Enum.VelocityConstraintMode.Vector
linearV.Attachment0 = attach
linearV.RelativeTo = Enum.ActuatorRelativeTo.Attachment0
attach.WorldPosition = targetHumRP.AssemblyCenterOfMass
linearV.MaxAxesForce = Vector3.new(100000,0,100000)
linearV.VectorVelocity = direction
linearV.ForceLimitsEnabled = true
game.Debris:AddItem(linearV,0.2)
end
local function getTarget(hrp,enemy)
table.insert(hitedPeople,enemy)
if #hitedPeople > 0 then
for i,enemyChar in pairs(hitedPeople) do
local enemyRP = enemyChar.HumanoidRootPart
local distance = (enemyRP.Position - hrp.Position).Magnitude
if distance < closestDist then
closestDist = distance
target = enemyChar
targetRP = target.HumanoidRootPart
end
end
end
if not table.find(hitedPeople,enemy) then
table.insert(hitedPeople,enemy)
end
return target,targetRP
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=MY_GRAB_ANIM"
local animationTrack = humanoid:LoadAnimation(animation)
local hitbox = hitbox.new()
hitbox.Size = Vector3.new(4,4,4)
hitbox.CFrame = humanoidRootPart
hitbox.Offset = CFrame.new(0,0,-4)
hitbox.Visualizer = true
hitbox.onTouch = function(enemyHum)
if enemyHum ~= humanoid then
looping = true
character:SetAttribute("Grab",true)
enemy = enemyHum.Parent
enemyHumRP = enemy.HumanoidRootPart
getTarget(humanoidRootPart,enemy)
for i,v in pairs(target:GetChildren()) do
if v:IsA("BasePart") then
v.Color = Color3.fromRGB(0,100,80)
end
end
if target then
print(target)
end
weld = Instance.new("Weld")
weld.C1 = CFrame.new(0,0,-2) * CFrame.Angles(0,math.rad(180),0)
weld.Part0 = targetRP
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 = targetRP
target.Humanoid.PlatformStand = true
if tick() - startTick > 3 then
character:SetAttribute("Grab",false)
target.Humanoid.PlatformStand = false
humanoid.WalkSpeed = 20
humanoid.JumpPower = 50
for i,v in pairs(targetRP:GetChildren()) do
if v:IsA("Weld") and v.Name == "wellwellwell" then
v.Parent = nil
end
end
aplyVelocity(targetRP,Vector3.new(0,0,30))
break
end
task.wait()
end
hitService.hit(enemyHum,nil,knockback,nil,character,nil,nil,maxForce,nil,nil)
end
end
animationTrack.KeyframeReached:Connect(function(kf)
if kf == "grab" then
hitbox:Start()
task.wait(0.2)
hitbox:Stop()
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
target.Humanoid.PlatformStand = false
for i,v in pairs(targetRP: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(targetRP,Vector3.new(0,0,30))
elseif input == Enum.KeyCode.Y then
aplyVelocity(targetRP,Vector3.new(30,0,0))
elseif input == Enum.KeyCode.G then
aplyVelocity(targetRP,Vector3.new(-30,0,0))
end
end
end
end)
If someone have any idea of what is the problem, i would be greatfull.