Author Topic: Страсти по #include  (Read 5923 times)

0 Members and 1 Guest are viewing this topic.

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Страсти по #include
« on: February 13, 2014, 01:41:36 PM »
Ошибка Автозапуска скрипта
#autorun Не работает если в скрипте присутствуют #include

« Last Edit: February 17, 2014, 09:19:17 AM by Johnny »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Ошибка Автозапуска
« Reply #1 on: February 13, 2014, 02:57:00 PM »
Ну тогда до кучи:
SUB() Не работает если он внутри #include


ЦИТРИН

  • Супермодератор
  • Оплот сообщества
  • *
  • Posts: 484
  • Марафон опавших листьев, коктейль из дыма и мыслей
    • View Profile
Re: Ошибка Автозапуска
« Reply #2 on: February 13, 2014, 03:27:35 PM »
Нельзя ли для  каждной новой версии открывать отдельный раздел?
 Я не совсем понимаю можно ли уже пользоваться 4.9,  или ещё сыро.
Бабочки полёт будит тихую поляну в солнечном свету...

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Ошибка Автозапуска
« Reply #3 on: February 13, 2014, 03:54:49 PM »
Нельзя ли для  каждной новой версии открывать отдельный раздел?
 Я не совсем понимаю можно ли уже пользоваться 4.9,  или ещё сыро.
Я всё новое делаю уже на 4.9. Старые не переписывал  :) Так и запускаю, то 4.8, то 4.9


Johnny

  • Создатель
  • Герой форума
  • *
  • Posts: 593
    • View Profile
Re: Ошибка Автозапуска
« Reply #4 on: February 15, 2014, 08:53:35 AM »
Ну тогда до кучи:
SUB() Не работает если он внутри #include
это ты только сейчас обнаружил или выжидал пока кто то упомянет #include?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Ошибка Автозапуска
« Reply #5 on: February 15, 2014, 12:39:38 PM »
Выжидал.
Я думал ты знаешь. Написал просто, чтоб не забыли.


NEf

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Re: Ошибка Автозапуска
« Reply #6 on: February 15, 2014, 11:31:44 PM »
Ну тогда до кучи:
SUB() Не работает если он внутри #include
это ты только сейчас обнаружил или выжидал пока кто то упомянет #include?
дык, стоит ли ждать исправление для подпрограмм через #include или это будет новой "фишкой" в 4.9?
ладно еще вызов подпрограмм пришлось везде переписывать руками (чёртов Вин8 криво ищет по содержимому файлов), но удалять структуру подпрограмм уже не выход (думаю, и для многих тут заинтересованных)

хотя, если старые добрые фишки от 4.7 удастся вернуть - то все переработки скриптов под новый формат будут оправданы с лихвой - аргументы в SUB просто мечта! :)
Извини, я хотел.

Johnny

  • Создатель
  • Герой форума
  • *
  • Posts: 593
    • View Profile
Re: Ошибка Автозапуска
« Reply #7 on: February 17, 2014, 05:04:16 AM »
исправим сегодня завтра следующим патчем.
исправили б и раньше, если б люди своевременно сообщали об ошибках

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Ошибка Автозапуска
« Reply #8 on: February 17, 2014, 08:23:20 AM »
А ограничение на расположение подпрограмм раньше вызова принципиальное? В смысле, можно как то обойти его и сделать как раньше? Не то чтобы трудно переставить, просто значимая основная часть скрипта получается закопанной чёрт знает куда, так неудобно редактировать. А с починенным инклюдом народ начнёт их пихать не следя.
Или тогда уж наказать: все инклюды вначале скрипта. Но лучше конечно разрешить первое, чем запретить второе.


Johnny

  • Создатель
  • Герой форума
  • *
  • Posts: 593
    • View Profile
Re: Страсти по #include
« Reply #9 on: February 17, 2014, 09:17:10 AM »
А ограничение на расположение подпрограмм раньше вызова принципиальное?
настолько, что оно по другому не заработает в данной версии парсера. не то что бы оно было сделано искусственно. просто пошел по наиболее простому пути реализации

Quote
Или тогда уж наказать: все инклюды вначале скрипта. Но лучше конечно разрешить первое, чем запретить второе.
ну не все, а только те в которых подпрограммы. да и вообще нужно держать в голове всегда что инклуд, это просто копировать-вставить код из внешнего файла, не более. все зависит от содержимого этого файла.
в хорошей концепции в инклуде содержатся только подпрограммы (отлаженные и рабочие), которым больше не требуется внимания. в основном же файле просто идет их вызов по наглядным именам.
инклуд (как и тело подпрограммы) где то посредине кода для меня честно говоря выглядит дико.


то есть например ПРАВИЛЬНАЯ концепция построения кода в моем понимании (сквозь призму опыта лол) выглядит как то так (сильно упрощенный пример):

Code: (clickermann) [Select]
// ----- header -----

sub(print_one)
  print("one!")
end_sub

sub(print_two)
  print("two!")
end_sub

sub(roll)
  $roll_res = rnd(1,2)
end_sub

//----- body -----

roll()

if($roll_res = 1)
  print_one()
else 
  print_two()
