Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

UoKit.com Форумы _ UO Pilot в онлайн играх _ Рыбалка в вов трудности написания скрипта

Автор: mirace379 12.11.2016, 19:33

Здравствуйте пользователи уопилота
раньше использовал сей инструмент вместе с другими как кликер по большей части
сейчас решил погнуть пальцы и реализовать бота для рыбалки в вов
ну и все хорошее на этом заканчивается и начинаются тучи проблем
во первых много раз вспомнил создателя языка программирования уопилота разными словами так сказать прощу прощения за форму подачи материала но не за содержание
во вторых программа постоянно ругается на ошибки на точки запятые в цифрах на условия в иф и многое другое сильно отличающееся от того же пхп
в третьих примеры не очень помогли честно говоря из хелпа по решению этой задачи
стратегию выбрал такую
кидает персонаж поплавок тот дергается потом часть поплавка уходит в воду то есть пиксели исчезают
думал ну фигня вопрос посчитаю пиксели сколько было сколько стало причем несколько раз в секунду
очертил поле и запустил и нефига не помогло
много времени кстати потратил на паинт так и не понял как там определять десятичный код цвета
пришлось качать еще фаст стоне на качанул сначала вивер а потом понял что надо капчур
короче оттуда вытащил код цвета
а оказалось что можно прямо из уопилота цвет брать
правда есть проблема когда курсор приближается к поплавку он меняет форму и становится не понятно на какую точку он указывает
в общем взял из уопилота значение десятичное построил скрипт но не понял как запомнить значения в каждом цикле то есть
поплавок на месте не стоит он движется и количество пикселей меняется но не сильно
потом он дергается и тогда резкое изменение количества пикселей но оно всегда разное
тут я забуксовал
потом решил просто брать пиксель красный и смотреть его координату
которая должна по игреку то есть высоте была меняться
но было не стабильно потому что изза движения поплавка скрипт искал первую точку схожую по цвету а не одну и ту же
а мне нужна была точка на картинке поплавка и отслеживать ее координату
короче этот вариант тоже забраковал
пока разбирался с синтаксисом ууууууууууууууууууууууу
в общем скрипт такой так но не очень пашет
повторюсь
закидываю поплавок
он дергается
потом уходит вся пробка под воду перья остаются
потом поднимается
надо тут навести курсор мыши и нажать на левую кнопку
если опоздал то рыбалка закончилась надо снова кидать поплавок
когда пробка уходит под воду она становится по цвету примерно как вода
скрипт и картинка
на ф1 остановку делал
на 1 запуск поплавка
анализ точек условия костыли для логики

Код

//set #a findcolor ( 644 109 1137 375 1 1 (6047841) %close 2 ) // поиск в рабочем окне
//set workwindow 5780
set hotkeystart {F1}
set #f 0
set #a 0
set #b 0
while 0 < 1
set #d findcolor (482, 95 1353, 479 1 1 (16744287) %arr 2 1 5)
log #d
log #f
set #m %arr [1 2]
log #m
//end_while
if #d > 0
if #b = 0
   set #f %arr [1 2]
set #b 1
    end_if
    set #g #f + 4
if  #g < #m
set #a 2

end_if
        // если найден нужный цвет, то делаем двойной левый клик мышкой в первой найденной точке
// move %arr [1 1], %arr [1 2]
// msg Цвет уже найден!
        log #a
if #a > 1
//else
log Цвет найден
move %arr [1 1], %arr [1 2]
wait random(1000)
left %arr [1 1] %arr [1 2]
wait random(1000)
move random(1000), random (100)
wait random(3000)

set #a 0
set #f 0
set #b 0
send217 {1}
wait random(3000)
// msg Цвет не найден!
// log #d
set #a 0
set #f 0
set #b 0
end_if
else
send217 {1}
wait random(3000)
end_if
end_while


помогите пожалуйста делом


Прикрепленные файлы
Прикрепленный файл  1WOW.bmp ( 5,19 мегабайт ) Кол-во скачиваний: 1432

