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

> 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
сообщение 30.10.2012, 1:54
Сообщение #2


****

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



Какие есть способы изменять переменные во время работы скрипта?
Например, в начале скрипта задается:
Код
set #overhit 1                   // Оставлять пикселов на добивание

А мне надо прямо во время работы скрипта поменять значение на 10.
Нет, лучше на 20.
Нет, 10 было лучше.
Нет, наверное 15.
Да, 15 годится для этого спота.

Хорошо бы еще эти значения можно было сохранять как начальные не дожидаясь окончания работы скрипта.
Пользователь в офлайне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
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

 

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