end_if

halt


то есть, все группы логических действий объеденины в подпрограммы с понятным именем. подпрограммы выше, основное тело программы внизу. в принципе, все уже хорошо. но что бы стало еще лучше, мы убираем блок "header" во внешний файл, который цепляем через инклуд, получая код вида

Code: (clickermann) [Select]
#include "roll_subs.cms"

//----- body -----

roll()

if($roll_res = 1)
  print_one()
else 
  print_two()
end_if

halt

любо дорого смотреть на такой код. вот к чему я вас собственно толкаю. а не к тому чтоб посредине программы вылезали инклуды и телеса подпрограмм. это даже наверное хуже чем goto :D

так что как только патч для инклудов будет выпущен (сегодня завтра), можете тыкать в этот пост всех неофитов.
« Last Edit: February 17, 2014, 09:20:10 AM by Johnny »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Страсти по #include
« Reply #10 on: February 17, 2014, 09:56:47 AM »
Я их в середину никогда и не пихал. Мысли такой не возникало. И да, использовал только для подпрограмм. Всё по фен-шую  :)
Просто есть товарищи, которые пихают их куда не попадя, да ещё в диком количестве.

???   :o   :-\   :-[   :'(   ???   :o   :-\   :-[   :'(   ???   :o   :-\   :-[   :'(   ???   :o   :-\   :-[   :'(   ???   :o   :-\   :-[   :'(   ???   :o   :-\   :-[   :'(   ???   :o   :-\   :-[   :'(   ???   :o   :-\   :-[   :'(   
« Last Edit: February 17, 2014, 10:02:21 AM by Vint »


NEf

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Re: Страсти по #include
« Reply #11 on: February 17, 2014, 11:31:48 AM »
Дело не в пихании их в средину, а наоборот оптимизации читаемости и юзабельности.. мы, юзеры, ведь не для парсера пишем код, а выполняемое и редактируемое "рабочее тело".
Конечно, не скажу за всех, но основная часть ведь пишет код под игрушки :) а в играх что главное? мобильность и быстрая адаптация под ситуацию.


[spoiler=Вот пример:]
Code: (clickermann) [Select]
//--------------------------------
#name "sand@Reval_v3.0"
LOGCLEAR
print("INITIALIZING...")
print("===SCRIPT===")
print("=looting Sand at Reval=")
print("..v3.0")
wait(1)

// === SET this area up! ===
$petslots = 8  // !!! needed by #bag_check
$boots = 1     // 1 if you have agility boots

// === unsetting area ===
$runcount = 0      //counts how meny runs done
$starttime = $_time_t //starting time
$grabslots = 40 - 1 - $boots + $petslots - 1 //free bag slots

//--- LIBS INCLUDES - must printed AFTER set up area!
#include "_Window_Rresize.cms" // GOSUB(window_resize)
#include "_system_info.cms"  // GOSUB(time_passed ++ #suminfo)
#include "_Captcha.cms"  // GOSUB(check_captcha)
#include "_Check_Bag.cms"   // GOSUB(check_bag)
#include "_drop_chest.cms" // GOSUB(drop_to_chest)
//--------------------------------------

mainbody:
   GOSUB(go_gather)
gathernow:
   GOSUB(gather_this)
   GOSUB(go_chest)
   GOSUB(drop_to_chest)
goto(mainbody)

//halt // for single run

//------SUB going to gathering place-----------
SUB (go_gather)
   HINTPOPUP("Wait while RUNNING!", "RUNNING!")
   print("goin to gather")
===blah blah blah ===
END_SUB

//------SUB going to chest---------------
SUB (go_chest)
   HINTPOPUP("Wait while RUNNING!", "RUNNING!")
   print("goin to chest")
===blah blah blah ===
END_SUB

GOSUB(drop_to_chest)

//------SUB wait for gathering---------------
SUB (gather_this)
   GOSUB(time_passed)
   GETSCREEN
===blah blah blah===
   wait(1)
END_SUB

//--------------------------------
[/spoiler]

Итак, вначале я задаю необходимые переменные (постоянные и редактируемые), потом инклуды (которые могут использовать эти переменные), а в некоторых инклудах уже заданы переменные или даже вызов подпрограмм (потому размещение их в начале вполне логично), но потом идёт "основное тело" выполнения (зацикленное), в котором идут ссылки на продпрограммы в конце скрипта!
В чём прок? Ситуация в игре может часто изменяться или я сам дорабатываю код, улучаю и оптимизирую, потому нужен постоянный доступ к переменным и порядку выполнения скрипта (что бы не скроллить каждый раз в самую "Ж.." файла. 

Это была одна из основных фишек 4.7, когда вбивался в память весь текст скрипта, но теперь прийдётся переносить всё "главное" в самый низ и постоянно скроллить для редактирования :(
Хотя, с другой стороны, еще не известно какие идеи по оптимизации придут в голову после введения параметров в подпрограммах, возможно оно и к лучшему, но пока сижу на 4.7 (т.к. инклуды уже сократили размер скриптов раз в 5  8) )
« Last Edit: February 17, 2014, 11:35:15 AM by NEf »
Извини, я хотел.