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'ы меня тоже помучить успели
Думаю, хорошая идея в любых скриптах перед каждым 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))
не работают