Humanoid Health set to 0 but the mob still not dying

  1. What do you want to achieve?
    I want to fix this bug below , as you can see the humanoid health is 0 but the mob is still not dying
  2. What is the issue?
    robloxapp-20240704-1928303.wmv (3.5 MB)
    sorry for really bad quality of video but it was the only choice i had
    after the tankenemy health is 0 tank enemy doesnt stop walking and doesnt die
  3. What solutions have you tried so far?
    I tried many things but it just made it worse, I also looked at devforum but none of the solution seem to work for me.

local PhysicsService = game:GetService(“PhysicsService”)
local ServerStorage = game:GetService(“ServerStorage”)
local Mob = {}

function Mob.Move(mob, map)

local waypoints = map.waypoints
for waypoint=1, #waypoints:GetChildren() do
	    local Humanoid = mob:FindFirstChildOfClass("Humanoid",12)
	    Humanoid:MoveTo(waypoints[waypoint].Position)
	    Humanoid.MoveToFinished:Wait()
	    Humanoid:MoveTo(waypoints[waypoint].Position)
	    Humanoid.MoveToFinished:Wait()
end     
ServerStorage.Bindables.DamageBase:Fire(mob.Humanoid.Health/2)
mob:Destroy()   

end

function Mob.Spawn(name, quantity, map)
local mobExists = ServerStorage.Mobs:WaitForChild(name)
if mobExists then
for i=1, quantity do
task.wait(0.5)
local newMob = mobExists:Clone()
newMob:PivotTo(map.Part.CFrame)
newMob.Parent = workspace.Mobs
newMob.HumanoidRootPart: SetNetworkOwner (nil)
for i,object in ipairs(newMob:GetDescendants())do
if object:IsA(“BasePart”)then
object.CollisionGroup = “Mob”
end
end
newMob:WaitForChild(“Humanoid”).Died:Connect(function()
newMob.Parent = workspace
wait (3)
newMob:Destroy()
if newMob.Humanoid.Health == 0 then
newMob.Humanoid:ChangeState(Dead)
newMob.Parent = workspace
wait(3)
newMob:Destroy()
end
end)
coroutine.wrap(Mob.Move)(newMob, map)
end
else
warn(“Mob not found:”, name)
end
end
This script is a module script of a Server Script inside of ServerScriptService

local PhysicsService = game:GetService("PhysicsService")
local ServerStorage = game:GetService("ServerStorage")
local Tower = {}
local rs = game:GetService("ReplicatedStorage")

local function NearestTarget(tower,range)

	local nearestTarget = nil

	for i, target in ipairs (workspace.Mobs:GetChildren())do 
		local distance = (target.HumanoidRootPart.Position-tower.PrimaryPart.Position).Magnitude
		if distance < range then
			nearestTarget = target
			range = distance
		else 
			return 
		end
		return nearestTarget
	end
	end
function Tower.Attack(Unit)
		local attributs = Unit:GetAttributes()
		local target = NearestTarget(Unit,attributs.Range)
		
		if target and target:FindFirstChild("Humanoid") and target.Humanoid.Health >= 0 then
			Unit.HumanoidRootPart.BodyGyro.CFrame =  CFrame.new(Unit.PrimaryPart.Position,target:WaitForChild("HumanoidRootPart").Position)
		   --rs.Events.Animator:FireAllClients(Unit,"Attack") -- has been turned cuz it was causing problems
			target.Humanoid:TakeDamage(math.clamp(target.Humanoid.Health,0,attributs.Damage))
			
		    task.wait(0.1)	
		end
		wait(0.1)
		Tower.Attack(Unit)
		return target
		
	end
function Tower.Spawn(player,name,cframe)
	local TowerExists = rs.OwnedTowers:FindFirstChild(name)

	if TowerExists then
			local newTower = TowerExists:Clone()
			local humanRootPart = newTower.HumanoidRootPart or newTower.PrimaryPart
			humanRootPart.CFrame = cframe
			newTower.Parent = workspace.Towers
			newTower.HumanoidRootPart: SetNetworkOwner(nil)
		
				
			local bodygyro = Instance.new("BodyGyro")
			bodygyro.MaxTorque = Vector3.new(math.huge,math.huge,math.huge)
			bodygyro.D = 0
			bodygyro.CFrame = newTower.HumanoidRootPart.CFrame                         
			bodygyro.Parent = newTower.HumanoidRootPart                                 
			for i,object in ipairs(newTower:GetDescendants())do                         
				if object:IsA("Part")then                                               
					object.CollisionGroup = "Tower"                                     
				end                                                                     
			end                                                                          
			coroutine.wrap(Tower.Attack)(newTower)                                     
			else warn("Requested Tower not found: ".. Tower.Name)
        end
    end
rs.Events.SpawnTower.OnServerEvent:Connect(Tower.Spawn)
return Tower

***This script is a module script of a Server Script inside of ServerScriptService***

idk how to explain this any more further please help.
2 Likes

maybe you should clamp the health

(math.clamp(target.Humanoid.Health, 0, max)

where should I type this line?

before damage the damage (i think)
you can test both after and before, but try before first.

sadly didnt worked I tried both before the damage and after the damage

check if the damage is more than the health, if it is, set the health to 0
if its not then just take the damage

I was setting the math.clamp in the wrong now its good and not giving me error but when the mob health sets to 0 the mod doesnt die some how can you help pls?

you still available?, cuz i still need pls

You could delete the mob or use Humanoid:TakeDamage() on it

1 Like

yeah i used that solution and it did worked, forget to close it thanks for your reply tho.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.