Здравствуйте, гость ( Вход | Регистрация )

> Exping.txt
Larrikin
сообщение 24.9.2011, 14:23
Сообщение #1


****

Apprentice
Сообщений: 120
Регистрация: 9.9.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 13.968
Возраст: 35



Похоже рефакторинг это как ремонт - нельзя закончить, можно прекратить.

Скрипт для ма/дд, пауза между строк - 1 ms.

Общая логика работы скрипта

Скрипт работает пока окошко таргета развернуто. Как только видит свернутое окошко таргета - останавливается.
Сначала скрипт привязывается к последнему окну линейки
Потом проверяет включена ли нужная панель. Это делается с помощью посыла кнопки макроса /taget %self и поиска синих кружочков, которые появляются вокруг головы персонажа при выборе самого себя. Это сделано потому, что обычно кач на скрипте идёт на особой панели.
Потом скрипт ищет сам начало и конец полоск ХП и МП. Проверяет стабильность правой границы - чтобы хп не росло. Эти значения потом используются для анализа ХП мобов.
Потом скрипт зацикливается на выборе и атаке моба.
exping.txt
Код

///////////////////////////////////////////////////
// exping script
set linedelay 1 // установить время задержки между строк


///////////////////////////////////////////////////
// Спот
set #AgrFarDamaged 0             // Трогать ли далеких недобитков
set #postmortem_duration 2222    // Время действия макроса свежевания
set #MaxTargeting 77777          // Сколько времени пытаться взять таргет
set #MaxTimeToKill 99999         // Сколько времени ждать падения моба
set #NewMobFirstBoodTime 7777    // За сколько моб должен повредиться
set #CloseOnlyTime 22222         // Сколько искать вблизи после фейла атаки
set #AtackMacrosWorkTime 2222    // Сколько времени макросу атаки

///////////////////////////////////////////////////
// Персонаж
set $self F11                    // Кнопка с макросом /target %self
set $attack F1                   // Кнопка атаки
set #attack 2222                 // Время между простыми атаками
set $macro_attack F2             // Кнопка с макросом начала атаки
set $debuf 3                     // Кнопка дебафа цели
set #debuf 8000                  // Время отката дебафа
set #re_debuf 30000              // Время до следуюего дебафа
set #overhit 1                   // Оставлять пикселов на добивание
set $overhit F1                  // Кнопка добивания
set #overhit_casting 1111        // Время добивания
set $next F4                     // Кнопка с макросом /targetnext
set $mob F3                      // Кнопка с выбором моба
set $postmortem F7               // Макрос свежевания после убийства
set $self_buf F8                 // Кнопка селф бафа
set #self_buf_casting 1111       // Время на селф бафание
set #self_rebuf 77777            // Через сколько селф ребаф

///////////////////////////////////////////////////
// Константы
set #DeadTargetDelay 7000        // Сколько висит окошко трупа
set #DrawingTargetTime 2222      // Максимальное время появления таргета
set #ColorAlive 1251183          // Цвет жизни
set #ColorAlive2 1316719         // Цвет жизни тоже
set #ColorAliveClose 1316976     // Цвети жизни при смерти
set #ColorMP 8535813             // Цвет маны
set #xMobLeft 0   //  Будет абсолютный Х начала полосок ХП/МП цели
set #xMobOver 0   //  Будет абсолютный Х моба на добивание overhit
set #xMobRight 0  //  Будет абсолютный Х конца полосок ХП/МП цели
set #xMobHigh 0   //  Будет абсолютный Х у конца полосок ХП/МП цели
set #yMobHP 0     //  Будет абсолютный Y полоски ХП цели
set #yMobMP 0     //  Будет абсолютный Y полоски МП цели

// set logging close
gosub set_log_on
gosub lock_window
gosub set_target_window

set timer 0
set #OnlyCloseSelect ( timer + #CloseOnlyTime )
while 1
    gosub target_next
    gosub self_buf
    gosub attack
end_while
//gosub clicker

