Page 1 of 1
Скрипт на взятие бодов.ChangeProfile()
Posted: 25.07.2013 17:41
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.
Re: Скрипт на взятие бодов.ChangeProfile()
Posted: 25.07.2013 18:59
by Vizit0r
а кто за тебя будет значения, возвращаемые ChangeProfile проверять ?
function ChangeProfile(Name : String) : Integer;
SinChangeProfileResult := -1; // чар = nil
SinChangeProfileResult := -2; // этот чар подключается
SinChangeProfileResult := -3; // выполняется больше одного скрипта
SinChangeProfileResult := -4; // нет такого профиля
SinChangeProfileResult := 0; // успех
Re: Скрипт на взятие бодов.ChangeProfile()
Posted: 25.07.2013 19:39
by King_Artes
Возвращает 0. В тех местах где должна происходить смена профиля. Но смены профиля не происходит
Re: Скрипт на взятие бодов.ChangeProfile()
Posted: 25.07.2013 20:16
by King_Artes
Я тут немного подебажил, и увидел, что после дисконекта, не происходит перехода на следущую итерацию. А снова отрабатывает While. Я конечно давно не программировал на паскале, но что-то я неприпоминаю такой логики в программировании в целом, что бы цикл перехватывал управления после того как отработал. Тоесть получается, что как только происходит Disconect, вместо перехода на следущую итерацию фор, как должно быть поинструкции, срабатывает условие not Connected(), и скрипт переходит в бесконечный while.
Re: Скрипт на взятие бодов.ChangeProfile()
Posted: 25.07.2013 21:14
by Gauhar
Может поможет, то предположу, что все БОДеры находятся на одном аккаунте, если это так, то для для каждого бодера следует установить слот в котором он сохранен на акккаунте:
- ProfilesSetup.JPG (26.98 KiB) Viewed 14004 times
Еще есть вариант что персонаж не успевает выйти из игры, тогда смотри все что указал Vizit0r.
Re: Скрипт на взятие бодов.ChangeProfile()
Posted: 25.07.2013 22:00
by King_Artes
Ну да так и есть. Я как бы профили так и настроил . Суть немного в другом. У меня реально каким то образом зацикливается кусок с проверкой на connected, причем зацикливается, если после этого цикла сделать disconect, такое впечатление, что после дисконекта, условие снова начинает отрабатывать пока не приконектится, потом снова дисконектится и снова срабатывает условие. Но может , это связано с connect(), если он делает диссконект перед подключением, тогда ясно почему идёт зацикливание.
Re: Скрипт на взятие бодов.ChangeProfile()
Posted: 25.07.2013 22:34
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.
Re: Скрипт на взятие бодов.ChangeProfile()
Posted: 26.07.2013 1:16
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.
Re: Скрипт на взятие бодов.ChangeProfile()
Posted: 26.07.2013 1:51
by Vizit0r
нормальная такая себе рекурсия.
я так понял, сейчас все нормально со сменой профиля?
Re: Скрипт на взятие бодов.ChangeProfile()
Posted: 26.07.2013 12:06
by King_Artes
Да всё хорошо
Re: Скрипт на взятие бодов.ChangeProfile()
Posted: 17.09.2016 2:34
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
Re: Скрипт на взятие бодов.ChangeProfile()
Posted: 17.09.2016 18:40
by Vizit0r
тоже баг, и тоже исправлено.Тоже в апдейте будет.
Если надо срочно (апдейт будет не так чтоб скоро) - пиши в асю-скайп.
Re: Скрипт на взятие бодов.ChangeProfile()
Posted: 01.11.2016 10:27
by Tune
Глядя на даты сообщений баг с ChangeProfile не исправлен еще, когда апдейт будет?
Re: Скрипт на взятие бодов.ChangeProfile()
Posted: 03.11.2016 16:05
by Vizit0r
хз. Будет наверное сразу 8я версия.
Если нужен апдейт - могу лично скинуть, в скайпе\асе.