Author Topic: Помогите найти ошибку в скрипте  (Read 2945 times)

0 Members and 1 Guest are viewing this topic.

Winlogon

  • Зашел в гости
  • *
  • Posts: 13
    • View Profile
Помогите найти ошибку в скрипте
« on: March 14, 2015, 08:13:35 PM »
Здравствуйте, подскажите пожалуйста в чем проблема?
[spoiler][/spoiler]
По идее должен в паинте нарисовать яблоко как на картинке, но рисует только горизонтальную линию и переменная y не увеличивается
на wait(100) не обращайте внимания там стоит waitms(100)
добавлю еще что пробовал вначале писать getscreen тоже не помогло

И еще проблема что я не могу остановить скрипт клавишами alt + s и мне приходится зажимать alt+ f4
« Last Edit: March 14, 2015, 08:25:05 PM by Winlogon »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Помогите найти ошибку в скрипте
« Reply #1 on: March 14, 2015, 09:48:17 PM »
Переменные не нужно объявлять, особенно таким не правильным способом.
Цикл FOR в последней версии сам не обнуляет переменную, нужно добавить для этого параметр.

FOR($a=0,$a<5)
END_CYC

Естественно без getscreen не обойтись.

Чтобы скрипт в конце остановился напиши HALT в конце скрипта.

Winlogon

  • Зашел в гости
  • *
  • Posts: 13
    • View Profile
Re: Помогите найти ошибку в скрипте
« Reply #2 on: March 14, 2015, 11:01:10 PM »
если не обьявлять пееменные вообще не работает, и почему не правильным? как написано в справка так и обьявлял
Зачем мне обновлять переменную не понял
поставил гет скрин, похоже что одну строчку нормально провел, но y  и не увеличивается

покажите пожалуйста как нужно исправить
Code: [Select]
$clr
$x = 1628
$y = 871
$x1
$y1
GETSCREEN
for($y, $y < 950)   
   FOR($x, $x < 1780)
      $clr = pxl($x,$y)     
      if($clr ! 16777215)
$x1 = $x - 1000
lclick($x1, $Y)
      end_if
      waitms(100)
   END_CYC     
end_cyc
halt
//end

Winlogon

  • Зашел в гости
  • *
  • Posts: 13
    • View Profile
Re: Помогите найти ошибку в скрипте
« Reply #3 on: March 15, 2015, 12:36:06 AM »
спасибо работает, почему не работало в моем случае? ведь по сути одно и тоже
update
в общем разобрался, когда внтури цикла переменную объявляешь работает когда вне не работает.. Почему такие костыли? скачивал посл версию, делал как в справке.
Почему я не могу по желанию остановить кнопками скрипт?
походу на чистом делфи писать надежнее
« Last Edit: March 15, 2015, 01:01:30 AM by Winlogon »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Помогите найти ошибку в скрипте
« Reply #4 on: March 15, 2015, 07:54:40 AM »
Переменные в кликермане объявляют двумя способами, командой DEFINE
Code: (clickermann) [Select]
DEFINE($y, 871)
или простым присваиванием значения
Code: (clickermann) [Select]
$y = 871В первом случае команда отработает только если переменной еще не существует, во втором переменной каждый раз при проходе будет задаваться значение 871

Цикл FOR сам наращивает переменную $x, если писать так FOR($x, $x < 1780) то когда $x станет больше 1780 цикл FOR начнет пропускаться, так как $x меньше не станет.
Раньше переменная просто обнулялась перед началом цикла, а теперь можно удобно задать начальное значение, либо ничего не писать, а задавать значение где то внутри цикла или условий. И никаких костылей, больше гибкости.

Задержку нужно ставить после клика. Слишком частые клики порождают большую нагрузку, что приводит к подвисанию компа.
Функцию pxl можно писать прямо в условие.

Вот так рисует быстрее но паинт начинает запаздывать.
Code: (clickermann) [Select]
GETSCREEN
for($y=417, $y < 527)
   FOR($x=1155, $x < 1477)
      if(pxl($x,$y) ! 16777215)
         $x1 = $x - 800
         LDOWN($x1, $Y)
         waitms(5)
         LUP($x1, $Y)
         waitms(10)
      end_if
   END_CYC
end_cyc

halt



« Last Edit: March 15, 2015, 08:11:05 AM by Oraven »

Winlogon

  • Зашел в гости
  • *
  • Posts: 13
    • View Profile
Re: Помогите найти ошибку в скрипте
« Reply #5 on: March 17, 2015, 07:46:50 PM »
спасибо, еще такой вопрос, в чем прикол писать скрипты для кликкермана когда можно также написать программу например на том же делфи или с++ с ипользованием winapi, код не намного будет отличаться то

ezfalcon

  • Освоившийся
  • **
  • Posts: 30
    • View Profile
Re: Помогите найти ошибку в скрипте
« Reply #6 on: March 17, 2015, 08:08:11 PM »
в чем прикол писать скрипты для кликкермана когда можно также написать программу например на том же делфи или с++ с ипользованием winapi
из-за абстракции. Скриптеру не нужно отвлекаться на множество специфических для языка программирования сущностей.

Ты можешь, разумеется, имплементировать в кроссплатформенную библиотеку для нескольких языков программирования анализ экрана и устройств ввода. Это будет хорошее подспорье для остальных.

Собственно, разработчик кликермана реализовал все в одном флаконе IDE+инструмент.

