1
Общие вопросы / Re: работа IF_PICTURE_IN, #include
« on: July 16, 2017, 09:56:35 PM »В обоих случаях речь идет о END_CYC.Нашёл) спасибо)
Добавлена тема оформления "Clickermann" для кода с подсветкой синтаксиса. Выбирается из выпадающего списка "Код" (рядом с "цвет", "размер" и "шрифт") в режиме редактирования поста. Либо просто BB-тегом "code=clickermann"
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.
В обоих случаях речь идет о END_CYC.Нашёл) спасибо)
В этом цикле нет ошибок. Просто он никогда не выполнится потому что $t изначально не равна 20Это логическая ошибка, я сразу указал.
Что по твоему скрипту то там сходу ошибки в окончаниях. Ну неужели так сложно, нажимаешь волшебную палочку в редакторе и сразу видны лишние окончания.Хмм 224 убрал лишнее, спасибо, а как END_THREAD в 984 лишним может быть?
Строки 224 и 984
Не удивительно что у тебя инклуды повисли, они не терпят таких ошибок.
Рановато вам ещё с++ учить, если в трёх соснах Clickermann так плутаете.Как то с++ попроще кликермана для меня) там как-то есть где развернуться) просто я не могу пока им полноценно пользоваться, поэтому параллельно разбираю КМ. Учитывая что я кроме с++ (который мне очень нравится, хоть я его и не выучил до конца) учил только HTML, переход на новый синтаксис на мне естественно сказался, + тут язык сценариев процедурный, чем отличается от С++ с его гибкостью (хотя и тут изворачивайся не хочу ). И не знаю хороший ли это результат после недели работы с Кликером (с перерывами естественно ) но вот такой сыроватый бот для игры у меня получился. Функционал у него пока не ахти. Зато работать будет пока комп не повиснет. И на любом разрешении (моя гордость ).
FOR($t=0, $t = 20)
END_CYC
Вот и такие реально Это тебе на битву экстрасенсов надо.... Скрипты где?
PRINT("начинаем")
//дальше сам скрипт
в логе при запуске пустота.По собственному опыту, проверьте внимательно (построчно) вставляемые файлы (оба инклюда). Убедитесь, что нигде в них в общем коде не срабатывает Halt - большая вероятность, что скрипт запускается, видит его и закрывается.На тот момент Halt'ом не пользовался, да и сейчас без надобности почти (вставил его только раз в скрипт). End'ы меня тоже помучить успели , учу с++, там конец операторов другой) часто ловлю себя на точке с запятой где нибудь вставленной . А вот с переменными вроде $_time не очень дружу, так как не понимаю их. Проще поток левый сделать который WAITMS считать будет (мне проще, так как понятнее). Вообще то что не понимаю как работает стараюсь не использовать, чтобы избежать ошибок которые потом не исправишь.
Думаю, хорошая идея в любых скриптах перед каждым Halt добавлять строчку "Print("время: ", $_ms-$start)". А в начале - "$start=$_ms". Тогда вы будете точно видеть, запускался ли скрипт (да и знать время работы не помешает).
Ну и заодно, просматривая, проследите за всеми End_sub (End_if,End_cyc) - случайная потеря (при копировании) End_sub приводит ну к очень неожиданным глюкам
Да, это функция условие и работает она точно также как обычное условие.Странно что инклуд глючит, скрипт просто не запускается при вставке инклуда, если то что в файле поставить на место инклуда, всё работает как часики. В чём может быть проблема?
Да, именно так #include и работает, вставляет за место себя код из файла. Могут быть конечно и #include в #include.
IF_PICTURE_IN($x1,$y1,$x2,$y2,"shot1.bmp",-1,100)
$a = 1
ELSE
$a=0
END_IF
будет искать в указанном диапазоне указанную картинку и если найдёт присвоит переменной а единицу, иначе присвоит 0?сделал шаблон как посоветовали, скриншот не появляется, в чём может быть проблема?Всё заработало, причин не знаю. Спасибо)
Как вариант проверки общей работоспособности цветокоррекции у него на компе, пусть попробует запустить из шаблонов:сделал шаблон как посоветовали, скриншот не появляется, в чём может быть проблема?
Code: (clickermann) [Select]GETSCREEN
Если ошибки не будет (и в папке скрипта появится рисунок с ЦК), пусть ищет, где подправлял код под размеры/цвета своего окна.
COLORMODE(6)
SCREENSHOT
HALT
COLORMODE обычно не беспокоит даже отсутствие GETSCREEN (он и черный экран готов корректировать), так что внимание к запятым и скобкам (к лишним/недостающим/случайно уползшим на другую строчку).
Работать будет. Но лучше избавляйся от goto(). Ну ооочень у тебя их много.ну уже появилась идея свитчем делать error.cms, потом подумаю главное принцип работы понял
В error.cms они вообще не нужны. Там в любом случае все придет в нужное место.
да спасибо, немного ошибся. Не подумал что он всё равно нарастит ещё единицу после прерывания цикла.Code: (clickermann) [Select]FOR($a = 0, $a < 15)
IF(условие)
$a = 16 // если условие верно прерываем цикл
ELSE
WAIT(1)
END_IF
// Цикл наращивает переменную в этом месте. А это значит что при выходе из цикла переменная будет равна: В случае если условие верно - 17, если не верно - 15.
END_CYC
IF ($a = 14) // Значит это условие не сработает.
#include "error.cms" // если эта строка находится внутри цикла, и в файле error.cms есть переход на метку, а сама метка находится за пределами цикла, это считается "прыжком" из него.
goto(end)
END_IF
FOR($c = 0, $c < 300)
FOR($a = 0, $a < 15)
IF(условие)
$a = 16
ELSE
WAIT(1)
END_IF
END_CYC
IF ($a = 15)
#include "error.cms"
goto(end)
END_IF
FOR($a = 0, $a < 15)
IF(условие)
$a = 16
ELSE
WAIT(1)
END_IF
END_CYC
IF ($a = 15)
#include "error.cms"
goto(end)
END_IF
end:
END_CYC
error.cmsIF(//проверка)
//устранение ошибки
goto(endEr)
ELSE
IF(//проверка)
//устранение ошибки
goto(endEr)
ELSE
IF
...
goto(endEr)
ELSE
END_IF
END_IF
END_IF
endEr:
Так будет работать?
GETSCREEN(100,0,500,260)
COLORMODE(6,100,0,500,260)
IF_PICTURE_IN (100,0, 500,260, "boy0001.bmp",-1, 100)
DEFINE($boy_x,$_return1)
DEFINE($boy_y,$_return2)
END_IF
при запуске на моём компьютере, всё отлично, скрипт работает. Дал другу, ему выдаёт при запуске "Ошибка при интерпретации строки: COLORMODE(6,100,0,500,260)FOR($c = 0, $c < 300)
FOR($a = 0, $a < 15)
IF(условие)
$a = 16
ELSE
WAIT(1)
END_IF
END_CYC
IF ($a = 14)
#include "error cms"
goto(end)
END_IF
FOR($a = 0, $a < 15)
IF(условие)
$a = 16
ELSE
WAIT(1)
END_IF
END_CYC
IF ($a = 14)
#include "error cms"
goto(end)
END_IF
end:
END_CYC
а в файле error.cmsIF(//проверка)
//устранение ошибки
goto(endEr)
ELSE
IF(//проверка)
//устранение ошибки
goto(endEr)
ELSE
IF
...
goto(endEr)
ELSE
END_IF
END_IF
END_IF
Вроде goto не в циклах получается. А то меня вложенные циклы выше немного смутили)
Немного поправил. Выпрыгивать из циклов по goto() ЗАПРЕЩЕНО!Почему запрещено? проблема в том что мне надо что то вроде проверок на ошибки, то есть
DEFINE($a)
FOR($a, $a < 20)
GETSCREEN($nkan_x,$nkan_y,$nkan_x+1,$nkan_y+1)
DEFINE($nkan)
$nkan = PXL($nkan_x,$nkan_y)
PRINT("nkan", $nkan)
IF($nkan = 11862012) //если на главном окне
goto(zagr)
ELSE
WAIT(1)
END_IF
END_CYC
goto(end)
....
end:
IF (проверка)
//исправить и начать цикл заново
ELSE IF(следующая проверка)
//исправить и начать цикл заново
ELSE
....
...
END_IF
END_IF
и так по отношению почти к каждому циклу. Что то вроде тотального контроля. И я вообще не представляю как это сделать без goto. Точнее представляю, но код будет в разы объёмнее.DEFINE($a)
FOR($a, $a < 20)
GETSCREEN($nkan_x,$nkan_y,$nkan_x+1,$nkan_y+1)
DEFINE($nkan)
$nkan = PXL($nkan_x,$nkan_y)
PRINT("nkan", $nkan)
IF($nkan = 11862012) //если на главном окне
goto(zagr)
ELSE
WAIT(1)
END_IF
END_CYC
goto(end)
zagr:
UNDEFINE($nkan)
UNDEFINE($a)
DEFINE($a)
FOR($a,$a < 60) //проверка не идёт ли загрузка
DEFINE($zagr)
GETSCREEN($zagr_x,$zagr_y,$zagr_x+1,$zagr_y+1)
$zagr = PXL($zagr_x,$zagr_y)
PRINT("zagr",$zagr)
IF ($zagr = 16579068) // подставить 16579068 если метаморфоз или 1600355 если стандартное древо
goto(arena)
ELSE
WAIT(1)
END_IF
END_CYC
goto(end)
arena:
UNDEFINE($a)
UNDEFINE($zagr)
LCLICK($arena_x,$arena_y) //идем на арену
IF ($zagr = 16579068) // подставить 16579068 если метаморфоз или 1600355 если стандартное древо
потому что такие коды почему тоIF ($zagr = 16579068 ^ $zagr = 1600355)
IF ($zagr = 16579068 | $zagr = 1600355)
IF ($zagr = (16579068 ^1600355))
не работают