PDA

Просмотр полной версии : UOScript, CraftMenu - блин, уже каша в голове, может кто знает?



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.

Romis
27.05.2004, 17:32
Слушай, а зачем ты вобще тогда играеш? Чтобы после ТАКОГО макроса подойти к компу через недельку-другую :-) и сказать себе: ух ты карпентри ГМ! как здорово я поиграл! стоолько удовольствия получил! :-)
Я начал было читать это как его там млин... тело чье-то... скрипта какого-то :-) дак у меня сразу мозги чуть не отказали :-) Не забивай себе голову короче этой шнягой :-)
Положил вечерком в пак логов 500, запустил простенький макрос с проверкой цвета, скрафтил, продал, купил регов, химии чуток, пошел позажигал - повеселился :-)

aspid
27.05.2004, 17:53
Положил вечерком в пак логов 500, запустил простенький макрос с проверкой цвета, скрафтил, продал, купил регов, химии чуток, пошел позажигал - повеселился :-)

На форуме пофлудил... Даже близко не похоже на ответ... Я в УО играю с 99 года, интересы сместились...
Вопрос не в карпентри, оно давно гм, вопрос интереса и производительности крафтера...

Mips
27.05.2004, 19:37
Что-то я так и не понял проблемы.


//Фукнция ожидания гампа с именем aTitle в течении aTimeOut милисекунд.
//Если меню не появилось или таймаут истёк, функция возвращает False, иначе True.
//aTitle - название гампа.
//aTimeOut - Таймаут в милисекундах.
//Версия уоскрипта 1.48.
function WaitGump(aTitle: string; aTimeOut: longint): Boolean;
var
fGump, Pause: longint;
begin
Pause:=0;
Repeat
Delay(200);
Pause:=Pause+200;
Until (FindCraftMenu(aTitle, fGump)) or (Pause>aTimeOut);
Result:=Pause<=aTimeOut;
end;
После LastObject дожидаешься меню. Если не дождался, проверяешь ластмесаг. Если в нём говорится о нехватке ресурсов, летишь продавать. Если меню появилось, смотришь сколько в меню итемов(GetMenuItemsCount), перебираешь их все в цикле. Если не найден нужный итем, летишь продавать. Если найден нужный итем (удочки), устанавливаешь его как первый(SetFirstItemIndex) элемент меню и кликаешь на первый итем меню. Ждёшь смены ластмесаджа, чтобы в нём был либо put, либо fail. Никогда такой подход не подводил.
На сколько я помню при изготовлении удочек открывается одно меню.
И ещё, юзай набор плотника (а не пилу), он сбивает ластмесаг.

aspid
27.05.2004, 20:38
Спасибо, я уже разобрался (проспался для начала, этого оказалось достаточно)... Я просто пытался рассмотреть большее кол-во вариантов чем существовало на самом деле, это меня и губило со страшной силой... :)

Romis
28.05.2004, 10:48
Положил вечерком в пак логов 500, запустил простенький макрос с проверкой цвета, скрафтил, продал, купил регов, химии чуток, пошел позажигал - повеселился :-)

На форуме пофлудил... Даже близко не похоже на ответ... Я в УО играю с 99 года, интересы сместились...
Вопрос не в карпентри, оно давно гм, вопрос интереса и производительности крафтера...
Ну дак сразу бы так и сказал :-) Что интерес к игре уже прошел, и теперь всякая чушь в голову лезет :-) Не знаеш уже чем бы заняться.
P.S. Old Oskom Free - это Action, а не экономическая стратегия :-) Папа Карло ты наш :-)

aspid
28.05.2004, 11:48
Ненавижу вас, долбаных квакеров... Такие как вы и делают из УО экшэн. Это не экшен а РОЛЕВАЯ блин игра, виртуальная реальность, где можно быть хоть пекарем хоть простым путешественником и наслаждаться этим, играйте в контру раз у вас интересы столь ограничены... Материальная сторона это не подпорка для сражений, это другая грань красивой разнообразной игры...