Автор: cirus 12.11.2016, 20:27

Цитата
поплавок на месте не стоит он движется и количество пикселей меняется но не сильно
потом он дергается и тогда резкое изменение количества пикселей но оно всегда разное
тут я забуксовал

Код
set #a 1000
while #a > 10         // пока найдено больше 10 пикселей (подобрать нужное значение)
     set #a findcolor (...)      // искать цвет
     hint #a
     wait 1
end_while

Если будет найдено меньше 10 пикселей, значит поплавок опустился в воду.

Автор: mirace379 12.11.2016, 21:21

Здравствуйте
ты проверял?
там в каждый раз разные значения
размеры поплавка разные разные количества пикселей и часто уопилот не успевает перебрать количество пикселей а поплавок вспыл уже
бывает что 100+ находит бывает 40
послы нырка тоже по разному бывает 3 бывает 30

Автор: cirus 12.11.2016, 22:14

Цитата
бывает что 100+ находит бывает 40
послы нырка тоже по разному бывает 3 бывает 30

30 и 40 уже отличаются. Я сразу написал значения придётся подбирать. Также можно указать в Findcolor несколько цветов, искать не только красный, но и синий.

Автор: mirace379 13.11.2016, 17:07

Здравствуйте
красный и синий не уходят под воду
но перья красные и синие меняют положение и количество пикселов меняется даже если поплавок в воду не ушел
заранее сказать сколько пикселов будет сложно
я не смог решить задачу
мне нужно взять первый проход скрипта
один раз прошелся и указал что пикселей нужного цвета 100
мне надо куда то это записать число первое
и с ним сравнивать колебания количества пикселей в последющих проходов скрипта
в первый раз 100 поплавок на поверхности
второй раз пикселей стало 110 поплавок на поверхности
сравниваю 100 и 110 разница меньше 30 значит все нормально
третий раз пробегает скрипт стало 90 пикселей
сравниваю 100 и 90 разница меньше 30 значит не клюет еще
тут кстати я не смог запустить проверку не понял как модульбрать
делал с абс но ничего не получилось
отрицательное значение выводило когда например делал абс(90-100)
получалось вроде -1 в логе
как решить не понял
а потом при очередном прохождении скрипта бац и количество пикселов 50
вычитаю и 50 100 через модуль как то делаю и получаю 50 что больше 30
значит поплавок ушел в воду значит надо подсекать
как это все сделать?
как запомнить первое значение количества пикселов? и сравнивать его с последующими значениями
потмо когда рыбу вытащил надо обнулить его снова и снова запомнить первое эталонное значение
в общем тут забуксовал во многих темах сразу
кто может помогите из моего сумбура вытащите полезное и оформите в скрипт пожалуйстаsmile.gif

Автор: cirus 13.11.2016, 17:57

Код
set #raznica 0

set #a findcolor (...)      // первый поиск
log #a                      // нашлось пикселей

while #raznica < 30         // пока разница между первым и последующими поисками меньше 30
     set #b findcolor (...)      // искать цвет
     set #raznica #a - #b        // разница между первым поиском и следующим
     set #raznica abs(#raznica)   // модуль разницы
     hint #raznica
     wait 10
end_while
log  !!!!!!!!!!!!

Автор: mirace379 13.11.2016, 18:20

Здравствуйте как минимум спасибо за пример с модулемsmile.gif
можешь еще показать пример как цифры написать
1.5 или 1,5 если надо умножить например
set #r #d/1.5 или set #r #d/1,5
и еще почему например условие вызывает ошибку
if #g +4 < #m/2
что такое у меня было и получилось синтакс эррор

