Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7

Скрипт на взятие бодов.ChangeProfile()

тут можно задать вопрос по скриптингу
Post Reply
King_Artes
Posts: 8
Joined: 23.07.2013 23:07

Скрипт на взятие бодов.ChangeProfile()

Post by King_Artes »

Добрый день уважаемые знатоки. Хочу написать скрипт для взятия бодов на тейлор. Но есть маленькая проблемка, ChangeProfile почему-то не срабатывает в моем скрипте, немогу понять в чем ошибка. Подскажите пожалуйста где я ошибся. Суть в том, что если допустим открыть какой то профиль не из списка, то профиль поменяеться, на первый профиль из списка, но потом профиль остаётся первым из списка. Рекконект происходит, но всё время на одно и того же персонажа.

Code: Select all

Program New;
Var
Profiles : array[1..5] of string;
i: integer;

begin
Profiles[5] := 'Poppy';
Profiles[1] := 'Renek';
Profiles[2] := 'Karthus';
Profiles[3] := 'Heimerdinger';
Profiles[4] := 'Kotigoroshko';
For i:= 1 to 5 Do
    begin                       
       ChangeProfile(Profiles[i]);
       wait(1000);
       Connect(); 
       wait(5000);
       While not Connected() Do
       Begin
          Wait(60000);
          ChangeProfile(Profiles[i]);
          Wait(1000);
          Connect();
       End;
       RequestContextMenu($00000329);
       SetContextMenuHook($00000329, 3);
       Wait(1000);
       WaitGump(1);
       Disconnect();
    end;
end.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Скрипт на взятие бодов.ChangeProfile()

Post by Vizit0r »

а кто за тебя будет значения, возвращаемые ChangeProfile проверять ?
function ChangeProfile(Name : String) : Integer;

SinChangeProfileResult := -1; // чар = nil
SinChangeProfileResult := -2; // этот чар подключается
SinChangeProfileResult := -3; // выполняется больше одного скрипта
SinChangeProfileResult := -4; // нет такого профиля
SinChangeProfileResult := 0; // успех
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
King_Artes
Posts: 8
Joined: 23.07.2013 23:07

Re: Скрипт на взятие бодов.ChangeProfile()

Post by King_Artes »

Возвращает 0. В тех местах где должна происходить смена профиля. Но смены профиля не происходит
King_Artes
Posts: 8
Joined: 23.07.2013 23:07

Re: Скрипт на взятие бодов.ChangeProfile()

Post by King_Artes »

Я тут немного подебажил, и увидел, что после дисконекта, не происходит перехода на следущую итерацию. А снова отрабатывает While. Я конечно давно не программировал на паскале, но что-то я неприпоминаю такой логики в программировании в целом, что бы цикл перехватывал управления после того как отработал. Тоесть получается, что как только происходит Disconect, вместо перехода на следущую итерацию фор, как должно быть поинструкции, срабатывает условие not Connected(), и скрипт переходит в бесконечный while.
Gauhar
Novice
Novice
Posts: 87
Joined: 08.07.2008 17:40

Re: Скрипт на взятие бодов.ChangeProfile()

Post by Gauhar »

Может поможет, то предположу, что все БОДеры находятся на одном аккаунте, если это так, то для для каждого бодера следует установить слот в котором он сохранен на акккаунте:
ProfilesSetup.JPG
ProfilesSetup.JPG (26.98 KiB) Viewed 13814 times
Еще есть вариант что персонаж не успевает выйти из игры, тогда смотри все что указал Vizit0r.
King_Artes
Posts: 8
Joined: 23.07.2013 23:07

Re: Скрипт на взятие бодов.ChangeProfile()

Post by King_Artes »

Ну да так и есть. Я как бы профили так и настроил . Суть немного в другом. У меня реально каким то образом зацикливается кусок с проверкой на connected, причем зацикливается, если после этого цикла сделать disconect, такое впечатление, что после дисконекта, условие снова начинает отрабатывать пока не приконектится, потом снова дисконектится и снова срабатывает условие. Но может , это связано с connect(), если он делает диссконект перед подключением, тогда ясно почему идёт зацикливание.
Gauhar
Novice
Novice
Posts: 87
Joined: 08.07.2008 17:40

Re: Скрипт на взятие бодов.ChangeProfile()

Post by Gauhar »

Часть моего скрипта:

Code: Select all

PROGRAM ProgramName;

VAR
   myProfiles: array of String;   // Важно! Настраиваем в основном блоке скрипта.
   nProfile: Integer;
   timeOrder: array of TDateTime;


