Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - Atas

Pages: 1 ... 3 4 [5] 6 7 ... 10
61
Всем привет! :) 
Вопрос собственно в заголовке темы, а именно - не заморачивался ли кто созданием подсветки синтаксиса Clickermann'а для Notepad++?
Зачем это нужно, я в общем и сам не знаю, а вдруг пригодится.  :) Про Редактор Clickermann'а ничего плохого сказать не хочу да и не могу, он мне нравится и функционал у него достаточный, скрипты в нем писать самое то. Перегружать его всякими наворотами конечно не стОит, а если кому-то эти навороты необходимы, то их можно найти например в Notepad++. Или Notepad++ можно рассматривать как просмотрщик с подсветкой кода и с функцией поиска.
Однажды, протирая штаны на работе я решил попробовать написать такой синтаксис, а заодно и вообще поучиться это делать. Как это делается я понятия не имел, теперь же, имею смутное представление.
Кое что получилось, да и время убил с пользой. Если бы кто сделал это грамотно и профессионально ...

Вот как это выглядит.



Файл с моим творением, для импорта, во вложении.

62
Иногда без этого не обойтись совсем, а иногда просто удобней и проще. Почему ты так боишься отлавливать отсутствие? Если боишься только падения игры, можно всегда в паре первым делом проверять наличие постоянного элемента игры. В любом случае по скрипту приходится расставлять проверки на падения. Я для этого писал даже специальные подпрограммы для IF_PICTURE_IN с зацикливаниями и проверками вместо использования напрямую. Занятная вещь. Не хватает функционала кликера, а именно перезапуска сценария с нуля со сбросом всех переменных (пока можно костылить LOAD, но нужно следить за всеми переменными и не надеяться что при запуске они 0 по умолчанию). А так же прерывания циклов и подпрограмм.

Абсолютно согласен, что отлавливать отсутствие можно, если есть проверка еще какого то постоянного элемента или есть возможность подсунуть под проверяемые текстуры какой то постоянный фон. Но не в чистом же виде, как в примере Hito. Работать оно конечно будет, но  нестабильно, уверенности в такой работе нет. Кстати проверка постоянного элемента должна быть по умолчанию.

Когда нет времени на переделку скрипта, а чаще просто лень, я тоже прописываю в скриптах проверку отсутствия, так проще. Если скрипт дурит, я знаю что "Всё норм, просто это у меня там кое где, кое что... но я исправлю". Но рано или поздно, когда появляется настроение, всетаки переделываю. Не далее как вчера, переписал большой скрипт, где у меня отслеживался фон с цветом 0. Постоянно об этом помнил, страдал от этого можно сказать. :)  Заменил его серым фоном, многое пришлось переписать , зато теперь могу спать спокойно. Я как бы продолжил отлавливать отсутствие пикселя, заменив его появлением фона, с конкретным уникальным кодом 4210752.

Вот например, если бы подпрограмма "SUB(klich)" выглядела так, то никаких доп проверок не потребовалось бы, и была бы уверенность в работе скрипта.
Code: (clickermann) [Select]
SUB(klich)
   IF($klich1 < $_time_t)
      WAITMS(50)
      GETSCREEN
      IF_PIXEL_IN(245,64, 245,64, 3444824) // ХП под клич
         LOGWRITE ("klich")
         KEYPRESS(189) // Клич
         WAITMS(1200)
      Else
         WAITMS(50)
      END_IF
      $klich1 = $_time_t + 45
   END_IF
END_SUB

Может быть призвать на помощь цветокоррекцию, % совпадения, или в настройках игры попробовать отключить прозрачность, если уж совсем без отлова отсутствия не обойтись?

63
...
Только почему-то klich() на 62-ой строчке срабатывает с горем пополам... Если кто-то укажет на ошибку, буду счастлив  :)

Подпрограмма "SUB(klich)" у тебя выполняет этот самый клич, только в том случае, если пиксель с кодом цвета 3444824 отсутствует. Это плохой ориентир. Он отсутствует, например, когда игра вообще выключена. Желательно использовать явные сигналы для выполнения действий, а не их отсутствие.  ;)

