Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
COMMUNITY QUESTION

Nesting While loops?

Greetings fellow Robloxians... I've been writing this script that does as follows:

(Player stands on brick the brick changes color if the players health isn't 100 it heals him and once he leaves the pad it changes back to the original color... )

(THE PROBLEM- The problem I'm having is that on the marked line bellow I can't figure out how to have the player heal only while he is standing on the pad.. If he moves he no longer receives healing. I tried to nest the while loop but had no luck. I've did some researching and articles say you nest while loops by:

while(condition) do while(condition) do statement(s) end statement(s) end

However I had no luck with that so I tried to use the 'and' identifier and once more I had no luck. I'd appreciate if a trained eye can view my code and tell me what I'm doing wrong, thank you very much in advance.

db=false
function heal(player)

if db then return end
db=true


local h = player.Parent:FindFirstChild("Humanoid")

if h~= nil and h:FindFirstChild("Value")== nil then
	
local brick=script.Parent	
	
character=h.Parent

torso=h.Parent.Torso

tp=torso.Position 

bp=brick.Position

if h.Health <100 then
	
print("Charging Heal-Pad!")
	
for i=1,10 do
	

wait(.1)	

brick.Transparency=brick.Transparency + .1





end

brick.BrickColor=BrickColor.new("Really red")
wait(.1)

for j=1,10 do

wait(.1)	

brick.Transparency=brick.Transparency - .1

end



while h.Health < 100 and (tp-bp).Magnitude<=5.6 do   ----------------------this line------------------------
	

wait(.111111)
h.Health=h.Health+4
	

end

print("All Healed! Step off to re")

x=Instance.new("StringValue")
x.Parent=h

while true do



wait(.5)

if torso:FindFirstChild("Value") ~= nil then break end

if (tp-bp).Magnitude>=5.6 then 
	

for _=1,10 do
	

wait(.1)	

brick.Transparency=brick.Transparency + .1


end

brick.BrickColor=BrickColor.new("Black")

for s_=1,10 do
	
	
wait(.1)	

brick.Transparency=brick.Transparency - .1	
	
NOOBMONSTER=Instance.new("StringValue")	
NOOBMONSTER.Parent=torso

end

end
 
end


 es=torso:GetChildren() 

for ess=1,#es do
	
if es[ess].Name==("Value") then es[ess]:Destroy() end
	
end

x.Parent=nil
db=false return end




end




db=false




end	


script.Parent.Touched:connect(heal)



2 answers

As with the other reply, I am at school so I can't test but I hope it works:

local heal = 4
local brick = script.Parent

brick.Touched:connect(function(obj)
	local on = false

	for i = 1, 10 do
		wait(.1)
		brick.Transparency = i/10
	end

	brick.BrickColor = BrickColor.new("Really red") wait(.1)

	for i = 9, 0, -1 do
		wait(.1)
		brick.Transparency = i/10
	end

	on = true
	brick.TouchEnded:connect(function(object)
		if obj == object then
			on = false
		end
	end)

	local human = obj.Parent:FindFirstChild("Humanoid")
	if human == nil then on = false end

	while on == true do
		if human.Health + heal > human.MaxHealth then
			human.Health = human.MaxHealth
			on = false
		end
		human.Health = human.Health + heal
		wait(.1)
	end
end)

Hey I am not 100% sure as I made this in school and I am not able to test it out on studio so if this works I am glad that it helped if not then mind telling me the problem?

--[[
	This is not yet tested just made off a guess so if it works your welcome if not tell me what the error is
]]

local part -- Make sure to say what is this part
local on = false

part.Touched:connect(function(obj)
	if(obj ~= nil)then
		if (obj:FindFirstChild("Humanoid") ~= nil) then
			on = true
			CheckIsOn(obj, 1)
		end
		repeat wait() until obj == nil
		on = false
	end
end)

function ChangeHealth(person, amountHeal)
	while wait() do
		if on == true then
			if person:FindFirstChild("Humanoid").Health < 100 then
				person:FindFirstChild("Humanoid").Health = person:FindFirstChild("Humanoid").Health + amountHeal
			else
				break
			end
		else
			break
		end
	end
end

This discussion is preserved as it was. New answers, comments, and votes are closed.