BEGIN
   myProfiles := ['BODER-1','BODER-2','BODER-3','BODER-4','BODER-5'];

   SetLength(timeOrder, Length(myProfiles));
   for nProfile := 0 to (Length(timeOrder) - 1) do
      timeOrder[nProfile] := 0;

   FindDistance := 8;
   FindVertical := 20;

   repeat
      for nProfile := 0 to Length(myProfiles) - 1 do
      begin
         if (Now > timeOrder[nProfile])  then
         begin
            ChangeProfile(myProfiles[nProfile]);

            SetARStatus(TRUE);
            if not Connected() then
            begin
               Connect();
               while not Connected() do wait(100);
               wait(5000);
            end;
            
            {
               ЗДЕСЬ ВСЕ ЧТО СВЯЗАНО С ПОЛУЧЕНИЕМ БОДОВ.
            }
            
            SetARStatus(FALSE);
            Disconnect();
            timeOrder[nProfile] := Now + 1.0 / 24;  // Следующий заказ брать через час. (зависит от скилла бодера)
            wait(5*60*1000);   // Ждем пока бодер не выйдет из игры.
         end;
      end;
      wait(1000);
   until FALSE;
END.
King_Artes
Posts: 8
Joined: 23.07.2013 23:07

Re: Скрипт на взятие бодов.ChangeProfile()

Post by King_Artes »

Благодарю за пример. Я решил чуть по другому, через рекурсивные процедуры.
Если кому-то интересно, вот

Code: Select all

Program New;
Var
Profiles : array[1..5] of string;
i, result: integer;

procedure changeChar(var ProfileName: string);
Begin
   result := ChangeProfile(ProfileName);                      
   AddToSystemJournal(IntToStr(result));
   AddToSystemJournal(ProfileName); 
   wait(1000);
   if not result = 0 then changeChar(ProfileName);
End;

procedure Connecting();
Begin
   Connect();
   wait(5000);
   if not Connected() then 
   Begin
   AddToSystemJournal('reconecting');
   wait(60000);
   Connecting();
   End
   else 
   AddToSystemJournal('connected');
End;

begin
Profiles[5] := 'Poppy';
Profiles[1] := 'Renek';
Profiles[2] := 'Karthus';
Profiles[3] := 'Heimer';
Profiles[4] := 'Kotigoroshko';
While True Do 
Begin
For i:= 1 to 5 Do
    begin
       Disconnect();
       changeChar(Profiles[i]); 
       Connecting();
       AddToSystemJournal('Taking bod');
       RequestContextMenu($00000329);
       SetContextMenuHook($00000329, 3);
       Wait(1000);
       WaitGump('1');
       Wait(2000);     
    end;
End;
end.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Скрипт на взятие бодов.ChangeProfile()

Post by Vizit0r »

нормальная такая себе рекурсия.

я так понял, сейчас все нормально со сменой профиля?
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
King_Artes
Posts: 8
Joined: 23.07.2013 23:07

Re: Скрипт на взятие бодов.ChangeProfile()

Post by King_Artes »

Да всё хорошо
GeeZeR
Apprentice
Apprentice
Posts: 226
Joined: 28.01.2012 19:48

Re: Скрипт на взятие бодов.ChangeProfile()

Post by GeeZeR »

У меня не получается с ChangeProfile.
Все персонажи отключены. В окне 2 перса из одного аккаунта. 1-й по списку профайл называется "Boddy". Выделяю второй профайл (Alkanavt), запускаю в нём скрипт:

Code: Select all

Program Test;
BEGIN
ChangeProfile('Boddy');
END.
Результат:

Code: Select all

00:55:40:690 [Alkanavt]: Compiling
00:55:40:793 [Alkanavt]: Compiled succesfully
00:55:40:820 [Alkanavt]: Exec: [Error] (test.sc at line 6). Pax Unhandled Exception : Stack overflow
Error line is: " ChangeProfile('Boddy'); "
00:55:40:822 [Alkanavt]: Succesfully executed
00:55:40:823 [Alkanavt]: Script test.sc stopped successfuly
Пробовал поймать код ошибки:

Code: Select all

Program Test;
var
errcode : integer;
BEGIN
errcode := ChangeProfile('Boddy');
AddToSystemJournal(IntToStr(errcode));
END.
Результат:

Code: Select all

00:57:00:179 [Alkanavt]: Compiling
00:57:00:299 [Alkanavt]: Compiled succesfully
00:57:00:342 [Alkanavt]: Exec: [Error] (test.sc at line 6). Pax Unhandled Exception : Stack overflow
Error line is: " errcode := ChangeProfile('Boddy'); "
00:57:00:344 [Alkanavt]: Succesfully executed
00:57:00:345 [Alkanavt]: Script test.sc stopped successfuly
Attachments
changeprofile.png
changeprofile.png (59.92 KiB) Viewed 11811 times
Stealth 8.10.2 | Клиент: 7.0.13.4
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Скрипт на взятие бодов.ChangeProfile()

Post by Vizit0r »

тоже баг, и тоже исправлено.Тоже в апдейте будет.
Если надо срочно (апдейт будет не так чтоб скоро) - пиши в асю-скайп.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Tune
Neophyte
Neophyte
Posts: 25
Joined: 09.01.2014 6:08

Re: Скрипт на взятие бодов.ChangeProfile()

Post by Tune »

Глядя на даты сообщений баг с ChangeProfile не исправлен еще, когда апдейт будет?
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Скрипт на взятие бодов.ChangeProfile()

Post by Vizit0r »

хз. Будет наверное сразу 8я версия.
Если нужен апдейт - могу лично скинуть, в скайпе\асе.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Post Reply