end_script

///////////////////////////////////////////////////
// селф бафы
:self_buf
if timer > #time_to_self_buf
    send $self_buf                             // Баф - залог победы
// Когда следующий
    set #time_to_self_buf ( timer + #self_rebuf )
    wait #self_buf_casting                 // Время на каст селф бафов
end_if
return

///////////////////////////////////////////////////
// Атака цели
:attack
set #MobCount ( #MobCount +1)     // Раз уж будем его бить
send $macro_attack                         // Пытаемся начать атаку
set #attack_start timer
if timer > #debuf_reuse                    // Дебаф был в откате
    set #time2re_debuf ( timer + #re_debuf ) // Когда обновлять дебаф
    set #debuf_reuse ( timer + #debuf )      // Когда откатится дебаф
else
    set #time2re_debuf #debuf_reuse  // Дебафнуть по откату сразу
end_if
//wait random (555)                            // Время развернуться к цели
//send home                                     // Разворачиваем экран
set #FirstBloodTime ( #attack_start + #NewMobFirstBoodTime )
if #mob_is_far > 0                // Моб идёт издалека
    set #AttackMacrosEnd ( #attack_start  + #AtackMacrosWorkTime )
else
    set #AttackMacrosEnd ( #attack_start  + 2222 ) // Некогда особо
end_if
get color #Color #xMobLeft #yMobHP        // Начало полоски ХП цели
while #Color = #ColorAlive or #Color = #ColorAlive2 // Ждем падения моба
    if timer > #FirstBloodTime                 // Пора покоцать хоть децл
        get color #Color #xMobHigh #yMobHP        // У правого края ХП
        if #Color = #ColorAlive or #Color = #ColorAlive2 // Моб всё ещё здоров
            set logging Моб #MobCount не коцается, цвет у правой границы #Color
            alarm
            set #OnlyCloseSelect ( timer + #CloseOnlyTime  )    // Потыкай /targetnext
            set #MobCount ( #MobCount - 1)     // Раз уж НЕ будем его бить
            send escape // снимаем таргет
            wait 555
            return                     // Этого моба больше не пытаемся бить
        end_if
    end_if
    if timer > #AttackMacrosEnd   // Макрос атаки выполнен
        if timer > #time2re_debuf  // Пора обновить дебаф
            send $debuf             // Дебафаем
            set #time2re_debuf ( timer + #re_debuf ) // Когда обновлять дебаф
            set #debuf_reuse ( timer + #debuf )      // Когда откатится дебаф
        else
            if timer > #time_to_reattack
                send $attack              // Просто долбим
                set #time_to_reattack ( timer + #attack )
            end_if
       end_if
    end_if
// Ищем раскрытое окошко таргета
    set $target findimage (0 0 111 222 (FindImage\L2\LTargetBig.bmp) %Target 2 90 1)
    if $target < 90 // Если раскрытого окошка таргета нет
        gosub check_close_exit
    end_if
//    wait 111                         // Разбавляем
    set #attack_duration ( timer - #attack_start )
    if #attack_duration > #MaxTimeToKill
        set logging За время #MaxTimeToKill моб #MobCount не упал
        goto error_exit
    end_if
    get color #Color #xMobOver #yMobHP        // Начало полоски ХП цели
end_while // Моб упал сраженный или находится при смерти

send $overhit
wait #overhit_casting
wait random ( 111 )

set #OnlyCloseSelect ( timer + #DeadTargetDelay  + random ( 55 ) )
set #AverageTimePerMob ( timer / #MobCount )
set #AverageMobsPerHour ( ( #MobCount * 1000 *60 * 60 ) / timer )
set logging Моб #MobCount за #attack_duration ms, средний цикл: #AverageTimePerMob или #AverageMobsPerHour мобов/час

send $postmortem   // Мародёрствуем
wait #postmortem_duration                 // Даём на это время

return                       // С этим всё