В чем прикол писать на С++ и Delphi, если можно писать на языке ассемблера, экономя память и несколько выигрывая в скорости, а главное контролируя каждый бит кода ;)

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Помогите найти ошибку в скрипте
« Reply #7 on: March 17, 2015, 08:10:11 PM »
Кликерманн это программа с сильно упрощенным языком программирования для задач автоматизации, вполне доступная в освоении рядовому пользователю пк. Но многим нубам даже такой язык как китайская грамота, что уж там говорить о делфи и с++.


Winlogon

  • Зашел в гости
  • *
  • Posts: 13
    • View Profile
Re: Помогите найти ошибку в скрипте
« Reply #8 on: March 18, 2015, 05:09:06 PM »
В чем прикол писать на С++ и Delphi, если можно писать на языке ассемблера, экономя память и несколько выигрывая в скорости, а главное контролируя каждый бит кода ;)
Интересный ответ
Не знаю можно ли тут переводить тему в другое русло, спрашиваю из интереса, не ужели сейчас что то пишется на чистом ассемблере? даже не могу представить для чего может понадобится чистый ассемблер,  бодяга ассемблера с делфи или с++ не считается)

ezfalcon

  • Освоившийся
  • **
  • Posts: 30
    • View Profile
Re: Помогите найти ошибку в скрипте
« Reply #9 on: March 30, 2015, 04:05:52 PM »
В чем прикол писать на С++ и Delphi, если можно писать на языке ассемблера, экономя память и несколько выигрывая в скорости, а главное контролируя каждый бит кода ;)
не могу представить для чего может понадобится чистый ассемблер,  бодяга ассемблера с делфи или с++ не считается)
Если нужен малый оверхед программы, жесткое ограничение аппаратных средств, патчи (кряки, анлокеры, расширители функционала для чужих программ).

Любое более-менее стандартное winapi ориентированное приложение пишется на ASM-е так же, как и на с или делфи.
Code: [Select]
;-----------------------------------------------------
; Функция замены подстроки в строке
;-----------------------------------------------------
; lpSrc - указатель на исходную строку
; lpDst - указатель на буфер для полученной строки
; lpPattern - указатель на заменяемую подстроку
; lpReplace - указатель на строку для замены
; dNum - количество замен (0 - заменить все)
;-----------------------------------------------------
proc    _replace lpSrc:DWORD, lpPattern:DWORD, lpReplace:DWORD,\
                 lpDst:DWORD, dNum:DWORD

        pusha

        ; Указатель на буфер-приемник
        mov     edx,[lpDst]

        ; Счетчик замен
        xor     ebx,ebx

        ; Исходная строка не пустая?
        mov     ecx,[lpSrc]
        cmp     byte [ecx],0
        jz      .loc_ret

        ; Заменяемая строка не пустая?
        mov     eax,[lpPattern]
        cmp     byte [eax],0
        jz      .loc_copy_all

.loc_scan:
        mov     esi,ecx
        mov     edi,[lpPattern]

        ; Исходная строка закончилась?
        cmp     byte [esi],0
        je      .loc_end_replace
@@:
        ; Строки совпали с паттерном?
        cmp     byte [edi],0
        je      .loc_move_replace

        ; Символ совпадает с
        lodsb

        ; Заменять все вхождения?
        cmp     [dNum],0
        je      .loc_skip_counter

        ; Уже заменили нужное количество?
        cmp     ebx,[dNum]
        je      .loc_move_one_char
.loc_skip_counter:
        cmp     al,byte [edi]
        jne     .loc_move_one_char

        inc     edi
        jmp     @b

.loc_move_replace:
        ; Увеличить счетчик замен
        inc     ebx

        mov     ecx,esi

        ; Записать заменяющую строку
        mov     esi,[lpReplace]
        mov     edi,edx
@@:
        lodsb
        or      al,al
        jz      .loc_scan
        stosb
        inc     edx
        jmp     @b

.loc_move_one_char:
        ; Скопировать один символ
        mov     al,byte [ecx]
        mov     byte [edx],al
        inc     edx
        inc     ecx
        jmp     .loc_scan

.loc_end_replace:
        ; Записать финальный 0 в строку
        mov     byte [edx],0

        jmp     .loc_ret
.loc_copy_all:
        ; Просто скопировать исходную строку
        mov     esi,[lpSrc]
        mov     edi,[lpDst]
@@:
        lodsb
        stosb
        or      al,al
        jnz     @b
.loc_ret:
        popa
        ret
endp

;---------------------------------------------


Языки высокого уровня дают разработчику абстракции в виде массивов, объединений, списков, структур, объектов, коллекций, векторов, шаблонов, прототипов, виртуальные и перегружаемые функции и многое-многое.

Есть также фреймворки, которые вносят свои абстракции поверх существующих, например jQuery. Писать на том же CoffeCup быстрее и удобнее, чем на чистом JS. Разрабатывать игры в Unity практичнее, чем пилить самому движок и геймплей.

Точно также язык кликермана предоставляет свои абстракции для анализа экрана и и управления клавиатурой и мышкой.

Никто не мешает тебе написать библиотечку (анализ экрана и управление вводом) для твоего рабочего языка и писать ботов на нём. С точки зрения эффективности, нужно использовать инструмент, который освоен на уровне, достаточном для выполнения поставленной задачи за необходимое количество человеко-часов.

Кликерман в большинстве ситуаций выигрывает в затратах на разработку бота.