I have a suggestion unrelated to your break question.
Code:
Procedure SmeltFurnace;
begin
repeat
If not(FindObj(x,y,'urna',MSFurnace,10))then
begin
WalkToFurnaceSymbol;
end;
repeat
if (FindObj(x,y,'urna',MSFurnace,10))then
begin
Writeln('using furnace');
Wait(500+Random(100));
UseItem(2);
Mouse(x,y,1,1,false);
if (ChooseOption(x, y, 'urna')) then
begin
Writeln('Chose opotion');
Flag;
if(FindNormalRandoms) then
begin
Break;
end;
end;
end;
Wait(500+Random(250));
until(FindText(x, y, 'would', Upchars, 190, 25, 245, 50));
until(FindText(x, y, 'would', Upchars, 190, 25, 245, 50));
end;
So, you want to make sure you are at the furnace before you continue on. As you have it written, you will run WalkToFurnace one time and then continue on. This ASSUMES that WalkToFurnace worked correctly, but that may not be true. You can have the exact same functionality and include a second symbol check with one simple change.
Code:
Procedure SmeltFurnace;
begin
repeat
If not(FindObj(x,y,'urna',MSFurnace,10))then
begin
WalkToFurnaceSymbol;
SmeltFurnace;
Exit;
end;
etc
So, if you see the furnace, you continue on normally. If you don't see the furnace you run WalkToFurnaceSymbol, then you restart the entire procedure, which adds another check. Now if you find the furnace then you continue on as normal. If not then you try to walk again.
This may not be appropriate in your particular script, depending on what type of checking and failsafes you include elsewhere, but it's a strategy that I'm beginning to use more in my scripts now and it works well.