///////////////////////////////////////////////////
// Наведение на моба
:target_next
set #TargetingTimeOut ( timer + #MaxTargeting + #DrawingTargetTime )
while timer < #TargetingTimeOut    // Ищем цель сколько можно
    if timer < #OnlyCloseSelect        // Окошко трупа ещё висит?
        send $next // Пытаемся взять таргет на очередного моба
        set #mob_is_far 0
        set #delay ( 555 + random ( 222 ) )
    else                                       // Окошку трупа пора пропасть
        send $mob                         // Берём таргет на дальнего моба
        set #mob_is_far 1
        set #delay ( 1111 + random ( 1111 ) )
//        set logging Берем таргет дальним макросом
    end_if                        
// Крайний срок появления таргета после нажатия макроса
    set #MustDraw ( timer + #DrawingTargetTime )

    while timer < #MustDraw             // Ищем цель не дольше разрешённого
        wait 222  // Даем время успокоится картинке
        set $target findimage (0 0 111 222 (FindImage\L2\LTargetBig.bmp) %Target 2 90 1)
        if $target > 90 // Если окошко раскрытого таргета есть
            get color #hpColorMin #xMobLeft #yMobHP        // Начало полоски ХП цели
            get color #hpColorHigh #xMobHigh #yMobHP        // У конца полоски ХП цели
            get color #mpColorMin #xMobLeft #yMobMP        // Начало полоски МП цели
            if_not #mpColorMin = #ColorMP                             // Цель - моб или нпц
                if #hpColorHigh = #ColorAlive or #hpColorHigh = #ColorAlive2    // Моб здоров, можно бить
                    return                                                            // Цель предоставлена
                else
                    if #hpColorMin = #ColorAlive or #hpColorMin = #ColorAlive2    // Моб недобиток
                        if #mob_is_far > 0                             // Дальний недобиток
                            if #AgrFarDamaged > 0                 // Можно трогать
                                return    // Цель предоставлена
                            else                                    // Нельзя трогать
                                set logging Дальний моб оказался недобитком
                                alarm
                                set #OnlyCloseSelect ( timer + #CloseOnlyTime  )    // Потыкай /targetnext
                                send escape                     // снимаем таргет
                            end_if                                 // Разобрались с дальним недобитком
                        else                                        // Недобиток оказался ближним
                            return                                // Цель предоставлена
                        end_if                                    // Разобрались с ближним недобитком
                    end_if                                        // Разобрались с недобитком
                end_if                                            // Разобрались с мобом
            end_if                                                // Разобрались с таргетом
        else
            gosub check_close_exit
        end_if
    end_while    // Цель не найдена, пробуем ещё раз

    gosub check_close_exit // Время появления окошка вышло
    send $postmortem   // Мародёрствуем
end_while                                                    // За этот клик макроса цель не найдена

set logging За время #MaxTargeting не взялся таргет
goto error_exit
return    // Никогда здесь не должны оказаться

///////////////////////////////////////////////////
// Захватываем последнее окно линейки
:lock_window
set #handleWin findwindow (Lineage II)
set workwindow #handleWin
wait 555                    // даём время пролагаться


return
///////////////////////////////////////////////////
// Открываем окно логов
:set_log_on
set logging clear                                     // очищаем


///////////////////////////////////////////////////
// Находим начало и конец хп таргета
:set_target_window
send escape // снимаем таргеты
send $self // берём таргет на себя
wait 1111                                // даём время пролагаться


// Синие кружочки должны быть видны
set $blue findimage (0 0 1920 1024 (FindImage\L2\LTargetBlue.bmp) %Blue 2 90 1)
if $blue < 90 // Если синий кружок не виден это конец
        set logging Не виден синий кружок после /target %self - не та панель?
        goto error_exit
end_if

// Должно появиться раскрытое окно таргета
set $target findimage (0 0 111 222 (FindImage\L2\LTargetBig.bmp) %Target 2 90 1)
if $target < 90 // Если не видно раскрытого окна таргета
        set logging Не видно развернутое окошко таргета после /target %self
        goto error_exit