по поводу твоего скрипта
повторюсь
делал в своем скрипте отслеживание количества пикселей
в логе было так
50
57
39
18 тут поплавок ушел в воду
29 тут он всплыл
39
57
64
0 тут время вышло поплавок исчез тут я запускаю новый цикл ловли по условию
а бывает что поплавок закинулся ближе и он больше по размеру
значения такие
126
118
135
122
147
153 тут он подпрыгнул
89 ушел под воду
128 снова на поверхности
я к тому что я не знаю заранее каков диапазон прыжка будет
и сколько пикселей останется над водой
может 30 быть может 10 может 20
а если просто жмакать курсором на поплавке когда не клюет он будет просто исчезать и все надо начинать снова
возможно ты не играл в вов
потому ссылка на платного фишбота https://www.youtube.com/channel/UCRleP4ZVfCkirV0zpFFnpGw/videos
я его тестил он пашет но он платный и я захотел сделать примерно такой же по функционалу но без платыsmile.gif
там на видео механика ловли показана
может так будет понятней сам то я наверное мало что понял из своей писаниныsmile.gifтак что благодарю за терпение

Автор: cirus 13.11.2016, 18:35

Цитата
if #g +4 < #m/2

В условиях вычисления не поддерживаются. Можно так:
Код
set #tmp #g + 4
set #tmp2 #m / 2
if #tmp < #tmp2

Цитата
1.5 или 1,5 если надо умножить например
set #r #d/1.5 или set #r #d/1,5

Пилот работает только с целыми числами.
Код
set #r #d * 2 / 3     // тоже самое что set #r #d/1.5 

Либо использовать https://forum.uokit.com/index.php?showtopic=29139. Но при этом также придётся округлять число до целого чтобы использовать дальше.

Автор: mirace379 13.11.2016, 23:31

Здравствуйте
благодарю потестю 20 часов осталось акку в вовеsmile.gif
7 часть писал книги своейsmile.gifможешь считать что частично тебе посвятилsmile.gif
http://samlib.ru/p/putewoj_m/
если успею отпишу как там с рыбалкой а если не успею до закрытия акка то все равно спасибо за разъяснения функционала твои бы ответы в вики добавить хорошо было быsmile.gif
а так по рыбалке выяснил что не выгодно в вове нынче это даже на месяц оплаты не наловишь
решил просто уопилот для развития своих навыков потестить раньше не тестировал распознавание с экрана а тема оказывается интереснаяsmile.gif
еще тема мультибоксинга интересна тоже два одинаковых окна в два одинаковых персонажа и одни и теже нажатия в оба окна и так фармитьsmile.gif в 2 раза больше одними тем же усилием по времени и кпд вроде выше хотя затраты на месяц тоже примерно одинаковые но все равно интересноsmile.gif

Автор: mirace379 14.11.2016, 14:09

Здравствуйте
пашет такое но часто сбои
цифра 20 для сравнений это сферический конь вакууме
или надо больше каких то проверок или чего
сам поплавок при этом тоже неравно прыгает вверх вниз а как бы вертится вокруг оси так что пиксели неравномерно смещаются вверх и вниз но в указанном вверху боте как то это реализовано все он ловит примерно с 95 процентной вероятностью
примерно в 3-4 разах из 10 срабатывает правильно

Код

set hotkeystart {F1}
set #a findcolor (482, 95 1353, 479 1 1 (7496830) %arr 2 -1 6)      // первый поиск
log #a                      // нашлось пикселей
set #raznica 0
set #b 0
while #raznica < 20       // пока разница между первым и последующими поисками меньше 30
set #b findcolor (482, 95 1353, 479 1 1 (7496830) %arr 2 -1 6)      // искать цвет
     log #b
     set #raznica #a - #b        // разница между первым поиском и следующим
     set #raznica abs(#raznica)   // модуль разницы
     log #raznica
     wait 10
end_while
set #g findcolor (482, 95 1353, 479 1 1 (2702286) %tarr 2 -1 10)
if  #b < 1 and #g <1 //проверка на наличие поплавка вообще и закидываеие если нет
send217 {1}
wait random(3000)
else

