Author Topic: Вопрос по "include"  (Read 5938 times)

0 Members and 1 Guest are viewing this topic.

Макс666

  • Зашел в гости
  • *
  • Posts: 5
    • View Profile
Вопрос по "include"
« on: February 09, 2018, 02:04:03 PM »
Здравствуйте. Помогите новичку (мне) в написании скрипта.

Предположим у меня есть 5 небольших скриптов. Для удобства использования я хочу сделать следующее:

Code: [Select]
WAIT(3)

FOR($q=0, $q<10)

#include "s1.cms"

#include "s2.cms"

#include "s3.cms"

#include "s4.cms"

#include "s5.cms"

END_CYC

HALT


Скрипт который будет запускать по очереди скрипты. Скрипт описанный выше запускает только "s1.cms", после завершения следующий скрипт не запускается. Или include так не работает? Подскажите другие команды/функции


putman

  • Активный участник
  • ***
  • Posts: 199
    • View Profile
Re: Вопрос по "include"
« Reply #1 on: February 09, 2018, 02:06:49 PM »
Приведите код скриптов которые в инклюдах.

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Вопрос по "include"
« Reply #2 on: February 09, 2018, 02:49:04 PM »
#include работает точно также как и в других программах, вставляет за место себя текст из указанного файла, тем самым собирая в памяти один общий скрипт. Это будет тоже самое, если бы ты слил текст из пяти файлов в один скрипт.

Если в #include есть конфликтующие переменные или описания подпрограмм и потоков которые вообще нельзя вставлять внутрь цикла то такой скрипт просто не будет работать правильно.

В предложенном варианте #include используются извращенным способом.

Обычно во внешний файл выносят описания подпрограмм чтобы они не загромождали основной код. В основном коде #include пишется сверху.

Макс666

  • Зашел в гости
  • *
  • Posts: 5
    • View Profile
Re: Вопрос по "include"
« Reply #3 on: February 09, 2018, 02:58:57 PM »
#include работает точно также как и в других программах, вставляет за место себя текст из указанного файла, тем самым собирая в памяти один общий скрипт. Это будет тоже самое, если бы ты слил текст из пяти файлов в один скрипт.

Если в #include есть конфликтующие переменные или описания подпрограмм и потоков которые вообще нельзя вставлять внутрь цикла то такой скрипт просто не будет работать правильно.

В предложенном варианте #include используются извращенным способом.

Обычно во внешний файл выносят описания подпрограмм чтобы они не загромождали основной код. В основном коде #include пишется сверху.

Я не знаю как include работает в других программах)

Приведите код скриптов которые в инклюдах.

Скорее всего в тех скриптах будут записаны макросы. Записанный макросы обычно очень объемные. И хотелось бы не запихивать все в один файл..
По тому же принципу:
Code: [Select]
код
макрос1
код
макрос2

и в таком плане

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Вопрос по "include"
« Reply #4 on: February 09, 2018, 03:46:10 PM »
Если там запись то возможно ты записал остановку кликера.

Алексей87

  • Освоившийся
  • **
  • Posts: 32
    • View Profile
Re: Вопрос по "include"
« Reply #5 on: March 03, 2021, 12:46:14 PM »
Всем добрый день.
Возник вопрос по include, не стал создавать новую тему.
1. Допустим я хочу использовать несколько include в моем скрипте. Например 3 шт. (3 скрипта)
Я правильно понимаю что все скрипты всех include обязаны лежать во одной папке иначе идет ругань что не найден такой то скрипт, на который ссылается конкретный include?
 Как можно решить эту проблему?
2. Допустим я хочу включить в скрипт это
#include "start.cms"
#include "main.cms"
#include "finish.cms"
Я хочу чтобы каждый отдельный скрипт лежал отдельной в папках допустим папки "start", "main", "finish" в которых свои скриншоты и поиски по bmp изображениям.
И каждый отдельный файл скрипта со своими скринами лежал обособленно и не смешивался в одну общую помойку.

Спасибо!
« Last Edit: March 03, 2021, 12:48:02 PM by Алексей87 »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Вопрос по "include"
« Reply #6 on: March 03, 2021, 01:34:44 PM »
1. Нет, не обязаны. Но работают, вроде, только относительные пути.
2. Ну и раскидай их по подпапкам

