Author Topic: Откритие .cms из скрипта.  (Read 1712 times)

0 Members and 1 Guest are viewing this topic.

Otlichnii_paren

  • Освоившийся
  • **
  • Posts: 25
    • View Profile
Откритие .cms из скрипта.
« on: September 12, 2019, 05:00:26 PM »
Добрый день. Я знаю что есть что-то похожее, но не смог пока найти вернее руки не доходят по искать. Так вот для того что бы чуть чуть разгрузить громоздкий скрипт, фактически игра ведется без моего не посредственного участи, но пришлось сделать кучу картинок кучу IF ов и циклов, соотвественно огроменный скрипт получился, хоть комментариями помечаны важные этапы, все ровно, чтоб чуть-чуть, что-то где то подправить, приходиться прокручивать искать двигать, особенно если нужно всунуть условие между условиями. Так вот можно как то сделать чтоб при условие IF истина скрипт обращался к другуму файлу .cms и соответственно возрващался обратно в то же метко с который был переход, а не в самое начало и шел дальше? Это хоть чуть чуть помогло бы разгрузить громоздкий код, а то машина даже при запуске подвисает, хотя может быть виною этому colormode(). И какую прогу используете для работы со скриптами? чтоб не путаться в циклах и условиях? В редакторе порою по 10 минут выискиваешь не закрытый end_if или end_cyc, спасибо заранее. Ну может конечно есть более современные решения моей проблемы грамоздкости скрипта, если есть подскажите, буду благодарен.
« Last Edit: September 12, 2019, 09:09:50 PM by Otlichnii_paren »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Откритие .cms из скрипта.
« Reply #1 on: September 13, 2019, 01:00:41 PM »
Можно подгружать по #include "mylib.cms"
Но лучше не делать это напрямую в условиях.
Правильней вынести код в подпрограммы, а их уже если надо вынести в отдельные файлы и подключать в начале скрипта.

Пример:
Code: (clickermann) [Select]
#name "Главный скрипт"

#include "yes.cms"
#include "no.cms"


// здесь идёт главный скрипт
WHILE(1)
    $var = RND(0, 10)   
    IF($var > 5)
        yes("Да, $var больше 5-и.")
    ELSE
        no("Чёт мало.")
    END_IF
    WAITMS(1000)
END_CYC

HALT

Code: (clickermann) [Select]
// В файле "yes.cms"
SUB(yes, $text)
    LOGWRITE($text)
    LOGWRITE("Вызвалась подпрограмма 'yes' в модуле 'yes.cms'")
    LOGWRITE()
END_SUB

Code: (clickermann) [Select]
// В файле "no.cms"
SUB(no, $text)
    LOGWRITE($text)
    LOGWRITE("Вызвалась подпрограмма 'no' в модуле 'no.cms'")
    LOGWRITE()
END_SUB

Лог:
Quote
13:11:15 Чёт мало.
13:11:15 Вызвалась подпрограмма 'no' в модуле 'no.cms'
13:11:15
13:11:16 Чёт мало.
13:11:16 Вызвалась подпрограмма 'no' в модуле 'no.cms'
13:11:16
13:11:17 Да, $var больше 5-и.
13:11:17 Вызвалась подпрограмма 'yes' в модуле 'yes.cms'
13:11:17
13:11:18 Чёт мало.
13:11:18 Вызвалась подпрограмма 'no' в модуле 'no.cms'
13:11:18
13:11:19 Чёт мало.
13:11:19 Вызвалась подпрограмма 'no' в модуле 'no.cms'
13:11:19
13:11:20 Да, $var больше 5-и.
13:11:20 Вызвалась подпрограмма 'yes' в модуле 'yes.cms'
13:11:20
13:11:21 Чёт мало.
13:11:21 Вызвалась подпрограмма 'no' в модуле 'no.cms'
13:11:21

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


Чтобы не путаться в окончаниях нужно сразу их писать вместе с началом. Потом вставлять внутрь другие блоки или оборачивать снаружи. Работать блоками.
В редакторе есть кнопка "волшебная палочка" для расставления отступов. После этого проверять структуру.
Так же стоит делить на подпрограммы, даже если они вызываются один раз. Код станет более структурированным, в нём легче ориентироваться и легче править.

А редактировать можно в любом редакторе. Я параллельно в Notepad++ (см. скрин) и встроенном. Во встроенном шаблоны и расстановка отступов, в Notepad++ сворачивание блоков, и подсветка одинаковых выделенных слов, плюс шикарный поиск и замена.
« Last Edit: September 13, 2019, 01:18:51 PM by Vint »