move %arr [1 1], %arr [1 2] //тут двигаем курсор на поплавок и дергаем удочку на себя:)
wait random(1000)
left %arr [1 1] %arr [1 2]
wait 1000
move random (1000), random (100)
send217 {1}
wait 3000
end_if

Автор: DarkMaster 14.11.2016, 15:29

Где-то у меня был огромный комбайн, но я не смог его найти. Последнее время сижу вот на этом примитиве. Он работает. Написан под 1920*1080. Если разрешение другое, то нужно чуть подправить координаты будет:
559, 141 1243, 467
Цвет править тут:
( 0xeeeeee-0xffffff )
Сильной коррекции при дневной ловле обычно не требует. Крайне рекомендую на время ловли отключать эффекты, чтобы вода не бликовала.
send217 p - кнопка с биндом удочки.

Код
set linedelay 2
set #dev 0
if  #dev = 1
    log close
    log clear
    log open 1430 -10 500 300
    log mode noScript
    set #handleLogWindow findwindow ("Log Window")
    showwindow #handleLogWindow restore
    set #handleUoPilot findwindow ("UoPilot")
end_if
set $bmp ".bmp"


:start
    send217 p
    set #timeout timer + 30000
    while #timeout > timer
       set #a findcolor (559, 141 1243, 467   1 1 ( 0xeeeeee-0xffffff ) %arr workwindow)
       //log #a
       if  #a > 0
            move %arr[1 1] %arr[1 2]
            if  1 = 0
                sendex ~{}
                wait 1000 + random (300)
                right %arr[1 1] %arr[1 2]
            else
                wait 700 + random (500)
                right %arr[1 1] %arr[1 2]
                wait 300 + random (300)
                move  61, 254
                right 61, 254
                wait 200 + random (200)
                move  60, 308
                right 60, 308
                wait 200 + random (200)
                move  53, 361
                right 53, 361
                wait 200 + random (200)
                move  57, 402
                right 57, 402
            end_if

            wait 1000 + random (1000)
            break
        end_if
    end_while




goto start


stop_script

Автор: mirace379 14.11.2016, 22:22

Здравствуйте
DarkMaster а это точно скрипт под онлайн игру на оффе world of warcraft?
чего то я в нем ничего не понял
можно комментарии?
в смысле логику алгоритма и применение команд
если райт это правая кнопка мыши то зачем она? и зачем мувить курсор так часто?

Автор: DarkMaster 15.11.2016, 1:58

Цитата
DarkMaster а это точно скрипт под онлайн игру на оффе world of warcraft?

А там в рыбалке что-то менялось?

Конкретно этот скрипт под классик-лич работает.

Количество мувов и киликов там обусловлено тем, что на классике без зажатого шифта невозможно слутать все сразу. Если выпиливать левоту, то получится и вовсе примитив:
Код
set linedelay 2

:start
    send217 p // кнопка закидывания удочки.
    set #timeout timer + 30000
    while #timeout > timer
       // ищем брызги при поклевке.
       set #a findcolor (559, 141 1243, 467   1 1 ( 0xeeeeee-0xffffff ) %arr workwindow)
       //log #a // вывод результата поиска брызг.
       if  #a > 0
            move %arr[1 1] %arr[1 2] // Перемещаем мышку на брызги(поплавок там же)
            if  1 = 0
                wait 700 + random (500)
                right %arr[1 1] %arr[1 2] // Лутаем
            end_if
            wait 1000 + random (1000) // Задержка чтобы слутать успел.
            break
        end_if
    end_while
goto start

Оно типа работает)

Автор: mirace379 15.11.2016, 6:23

Здравствуйте
брызг там нетуsmile.gifлутается все автоматом
я вверху дал ссылку на канал кодера фишбота погляди как оно нынче в легионеsmile.gif

Автор: DarkMaster 15.11.2016, 12:07

мда прогресс. убрали брызги и убрали леску. Осталось в браузере ловить. По текущей ситуации я бы искал цвет поплавка, находил средние коордианты, повторял поиск и сравнивал новые средние коодинаты. Иземенились - поплавок дернулся.