Пути к инклюдам относительные, папка с сохранённым скриптом текущая, от неё и составляем.
Как и в cmd/bat или других консолях можно перемещаться на уровень вверх '..' или, к примеру, на 2 уровня '..\..'
Допустим главный скрипт с инклюдами "base.cms" лежит в папке Base и хотим раскидать в подпапки
└ Base
        ├ base.cms
        ├ start
        │      └ start.cms
        ├ main
        │      └ main.cms
        └ finish
                └finish.cms

Подключение в кликере:
Code: (clickermann) [Select]
#include "start\start.cms"
#include "main\main.cms"
#include "finish\finish.cms"


Если папки находятся рядом на том же уровне
├ Base
│      └ base.cms
├ start
│      └ start.cms
├ main
│      └ main.cms
└ finish
        └finish.cms

подключатся будут так:
Code: (clickermann) [Select]
#include "..\start\start.cms"
#include "..\main\main.cms"
#include "..\finish\finish.cms"
« Last Edit: March 03, 2021, 01:51:12 PM by Vint »


Алексей87

  • Освоившийся
  • **
  • Posts: 32
    • View Profile
Re: Вопрос по "include"
« Reply #7 on: March 03, 2021, 02:13:55 PM »
Спасибо за развернутый ответ! Теперь все понятно! То что и нужно, буду пробовать.

Алексей87

  • Освоившийся
  • **
  • Posts: 32
    • View Profile
Re: Вопрос по "include"
« Reply #8 on: March 03, 2021, 05:31:59 PM »
Хм попробовал. И либо чего то не понимаю либо не срабатывает то о чем я думаю.
Пишу скрипт упрощающий работу для lordsmobile. Привожу скрин ниже.
Описание:
1. у меня запущен скрипт LordsMobile_1_0.cms;
2. Внутри есть подпапка "Start and skip shop";
3. Внутри указанной папки скрипт+скрины;
4. Содержание скрипта LordsMobile_1_0.cms на скрине
5. В скрипте и папке Start and skip shop присутствуют все необходимые .bmp;

Получается что программа требует чтобы все файлы .bmp все таки лежали в папке с основным скриптом а не в папка с вызываемыми #include?

Вновь не могу приложить на сайт скриншоты..

https://drive.google.com/file/d/10_gbIoR48SGdw8MDYa9Xlh-pAi49UKeP/view?usp=sharing

zxc17

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Re: Вопрос по "include"
« Reply #9 on: March 03, 2021, 05:47:24 PM »
Рабочая папка будет та, из которой запускается головной скрипт.
Следовательно, в вызываемых скриптах относительные пути к картинкам надо прописывать так, как будто скрипт лежит в одной папке с головным.
Или можно прописать абсолютные пути, тогда никаких проблем не возникнет.
Например: C:\Clikerman\finish\1.bmp
Не слишком удобно, но скрипт точно будет знать, где искать.

Алексей87

  • Освоившийся
  • **
  • Posts: 32
    • View Profile
Re: Вопрос по "include"
« Reply #10 on: March 03, 2021, 06:06:53 PM »
Рабочая папка будет та, из которой запускается головной скрипт.
Следовательно, в вызываемых скриптах относительные пути к картинкам надо прописывать так, как будто скрипт лежит в одной папке с головным.
Или можно прописать абсолютные пути, тогда никаких проблем не возникнет.
Например: C:\Clikerman\finish\1.bmp
Не слишком удобно, но скрипт точно будет знать, где искать.

Откуда мной сделаны следующие выводы:
1. Include - это просто вставка текста из другого файла, значит головной скрипт должен содержать фактические пути расположения графических файлов, к которым он обращается;
2. В связи с тем что есть условие что файлы, к которым обращается скрипт должны находиться в той же папке что и сам скрипт нельзя раскидать файлы по папкам как я хотел и собрать их все через include потому что для головного скрипта это будут не родные папки;
3. Схемы, приведенные выше для распределения скриптов - сработают, но для корректного и красивого размещения в папках скриншотов для каждого из скрипта - не сработает.