64
А вот избавиться от GOTO, без ущерба для сценария (скорость, размер), не удавалось еще никому. Если конечно применение GOTO оправдано в каком-то месте скрипта.
GOTO очень хороший и нужный инструмент, которого многие боятся, только потому, что какой-то там типа "гуру", что то там ляпнул в интернете, что GOTO - зло, "авторитетно" заявляя, что якобы, выпрыгивая из подпрограмм и циклов мы оставляем в памяти "тонны мусора", и что якобы скрипт становится "не читаемым", и прочий бред. Все увещевания программистов (которые даже boot.ini для Windows XP написать не могут) про "хороший тон написания кода" - бред сивой кобылы (просто НЕ "сношайтесь на Красной Площади" и ваш код будет ИДЕАЛЬНЫМ). Какой мусор? Сколько этого мусора? Приведите цифры. Этого не знает НИКТО(!), боюсь, что даже Создатель. Однако, предостережения, касающиеся применения GOTO, из Справки Clickermann'а потихоньку исчезли. Приведите пример скрипта который докажет, что выпрыгивание по GOTO пагубно влияет на что либо. Но даже если это и так, то,  за сколько лет GOTO сожрет мои 16GB оперативки и затормозит работу Core i7, если я запускаю свои скрипты не более чем на 5 часов в сутки, и на ночь комп выключаю?! Всё очень ситуативно.
Другое дело, что не надо пихать GOTO куда ни попадя, это так же относится к сабам, массивам, инклюдам, ... и другим полезным вещам. И трёп, типа - "Вот когда научитесь писать скрипты, тогда сможете обходиться без GOTO..." - это просто тупые понты. Не нравится (не умеете) не пользуйтесь.
НИКТО ПОКА НЕ СМОГ ПОЛНОСТЬЮ ОТКАЗАТЬСЯ ОТ ПРИМЕНЕНИЯ GOTO. Можете опровергнуть?
Название темы "помогите мне вылечиться от goto", звучит как "Помогите мне кастрировать Clickermann !!!". Лучше бы просили избавиться от STRCONCAT, явный же костыль (для языка столь высокого уровня).
Вот такое мое мнение. Я хозяин_своих_сценариев(!) - как_хочу_так_и_пишу. И если это работает, то почему бы и нет? Это не значит, что я отказываюсь учиться и слушать советы тех кто знает лучше, не надо путать. Но экспериментировать то "с тем что нельзя" тоже надо. :)

65
В справке редактора можно найти описание директивы  #include - Начало => Основы => ДИРЕКТИВЫ ПРЕПРОЦЕССОРА (в таблице).
Или здесь: https://fffe2402bbf5ef6c167a6425ad9d25a1df7278b0.googledrive.com/host/0By5k6S2z1GEabEhJc1ZYZU9GWFE/ Основы => ДИРЕКТИВЫ ПРЕПРОЦЕССОРА (в таблице).
Попробуй заменить LOAD на #include и убрать команду HALT в конце файлов, которые вызываются этой самой #include.
Но в этом скрипте, после того как отработает инклуд "синий бот.cms", сразу начнется выполнение инклуда "красный бот.cms", что то наверно придется переделать.

Code: (clickermann) [Select]
WAIT(3) //ждём 3 секунды
LCLICK(550,131) //переход на список битв
WAIT(3) //ждём 3 секунды

#include "синий бот.cms"
#include "красный бот.cms"

WAIT(32)// ВРЕМЯ ИГРЫ
LCLICK(1265,62) // закрыть игру
LCLICK(584,527) // да
HALT//стоп

66
Уже попробовал - так нельзя...
Можно однако. Просто ошибки есть в твоем коде.
Подпрограмму SUB(MYSUB) надо вызывать однако, в строке 25, перед проверкой условий IF($sostoyanie = 1). И имена подпрограмм писать слитно надо, одним словом. Например, SUB(Time_Out) и вызов подпрограммы естественно тоже Time_Out(). В остальном всё OK вроде. Должно работать.  :)