Автор: mirace379 15.11.2016, 14:55

Здравствуйтеwink.gif
очень здравые рассуждения напиши скриптsmile.gif)))с комментариями
а вообще у меня акк закончился уже ибо не готов был платить 2 тыр заа обновление легион а на 100 хрен на месяц голды набьешьsmile.gifсчас там максимум 110 и новые земли
но алгоритм интересен сам по себе мне вернее как другие его видят человек то там вон бота сваял и норм

Автор: DarkMaster 15.11.2016, 19:38

дык а какой там особо алгоритм то?

Код
set #firstRun findcolor(..... %fristRun) // Ищем точки после заброса.
for #i 1 #firstRun 1              // Находим суммы координат.
    set #xSum #xSum + %firstRun[#i 1]
    set #ySum #ySum + %firstRun[#i 2]
end_for
set #xMiddleFirst #xSum / #firstRun  // Находим среднее арифметическое.
set #yMiddleFirst #ySum / #firstRun
while 1 = 1
    set #secondRun findcolor(..... %secondRun)  // Ищем точки поплавка.
    for #i 1 #secondRun 1
        set #xSum #xSum + %secondRun[#i 1]
        set #ySum #ySum + %secondRun[#i 2]
    end_for
    set #xMiddleSecond #xSum / #secondRun  // Находим среднее арифметическое.
    set #yMiddleSecond #ySum / #secondRun
    set #deltaX #xMiddleSecond - #xMiddleFrist   // Находим разницу со средним арифметическим после заброса
    set #deltaY #yMiddleSecond - #yMiddleFrist
    set #deltaX abs(#deltaX)               // Находим модуль разницы.
    set #deltaY abs(#deltaY)
    set #deltaSum #deltaX +#deltaY   // Складываем модули разницы X и Y.
    if  #deltaSum > НЕКОТРОЕ_ЧИСЛО   // Сравниваем с некоторой константой(погрешность)
        log клюнуло!
    end_if
end_while

Автор: cirus 16.11.2016, 11:14

Цитата
set #xSum + #xSum %firstRun[#i 1]
set #ySum + #ySum %firstRun[#i 2]

Код
set #xSum #xSum + %firstRun[#i 1]
set #ySum #ySum + %firstRun[#i 2]

Автор: mirace379 17.11.2016, 11:22

Здравствуйте
я честно говоря не очень понял алгоритм
можешь на словах пояснить? что происходит
проверить уже не смогу аккаунт спитsmile.gif
но сама идея интересна
как выбрать например конкретные точки и отслеживать только их координаты?
по сути точек одного цвета может быть и 3 и 10 и 20
поплавок может быть больше а может быть меньше

Автор: DarkMaster 17.11.2016, 13:05

Цитата
как выбрать например конкретные точки и отслеживать только их координаты?

Тебе не нужны конкретные точки. Тебе нужно скопление точек некоторого цвета и их усредненное расположение.
Цитата
по сути точек одного цвета может быть и 3 и 10 и 20

поэтому берется среднее арифметическое координат. не имеет занчение 3 их или 30. Что собственно касается и размера поплавка.

Автор: Levo222 19.12.2018, 18:57

Цитата(cirus @ 16.11.2016, 15:14) *

Код
set #xSum #xSum + %firstRun[#i 1]
set #ySum #ySum + %firstRun[#i 2]


Поясните? что именно там заменить чтобы работало?
в целом

1
Код
set #firstRun findcolor(..... %fristRun) // Ищем точки после заброса.
for #i 1 #firstRun 1              // Находим суммы координат.
    set #xSum #xSum + %firstRun[#i 1]
    set #ySum #ySum + %firstRun[#i 2]
