I know you don't like 1-line functions, but most scripters (especially jr. members) don't know ThreadSafeCall.
Achtung! Procedures must have no parameters!
SCAR Code:
RandomProcedure(['MouseAntiban', 'MapAntiban', 'RandomGametab']; // correct
RandomProcedure['MakeCompass(360)', 'MouseBox(msx1, msy1, msx2, msy2, 3)', 'TypeSend(''I am bored'')']); // incorrect
SCAR Code:
procedure RandomProcedure(Procedures: TStringArray);
var
tmp: TVariantArray;
begin
if not loggedin then exit;
ThreadSafeCall(Procedures[random(length(Procedures))], tmp);
end;