end_if

// Ищем левый край полоски хп
set #yMobHP %Target [ 1 2 ] + 20        //  Абсолютный Y полоски ХП цели
set #xMobLeft %Target [ 1 1 ] + 18        //  Абсолютный Х начала полоски ХП цели
set #x #xMobLeft
get color #Color #x #yMobHP
while #Color = #ColorAlive or #Color = #ColorAlive2
    set #xMobLeft #x                              //  Уточняем начало полоски ХП цели
    set logging Установили левую границу полоски ХП на #xMobLeft #yMobHP
    set #i (#i + 1)
    set #x (#x - 1)
    get color #Color #x #yMobHP
//    set logging Левее текущей границы в точке #x #yMobHP цвет #Color
//    move #x #yMobHP
end_while
if #i < 1
    set logging Проблемы с поиском левой границы полоски ХП. Последний цвет #Color
    goto error_exit
end_if    
set logging Левый край полоски ХП цели найден в точке #xMobLeft #yMobHP Итераций: #i
set #xMobOver ( #xMobLeft + #overhit )

// Ищем правый край полоски хп
set #xMobRight #xMobLeft
set #x #xMobRight

// Быстрый поиск правой границы
set #diff 512
while #diff > 1
    set #diff ( #diff / 2 )            // Точность на этом шаге
    get color #Color #x #yMobHP
    if #Color = #ColorAlive or #Color = #ColorAlive2
        set #x ( #x + #diff )
        set logging Правую границу полоски ХП надо правее на #diff в точку #x
    else
        set #x ( #x - #diff )
        set logging Правую границу полоски ХП надо левее на #diff в точку #x
    end_if
    get color #Color #x #yMobHP
//    set logging Будем проверять цвет #Color в точке #x #yMobHP ?
//    move #x #yMobHP
end_while
set #xMobRight #x

// Проверка наличия полоски МП ниже полоски ХП
set #yMobMP (#yMobHP + 8)                       //  Абсолютный Y полоски МП цели
get color #Color #xMobLeft #yMobMP
//move #xMobLeft #yMobMP
// wait 4s
if_not #Color = #ColorMP
    set logging Вместо цвета маны #ColorMP в начале полоски МП найден #Color
    goto error_exit
end_if
set logging Найдена полоска МП, скорее всего таргет действительно на себе

// Проверка стабильности правой границы
set #x ( #xMobRight +1)
wait 7777
get color #Color #x #yMobHP
//move #x #yMobHP
if #Color = #ColorAlive or #Color = #ColorAlive2
    set logging ХП не полное? Правее правой границы полоски ХП цвет оказался #Color
    goto error_exit
end_if
// wait 2s

set #xMobHigh ( #xMobRight - 2 )
set logging Правый край полной полоски ХП цели найден в точке #xMobRight #yMobHP

send escape // снимаем таргет

return


///////////////////////////////////////////////////
// Проверка признака команды завершения - свернутого окна таргета
:check_close_exit
set $target findimage (0 0 111 222 (FindImage\L2\LTarget.bmp) %Target 2 90 1)
if $target > 90 // Окошко таргета закрыто
    set logging Окошко таргета свёрнуто - прекращаю работу
    goto error_exit
end_if
return         // Свёрнутого окна не найдено - продолжаем работу

///////////////////////////////////////////////////
// Процедура аварийного завершения скрипта
:error_exit
        set logging open         // открываем окошко с логами
    for #i 1 3
        alarm
//        wait 1s
    end_for
end_script
Пример Main Assister с якорем

Якорь:
БД стоит в центре комнаты, в перерывах между танцами иногда выполняет

/target %self
/targetnext

МА:
Макрос выбора ближнего моба:
/target БД
/assist

Макрос выбора дальнего моба:
/target Моб
Пример Damage Dealer с дебафом по ассисту MA

МА:
Дает таргет на нового моба, после смерти на следующего