end_for
set #xMiddleFirst #xSum / #firstRun  // Находим среднее арифметическое.
set #yMiddleFirst #ySum / #firstRun
while 1 = 1
    set #secondRun findcolor(..... %secondRun)  // Ищем точки поплавка.
    for #i 1 #secondRun 1
        set #xSum #xSum + %secondRun[#i 1]
        set #ySum #ySum + %secondRun[#i 2]
    end_for
    set #xMiddleSecond #xSum / #secondRun  // Находим среднее арифметическое.
    set #yMiddleSecond #ySum / #secondRun
    set #deltaX #xMiddleSecond - #xMiddleFrist   // Находим разницу со средним арифметическим после заброса
    set #deltaY #yMiddleSecond - #yMiddleFrist
    set #deltaX abs(#deltaX)               // Находим модуль разницы.
    set #deltaY abs(#deltaY)
    set #deltaSum #deltaX +#deltaY   // Складываем модули разницы X и Y.
    if  #deltaSum > НЕКОТРОЕ_ЧИСЛО   // Сравниваем с некоторой константой(погрешность)
        log клюнуло!
    end_if
end_while

Символ не распознан (pos:1 '#xSum / -1')

Автор: DarkMaster 19.12.2018, 19:26

Цитата
set #firstRun findcolor(..... %fristRun) // Ищем точки после заброса.
for #i 1 #firstRun 1 // Находим суммы координат.
set #xSum #xSum + %firstRun[#i 1]
set #ySum #ySum + %firstRun[#i 2]
end_for

В целом очень сильно смущает отсутствие проверки на то, что финдколор ничего не нашел.
Как итог потом в:
set #xMiddleFirst #xSum / #firstRun // Находим среднее арифметическое.
set #yMiddleFirst #ySum / #firstRun
идет попытка деления переменной в которую ничего не было помещено.

Автор: Levo222 19.12.2018, 19:44

Цитата(DarkMaster @ 19.12.2018, 23:26) *

В целом очень сильно смущает отсутствие проверки на то, что финдколор ничего не нашел.
Как итог потом в:
set #xMiddleFirst #xSum / #firstRun // Находим среднее арифметическое.
set #yMiddleFirst #ySum / #firstRun
идет попытка деления переменной в которую ничего не было помещено.

Нет там был колор, но формата 532663
Может нужно типа 0xeeeeee-0xffffff задавать?

Автор: DarkMaster 19.12.2018, 20:57

Цитата
формата 532663

это одно и тоже.

я вам говорю не про наличие параметра в строчке поиска финдколором. Он искал, но ничего не нашел. Проверки на это у вас нет, соответственно при:
set #xMiddleFirst #xSum / #firstRun
не существовало #xSum
-1 в #firstRun говорит об ошибке.
'-1' упало при поиске, точная причина не известна
'-2' не нашли открывающую скобку после имени функции
'-3' (не используется)
'-4' неправильно указан тип поиска, или хэндл = 0
'-5' (не используется)
'-6' ошибка получения изображения с экрана.
насколько я помню такие проблемы были при косяках в синтаксисе оператора.

Автор: Levo222 19.12.2018, 21:54

Цитата(DarkMaster @ 20.12.2018, 0:57) *

это одно и тоже.

не существовало #xSum
-1 в #firstRun говорит об ошибке.

Всё понял

Автор: nykep 17.5.2019, 22:51

когда я лет 10 назад играл на личе, то особо не загонялся по всем этим цветам, насколько я помню после закидывания удочки время до поклевки рандомное и случается так, что клевать начинает через пару секунд после закидывания, поэтому я просто ставил задержку в несколько секунд после закидывания, но не слишком долгую чтоб не прозевать первую поклевку и все, закидываешь wait несколько секунд и выдергиваешь и так постоянно, потом если что то поймалось то лут разбирал по цветам что надо а что нет, хотя щас я так понял это уже не требуется. Может показаться что так менее эффективно и больше тратится времени на все эти перезабросы удочки, но это вопрос спорный! Потому как иногда не клюет довольно долго. Да и по количеству добычи можно было судить что система работает

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)