67
Кстати, в тестовой версии 4.11 заложены вкусные плюшки,  для работы с текстовыми файлами в том числе.
http://crapware.aidf.org/forum/index.php?topic=356.msg6738#msg6738
Вот вам и удобный случай протестировать.  :)

68
Тогда еще вариации на тему "Поиск Васи Пупкина".  :)  Может еще как то можно это записать?
Code: (clickermann) [Select]
SUB(MYSUB)
   GETSCREEN
   IF(PXL(1387,19) = 9099498)
      BEEP(300,200) // Низкий сигнал
   ELSE
      BEEP(800,200) // Высокий сигнал
   END_IF
END_SUB

//-------------------------------- Или так...

SUB(MYSUB)
   GETSCREEN
   SWITCH(PXL(1387,19))
   CASE(9099498)
      BEEP(300,200)
   DEFAULT
      BEEP(800,200)
   END_SWITCH
END_SUB

Да, можно, про PXLCRC() и PXLXOR() чуть не забыл.

69
Приятного аппетита. :)
Вот еще, на десерт, немного измененный вариант подпрограммы с циклом и флагом.
IF_PIXEL_IN(933,115, 933,115, 1255211) заменил на IF(PXL(933,115) ! 1255211), т.к. там область поиска размером в один пиксель.
Code: (clickermann) [Select]
// Переменная-флаг "$next" (имя произвольное), изначально имеет значение 0, необходимое для запуска цикла "WHILE($next = 0)".
// При условии, что $next = 0 - тело цикла выполнится.
// При условии, что $next ! 0 - тело цикла НЕ выполнится, или прервется уже выполняющийся цикл.

// Подпограмма "MYSUB" определяет цвета двух пикселей в указанных координатах.
// Завершается, если цвета обоих пикселей не равны искомым цветам.

SUB(MYSUB) //  // Начало описания подпрограммы "MYSUB" (обязательно выше её вызова)
   //
   $next = 0 // Ставим переключатель в положение "Вкл. цикл"
   //
   WHILE($next = 0) // Начало цикла
      //
      GETSCREEN
      //
      IF(PXL(933,115) ! 10217469) // Если цвет первого пикселя НЕ равен 10217469
         //
         BEEP(800,200) // Высокий сигнал
         WAITMS(1000)
         //
         IF(PXL(933,115) ! 1255211) // Если цвет второго пикселя НЕ равен 1255211 (проверяется, только если цвет первого не 10217469)
            BEEP(300,200) // Низкий сигнал
            $next = 1 // Чтобы выйти из цикла присваиваем переменной-флагу значение 1 (любое отличное от нуля)
            WAITMS(1000)
         END_IF
         //
      END_IF
      //
      WAITMS(500) // Частота цикла
      //
   END_CYC // Конец цикла
   //
END_SUB // Конец описания подпрограммы "MYSUB"

MYSUB() // Вызываем подпрограмму "MYSUB"

HALT

70
Немного не успел с ответом, но всетаки выложу.
[spoiler]

Просто добавил комментарии, не меняя скрипта.
Code: (clickermann) [Select]
SUB(MYSUB) // Начало описания подпрограммы "MYSUB"
   MYSUB:
   WAITMS(1000)
   GETSCREEN
   IF_PIXEL_IN(933,115, 933,115, 1255211) // Поиск на экране пикселя с кодом цвета 1255211
      // Если такой пиксель есть, то ничего не делаем
   Else
      $1 = 0 // Переменной $1 присваивается значение 0, которую нигде не используем (если небыло присвоения ранее, то значение итак равно нулю)
      WAITMS(1000)
      BEEP(300,200) // Если такого пикселя нет, то воспроизводим Низкий сигнал
   END_IF
   GOTO(MYSUB) // Переход на метку "MYSUB:" внутри подпрограммы (это зацикливает скрипт и выхода отсюда нет)
END_SUB // Конец описания подпрограммы "MYSUB"