DD:
Скрипт анализирует полоски хп, поэтому они должны быть видны. Если ДД на компе несколько, можно использовать просто кликер макроса /target MA /assist /attack.

Макрос выбора ближнего моба:
/target MA
/assist

Макрос выбора дальнего моба:
/target MA2
/assist

Макрос начала атаки:
/useskill debaf1
/useskill debaf2
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Сообщений в этой теме
Larrikin   Exping.txt   24.9.2011, 14:23
dodik   зачем столька многа? можна кароче намнога   24.9.2011, 14:31
Larrikin   выкладывай - обсудим   24.9.2011, 14:44
Larrikin   + добавил сброс таргета при обнаружении дальнего н...   24.9.2011, 20:12
Larrikin   + добавил раздел после падения моба * в разделах н...   26.9.2011, 5:53
ForestGam   Сегодня постараюсь опробовать) Хотя займет какое т...   28.9.2011, 11:30
persty   Макрос свежевания после убийства ?   28.9.2011, 12:36
Larrikin   * какие-то мелкие правки типа выноса магических чи...   28.9.2011, 12:38
ppers   LTargetBlue.bmp самому рисовать надо? =) Выложи в...   2.10.2011, 10:23
Larrikin   добавил ссылку на картинки   3.10.2011, 8:05
Kashim   Скрипт нереально крутой, настолько, что не смог са...   6.10.2011, 12:03
Larrikin   set #ColorAlive 1251183 // Цвет жизни Чей? такой...   7.10.2011, 15:12
Kashim   Разобрался, спасибо, и даже работало вчера вечером...   8.10.2011, 3:06
Larrikin   работало вчера вечером. ну и как?   8.10.2011, 23:51
Larrikin   синие кружочки частенько бывают заняты или нестаби...   8.10.2011, 7:38
Larrikin   заменил post на send, вроде работает   9.10.2011, 22:03
Larrikin   Изменил ссылку на картинки, работающие в GoD   12.10.2011, 7:03
sweetLu   куда картинки надо положить, чтоб работало?   13.10.2011, 12:32
DarkMaster   FindImage\L2\   13.10.2011, 13:33
Kavbyz   Подскажите плиз что вобще нада делать чтоб бот зар...   13.10.2011, 15:43
Larrikin   Включить?   13.10.2011, 20:32
Kavbyz   Включить? Как включить?   14.10.2011, 2:14
Larrikin   нужная кнопка обведена кружочком http://img8.imag...   14.10.2011, 12:59
Larrikin   + добавил обновление дебафа на мобе через указанны...   16.10.2011, 14:58
Larrikin   Добавил пример с якорем в первый пост.   17.10.2011, 0:35
Larrikin   * добавил задержку в цикл определения моба для уме...   18.10.2011, 15:16
Larrikin   + добавил обязательное добивание моба   18.10.2011, 16:13
sweetLu   а можешь написать скриптик на асист, для 2го окна(...   19.10.2011, 7:48
Larrikin   Добавил в первый пост пример использования дд по а...   19.10.2011, 13:31
sweetLu   мб ты не так меня понял, или я не понял твой скрип...   19.10.2011, 15:00
Svolota   мб ты не так меня понял, или я не понял твой скри...   18.1.2013, 15:32
Larrikin   Ты хочешь, чтобы в одном окне определялись новые м...   19.10.2011, 15:12
sweetLu   нет, вот я бегаю чаром сам, выделяю и бью его, на ...   19.10.2011, 15:32
Larrikin   Вроде тут бегала возможность чтения переменных меж...   19.10.2011, 17:28
sweetLu   ну а если так берет асист с чара, типа /target чар...   19.10.2011, 18:02
Larrikin   если видит НР про такой вариант я и добавил пример...   19.10.2011, 18:25
sweetLu   блина, не могу придумать условие, кроме как полоск...   20.10.2011, 8:34
Larrikin   скрипт включен на 2м окне, а условие НР считывать ...   10.7.2012, 23:29
Zeleax   самому интересно, можно ли считывать с одного окн...   11.7.2012, 7:03
sweetLu   и еще, как сделать 2ое окно активным   20.10.2011, 10:01
Larrikin   + добавил параметр #overhit - сколько пикселей пол...   23.10.2011, 5:45
Larrikin   * теперь проверка хп цели независима от посыла ата...   27.10.2011, 5:17
Larrikin   * теперь настройка времени выбора только ближних м...   28.10.2011, 1:17
Larrikin   + добавил настройку времени отката скила дебафа   31.10.2011, 4:54
Larrikin   добавил принудительную установку времени между стр...   30.11.2011, 20:39
RPB   пробовал асист,неопознанная команда выдает   15.4.2012, 11:36
Zeleax   пробовал асист,неопознанная команда выдает конкре...   15.4.2012, 11:40
RPB   пробовал асист,неопознанная команда выдает мб я ...   15.4.2012, 15:47
Larrikin   ничего не работает ну тогда комп по гарантии меняй...   15.4.2012, 23:02
barok2   Хорошо бы еще добавлять, как сработал скрипт в игр...   27.5.2012, 19:10
Zeleax   Хорошо бы еще добавлять, как сработал скрипт в иг...   27.5.2012, 19:14
Larrikin   Если на него агрятся соседи, то надо бы удирать, х...   30.5.2012, 2:18
DarkMaster   Считывал чтением из памяти. Сейчас можно попробова...   11.7.2012, 10:51
4u4undra   Это жесть, сижу уже час пытаюсь его запустить, рук...   17.10.2012, 18:50
Larrikin   Че за синий кружок он пытается увидить? когда на...   18.10.2012, 12:40
Larrikin   Какие есть способы изменять переменные во время ра...   30.10.2012, 1:54
DarkMaster   Скрипт-сателит с промптом. Тупо делаешь цикл на вы...   30.10.2012, 2:49
BobRifo   Жаль нет хотя бы маленького пошагового мануала, к...   9.12.2012, 0:56
Larrikin   добавил в первый пост немного комментариев если чт...   9.12.2012, 1:38
BobRifo   Открываю FindImage, включаю скрипт, но как доходит...   11.12.2012, 0:33
Larrikin   Если руками нажать клавишу, заданную как ярлык к м...   11.12.2012, 23:26
BobRifo   Я конечно нуб, но это сделал, берет конечно. Думаю...   18.12.2012, 1:57
Larrikin   надо картинки класть в папку самого пилота, он ище...   18.12.2012, 3:28
harddrink   0:57:36 4 (, 260): Проблема с поиском левой границ...   29.12.2012, 1:00
DarkMaster   Вы в числовую переменную Х координаты пихаете Х ко...   29.12.2012, 1:08
harddrink   объясните принцип как правильно сделать , благодар...   29.12.2012, 1:42
DarkMaster   set #xMobLeft Судя по названию переменной это Х ко...   29.12.2012, 2:03
harddrink   такс понял вот я сделал /////////////////////////...   29.12.2012, 2:10
DarkMaster   Кнопки с координатами две. Левая - относительные, ...   29.12.2012, 2:19
harddrink   только что по правой переделал таже история 3:37...   29.12.2012, 2:38
DarkMaster   Странно как-то. По идее #Color вообще показываться...   29.12.2012, 2:42
harddrink   2:46:10 4 (, 227): :set_target_window 2:46:10 4 (,...   29.12.2012, 2:54
DarkMaster   Судя по всему у вас неправильно заданы: set #Color...   29.12.2012, 3:27
harddrink   wait 5s move 900, 58 wait 5s get color #c 900, 58 ...   29.12.2012, 3:30
DarkMaster   Вероятно и тут путаница абсолютных и относительных...   29.12.2012, 14:34
Larrikin   Все переменные, которые помечены как "Будет...   29.12.2012, 22:40
Artificial   Перезалейте пак с картинками пожалуйста, а то ссыл...   21.10.2013, 16:04


Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 9.7.2025, 23:14
Designed by Nickostyle