Перейти к содержимому

Фотография
- - - - -

Проверка статусов всех аккаунтов из скрипта


Лучший Ответ fiveten, 20 Март 2020 - 00:28

Разобрался сам. Если кому поможет, то вот код: uses SysUtils; ////функция получения индекса аккаунта из менеджера function GetBotIndex(): integer; var i: integer; begin Result:= -1; for i:= 0 to BotList.count - 1 do // пробегаемся по списку аккаунтов в боте if (TBot(BotList(i)) = Bot) then begin // сравниваем каждый элеме... Перейти к сообщению


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 4

#1
fiveten

fiveten
  • 3
    1
    Не выбрано
    • Lvl 1
    • Пользователь

Всех приветствую, пытаюсь реализовать последовательный автологин на много окон. В связи с чем, возникла потребность реализовать проверку LoginStatus и Status предыдущего по индексу аккаунта в менеджере (Задумка, чтобы каждый последующий аккаунт ждал полной прогрузки предыдущего перед включением игры). Пока не представляю с какой стороны походить к этому вопросу, т.к. только начинаю погружаться в скриптописание. Можно-ли ограничиться простой проверкой с правильно указаным юзером, или надо добавлять процедуру и вызывать её с помощью Entry? Буду благодарен любой помощи в данном вопросе! 


  • 0

#2
fiveten

fiveten
  • 3
    1
    Не выбрано
    • Lvl 1
    • Пользователь

Разобрался сам. Если кому поможет, то вот код:

 uses SysUtils;

////функция получения индекса аккаунта из менеджера

function GetBotIndex(): integer;
var i: integer;
begin
  Result:= -1;
  for i:= 0 to BotList.count - 1 do          // пробегаемся по списку аккаунтов в боте 
    if (TBot(BotList(i)) = Bot) then begin   // сравниваем каждый элемент с объектом нашего аккаунта
      Result:= i;
      break;
    end;
end;

////Выводим статусы предыдущего аккаунта. 
var
Bot: Tbot;
begin
 Bot:= TBot(Botlist(GetBotIndex()-1));
 print(Bot.Control.Status);
 print(Bot.Control.LoginStatus);
end.

  • 1

#3
ScythLab

ScythLab

Функцию GetBotIndex, скорей всего, можно упростить:

function GetBotIndex(): Integer;
begin
  Result := BotList.IndexOf(Bot);
end;
если вообще функция такого вида нужна.
 
Bot:= TBot(Botlist(GetBotIndex()-1));

что будет с этим скриптом, если запустить его для первого аккаунта?


Сообщение отредактировал ScythLab: 20 Март 2020 - 06:53

  • 1

Хобби: разработка непубличного бота для Lineage


#4
fiveten

fiveten
  • 3
    1
    Не выбрано
    • Lvl 1
    • Пользователь

Cпасибо за комментарии, функцию взял на сайте с разбором API, действительно ваш вариант намного аккуратнее. Да и вообще с IndexOf потребность в функции пропадает.  

 

По поводу первого аккаунта - пример выше просто Proof of concept. В скрипте, что я пытаюсь из себя родить используется конструкция такого вида: 

	if (GetBotIndex <> 0) then begin
        Bot:= TBot(Botlist(GetBotIndex()-1));
 	while  (Bot.Control.Status <> lsOnline) and (Bot.Control.LoginStatus <> 2) do Delay(3000);
 	end;

Наверняка тут тоже можно добавить элегантности, но вроде велосипед едет. Я рад. 

 

Сейчас решаю проблему выбивания окон, которые не справились с логином с n попыток. 


  • 0

#5
pups

pups

зачем изобретать велосипед? юзай уже готовые функции

function GetControl(Name: string): TL2Control;
function GetControlByIndex(Index: integer): TL2Control;

  • 1

Discord: pups#9809



Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных

Rawr.pro - Сделано с для игроков.