//--------------------------------
// С этого места начинается выполнение сценария (выше было описание подпрограмм)

1: // Метка для перехода инструкцией GOTO (нигде в скрипте перехода на нее нет)

GETSCREEN
IF_PIXEL_IN(1375,23, 1375,23, 10217469) // Поиск на экране пикселя с кодом цвета 10217469
// Если такой пиксель есть, то ничего не делаем
Else
   BEEP(800,200) // Если такого пикселя нет, то воспроизводим Высокий сигнал
   WAITMS(1000)
   MYSUB() // Вызываем подпрограмму "MYSUB", которая будет выполняться бесконечно
END_IF

Получается, что выполнение сценария "болтается" бесконечно между строками скрипта GOTO(MYSUB) и MYSUB: .
Операция присвоения переменной $1 значения 0, это не есть переход на метку 1: . И если это флаг для проверки чего либо, то в этом скрипте проверка нигде увы не происходит.
Я предположил, что это весь скрипт, а не маленький кусок большого скрипта.
[/spoiler]

Думаю надо просто написать правильный скрипт с подробными комментариями.
Всё получится, главное не париться.  :)
P.S. Сегодня же пятница!!! :) :) :)

71
Нашел я ошибку. Вот так надо вроде:
[spoiler]
Code: (clickermann) [Select]
SUB(хилка, $slot_na_paneli)
   switch($slot_na_paneli)
   case(1)
      lclick(100,150)
   case(2)
      lclick(150,150)
   case(3)
      lclick(200,150)
   end_switch  // Вот это надо было добавить.
END_SUB


хилка(1)
хилка(2)
хилка(3)
[/spoiler]

я всегда в своих подсказках оставляю пищу для размышлений чтобы человек не паразитировал на других, а включал немного свой мозг и развивался.

72
В редакторе Кликермана, вверху, есть такая удобная волшебная палочка "Расставить отступы" --> , ее использование повышает читаемость скрипта и помогает увидеть ошибки.


73
Quote
... (если еще кто подскажет как избавиться от каракулей вместо русских букв - вообще супер будет)
Каракули получаются когда копируешь скрипт из редактора Clickermann'а. Попробуй сначала сохранить скрипт, потом открыть его в Блокноте, и скопировать уже из него.
Прочитать каракули поможет всеми любимая программа Shtirlitz v4.01, есть так же плагин Shtirlitz для Notepad++.

74
Можно попробовать сделать по другому.
Если в Firefox в настройках соединения установить - "Использовать системные настройки прокси", а в Internet Explorer эти самые настройки прописать и применить, то Firefox применяет их без перезагрузки. Можно попробовать сделать это с помощью *.reg или *.bat-файлов.
Пробовать надо...

75
Тогда можно редактировать файл настроек Firefox "prefs.js".
Который лежит в папке профиля C:\Users\Имя_Пользователя\AppData\Roaming\Mozilla\Firefox\Profiles\блаблабла\

Там есть такие строки (добавил комментарии):
Code: (javascript) [Select]
user_pref("network.proxy.type", 0); // 1 - включен прокси; 0 - выключен (эта строка в файле есть всегда)
user_pref("network.proxy.share_proxy_settings", true); // Флаг использования этого прокси-сервера для всех протоколов (строка есть только когда опция включена)
Code: (javascript) [Select]
user_pref("network.proxy.ftp", "192.168.0.12");
user_pref("network.proxy.ftp_port", 3122);
user_pref("network.proxy.http", "192.168.0.12");
user_pref("network.proxy.http_port", 3122);
user_pref("network.proxy.socks", "192.168.0.12");
user_pref("network.proxy.socks_port", 3122);
user_pref("network.proxy.ssl", "192.168.0.12");
user_pref("network.proxy.ssl_port", 3122); // Все эти строки появляются в файле настроек, только тогда, когда прописан прокси

В данном примере Firefox настроен на соединение через прокси 192.168.0.12, порт 3122.
Firefox придется перезапускать, каждый раз после редактировании файла.

Pages: 1 ... 3 4 [5] 6 7 ... 10