Или можно прописать абсолютные пути, тогда никаких проблем не возникнет.
Например: C:\Clikerman\finish\1.bmp
Проблемы возникают, потому что каталог в вашем примере C:\Clikerman\finish\1.bmp НЕ является родным каталогом для основного скрипта и графические файлы в папке finish обнаружены им не будут.
« Last Edit: March 04, 2021, 07:40:45 AM by Алексей87 »

4.У.В.@.К

  • Активный участник
  • ***
  • Posts: 117
    • View Profile
Re: Вопрос по "include"
« Reply #11 on: March 04, 2021, 10:50:39 AM »
Архив с примером как это работает - https://yadi.sk/d/vSYDhKFlMaZKlg

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Вопрос по "include"
« Reply #12 on: March 04, 2021, 11:19:53 AM »
Откуда мной сделаны следующие выводы:
1. Include - это просто вставка текста из другого файла, значит головной скрипт должен содержать фактические пути расположения графических файлов, к которым он обращается;
2. В связи с тем что есть условие что файлы, к которым обращается скрипт должны находиться в той же папке что и сам скрипт нельзя раскидать файлы по папкам как я хотел и собрать их все через include потому что для головного скрипта это будут не родные папки;
3. Схемы, приведенные выше для распределения скриптов - сработают, но для корректного и красивого размещения в папках скриншотов для каждого из скрипта - не сработает.

Да, include это просто вставка кода из другого файла.

В питоне, например, include почти так же работают (есть контроль уже импортированного, чтоб два раза не читать, но там и вставить 2 раза одно и то же нельзя). Но что касаемо текущей папки, всё то же самое. Если скрипт читает файл из текущей папки, то импортировав скрипт файл не найдёт. Есть несколько решений, самое простое - сменить текущую папку, но это совсем тупой способ, который не сработает если много импортов. В любом случае это лучше не применять. Правильней добавить в переменную path (в самом скрипте) пути других папок с импортами.

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

Сейчас у тебя проблема с путями к ресурсам отдельных скриптов? Мы же здесь программируем, а значит решаем задачи. И этот вопрос можно решить.
Можно же разделить путь к файлам и имена и задать отдельно путь в импортируемом файле и путь в импортирующем.

Для примера, вот твоё расположение:

└ LordsMobile
        ├ LordsMobile_1_0.cms     // основной скрипт
        └ Start and skip shop
                              ├ Start and skip shop.cms    // импортируемый скрипт
                              └ 06_VIP.bmp                       // ресурс


В файле Start and skip shop.cms
путь задаём так
Code: (clickermann) [Select]
DEFINE($path_start, "")используем везде так
Code: (clickermann) [Select]
GETSCREEN(0,0, 1980, $_ymax)
IF_PICTURE_IN(0,0, 1980, $_ymax, STRCONCAT($path_start, "06_VIP.bmp"))
    MOVE($_return1, $_return2)
    WAITMS(100)
END_IF

В главном скрипте LordsMobile_1_0.cms импортируется так
Code: (clickermann) [Select]
$path_start = "Start and skip shop\"
#include "Start and skip shop\Start and skip shop.cms"

В итоге все файлы находятся и при самостоятельном запуске Start and skip shop.cms и при его импорте.

P.S. Если самостоятельный запуск импортируемых скриптов не нужен (обычно это так) то делаешь как сказали два раза выше.
« Last Edit: March 04, 2021, 11:24:02 AM by Vint »


Алексей87

  • Освоившийся
  • **
  • Posts: 32
    • View Profile
Re: Вопрос по "include"
« Reply #13 on: March 04, 2021, 12:12:32 PM »
Нет нет, самостоятельный запуск не нужен! Иначе смысл от этого. Я их и вручную могу запустить самостоятельно.
А вот с расположением файлов изображений в каждой из папки - спасибо! буду пробовать по вашему примеру!!
Спасибо. По результатам отпишусь.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Вопрос по "include"
« Reply #14 on: March 04, 2021, 12:30:10 PM »
Нет нет, самостоятельный запуск не нужен! Иначе смысл от этого. Я их и вручную могу запустить самостоятельно.
Самостоятельный - это имеется ввиду напрямую без импорта.
Может не так выразился. Прямой запуск. Непосредственный. ХЗ как назвать.