level/Rankup system

Hey there, im making a game where u hit an obstacle. when u hit the obstacle it looses health, right.

my problem is that when the health is at 0/maxHealth, it just wont detect it and wont let the player rank up.

now it did work but i had it in a:

while wait() do
   pcall(function()
      --code in here
   end)
end

when i hit 0/maxHealth i ranked up to 200 times in 1 kill and when i printed it printed up to 700 times a kill

i looked at a bunch of forums but none helped.

check if killed:

while wait() do
	if Library.Modules.Omega.leeq(data.Stats.Health.Value, 0) then
		game.ReplicatedStorage.Remotes.RankUp:FireServer(data)
	end
end

leeq = less or equal

game.ReplicatedStorage.Remotes.TakeDamage.OnServerEvent:Connect(function(plr)
	local data = Library.DataFolder[plr.Name]
	
	local Damage = data.Stats.Damage
	local Stage = data.Stats.Stage
	local StarHealth = data.Stats.Health
	
	StarHealth.Value = Library.Modules.Omega.toString(Library.Modules.Omega.sub(StarHealth.Value, Damage.Value))
end)

game.ReplicatedStorage.Remotes.RankUp.OnServerEvent:Connect(function(plr, data)
	data.Stats.Stage.Value = Library.Modules.Omega.toString(Library.Modules.Omega.add(data.Stats.Stage.Value, 1))
	require(game.ReplicatedStorage.Health).setHealth(plr, data, Library)
end)

setHealth:

function module.setHealth(plr, data, Library)
	local Stage = data.Stats.Stage.Value
	local health = Library.Modules.Omega.toString(Library.Modules.Omega.mul(10, Library.Modules.Omega.pow(3, Stage)))
	data.Stats.Health.Value = health
end

please help