The warning he was giving there is that using a FSM style loop could just become difficult/complicated, but there's no issues from using this style of loop/architecture. Luckily we have Lape which makes such methods, like determining the script's current cycle, much easier. Here's an example:
PS:
Simba Code:
Function getState(): State;
begin
if not isLoggedIn() then
Exit;
if Me.inCombat() then
result := BANKWALK;
if result <> 0 then
Exit;
if insideBank() then
begin
if (isInvFull() or (not hasEquipment)) then
result := BANKING;
if result <> 0 then
Exit;
result := SPOTWALK;
end;
end;
Lape:
Simba Code:
Function getState(): State;
begin
if not isLoggedIn() then
Exit;
if Me.inCombat() then
Exit(BANKWALK);
if insideBank() then
begin
if (isInvFull() or (not hasEquipment)) then
Exit(BANKING);
result := SPOTWALK;
end;
end;
With Lape we could exit and pass along the result of a function at the same time, so there won't ever be more than one result.