aspid
27.05.2004, 16:55
Дообрых суток, опять я гужу... :)
Суть в чём, хочу написать скрипт с отгрузкой из сундука, производством последующим рекалом, продажей, возвращением назад (опять таки рекал) и повтором до окончания ресурсов в сундуке. Никаких проблем не возникает кроме части с производством. Я хотел сделать его через КрфтМеню, поскольку проверка цвета лично мне неудобна. После некоторых мучений написан следующий кусок, но он зараза не работает, а почему - не могу понять совершенно...
Общая логика следующая, посылается кнопка, на которую забинден ЛфстОбджэкт (этого хватает, произвожу удочки) после чего в цикле идёт проверка из 3 вариантов. Первое: Если найдено крафт меню карпентри, то проверяет его и если третий пункт - веапон то щёлкает в него, ждёт появления крафтменю веапон и если в нём первым идут удочки, то кликает на них, если не удочки - фэлс, если в течении 15 секунд меню вэапон не возникнет - фэлс. Второе: если появилось сразу крафтменю веапон (логов осталось менее 10) то проверяет есть ли в нём удочки (индекс 0) и если есть то делает, иначе фалс. Третье: если от сервера пришло сообщение о нехватке ресурсов на что-либо то фэлс.
Ожидание выполнения одного из этих 3 вариантов происходит 15 секунд, после чего - фэлс.
Очень важно мне чётко доводить производство до конца, потому что я хоть и проверяю перед загрузкой бэкпэк на наличие остатков и гружусь всегда до одного и того же значения вне зависимости от чего-либо, однако появление в бэкпеке лишних непонятных предметов карпентри производства смерти подобно...
Помогите дураку, а то уже мозги отказывают... :)
Вот тело функции в проверочном скрипте (k введена для использования внутренних циклов ожидания и уточнения продолжительности основного цикла функции):
Program UOScriptTest;
Function Carpentry(): boolean;
var
i, j, k: longint;
MenuIndex: longint;
ItemName: string;
begin
k := 0;
j := 0;
sendkey(k_Insert);
repeat
if (FindCraftMenu('Carpentry', MenuIndex) = True) then
begin
GetMenuItemName(MenuIndex, 2, ItemName);
if (Pos(ItemName, 'Weapon') = 1) then
begin
leftdoubleclick(237,72);
i := 0;
repeat
Delay(500);
if (i >= 30) then
begin
k := 2;
break;
end;
i := i + 1;
Until (FindCraftMenu('Weapon', MenuIndex) = True);
GetMenuItemName(MenuIndex, 0, ItemName);
if (Pos(ItemName, 'fishing') = 1) then
begin
leftdoubleclick(117,69);
Delay(3000);
k := 1;
break;
end;
// else
// begin
// k := 2;
// break;
// end
end;
end
else if (FindCraftMenu('Weapon', MenuIndex) = True) then
begin
GetMenuItemName(MenuIndex, 0, ItemName);
if (Pos(ItemName, 'fishing') = 1) then
begin
leftdoubleclick(118,68);
Delay(3000);
k := 1;
break;
end
else
begin
k := 2;
break;
end
end
else if (Pos(_lastmsg, 'you can') = 1) then
begin
k := 2;
break;
end
else
begin
Delay(500);
j := j + 1;
end;
Until ((k <> 0) or (j >= 30));
if (k = 1) then Result := True
else Result := False
end;
begin
repeat
Until(Carpentry() = False);
end.
Суть в чём, хочу написать скрипт с отгрузкой из сундука, производством последующим рекалом, продажей, возвращением назад (опять таки рекал) и повтором до окончания ресурсов в сундуке. Никаких проблем не возникает кроме части с производством. Я хотел сделать его через КрфтМеню, поскольку проверка цвета лично мне неудобна. После некоторых мучений написан следующий кусок, но он зараза не работает, а почему - не могу понять совершенно...
Общая логика следующая, посылается кнопка, на которую забинден ЛфстОбджэкт (этого хватает, произвожу удочки) после чего в цикле идёт проверка из 3 вариантов. Первое: Если найдено крафт меню карпентри, то проверяет его и если третий пункт - веапон то щёлкает в него, ждёт появления крафтменю веапон и если в нём первым идут удочки, то кликает на них, если не удочки - фэлс, если в течении 15 секунд меню вэапон не возникнет - фэлс. Второе: если появилось сразу крафтменю веапон (логов осталось менее 10) то проверяет есть ли в нём удочки (индекс 0) и если есть то делает, иначе фалс. Третье: если от сервера пришло сообщение о нехватке ресурсов на что-либо то фэлс.
Ожидание выполнения одного из этих 3 вариантов происходит 15 секунд, после чего - фэлс.
Очень важно мне чётко доводить производство до конца, потому что я хоть и проверяю перед загрузкой бэкпэк на наличие остатков и гружусь всегда до одного и того же значения вне зависимости от чего-либо, однако появление в бэкпеке лишних непонятных предметов карпентри производства смерти подобно...
Помогите дураку, а то уже мозги отказывают... :)
Вот тело функции в проверочном скрипте (k введена для использования внутренних циклов ожидания и уточнения продолжительности основного цикла функции):
Program UOScriptTest;
Function Carpentry(): boolean;
var
i, j, k: longint;
MenuIndex: longint;
ItemName: string;
begin
k := 0;
j := 0;
sendkey(k_Insert);
repeat
if (FindCraftMenu('Carpentry', MenuIndex) = True) then
begin
GetMenuItemName(MenuIndex, 2, ItemName);
if (Pos(ItemName, 'Weapon') = 1) then
begin
leftdoubleclick(237,72);
i := 0;
repeat
Delay(500);
if (i >= 30) then
begin
k := 2;
break;
end;
i := i + 1;
Until (FindCraftMenu('Weapon', MenuIndex) = True);
GetMenuItemName(MenuIndex, 0, ItemName);
if (Pos(ItemName, 'fishing') = 1) then
begin
leftdoubleclick(117,69);
Delay(3000);
k := 1;
break;
end;
// else
// begin
// k := 2;
// break;
// end
end;
end
else if (FindCraftMenu('Weapon', MenuIndex) = True) then
begin
GetMenuItemName(MenuIndex, 0, ItemName);
if (Pos(ItemName, 'fishing') = 1) then
begin
leftdoubleclick(118,68);
Delay(3000);
k := 1;
break;
end
else
begin
k := 2;
break;
end
end
else if (Pos(_lastmsg, 'you can') = 1) then
begin
k := 2;
break;
end
else
begin
Delay(500);
j := j + 1;
end;
Until ((k <> 0) or (j >= 30));
if (k = 1) then Result := True
else Result := False
end;
begin
repeat
Until(Carpentry() = False);
end.