function Relog(CharIndex: integer = -1): boolean; // релогается на персонажа с указанным номером
var i: integer; // (по умолчанию заходит на того же что и был)
begin
result:= false;
if (CharIndex > 6) then exit; // выходим, если некорректный индекс персонажа
while (User.InCombat) do delay(99); // ждем пока не выйдем из боя
// если у нас есть поток на дисконнект, то меняем глобальную
// переменную, чтобы он перестал работать на время релога
// gBlockDisconnectThread:= true;
if Engine.Restart then // если удалось сделать рестарт, то
while (Engine.Status = lsOnline) do delay(999); // ждем, пока не выйдем на панель выбора персонажей
Delay(5000); // ждем дополнительно 5 сек для прогрузки
if (CharIndex = -1) then begin // если индекс персонажа не был указан, то
if Engine.GameStart() then // заходим на того же персонажа что и был
while (Engine.Status <> lsOnline) do delay(999); // и ждем входа в игру
end else begin // если же индекс персонажа был указан, то
if Engine.GameStart(CharIndex) then // заходим на персонажа с указанным номером
while (Engine.Status <> lsOnline) do delay(999); // и аналогично ждем входа в игру
end;
Delay(5000); // ждем дополнительное время для прогрузки
// gBlockDisconnectThread:= false; // включаем обратно поток проверки дисконнекта, если таковой имеется
result:= true;
end;
begin
// code ...
Relog(); // релогнется и зайдет на того же персонажа
// or
Relog(3); // релогнется и зайдет на 4го персонажа (индексы 0-6)
end.