Автор Тема: Страсти по #include  (Прочитано 4740 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3685
  • Котэ
    • Просмотр профиля
Страсти по #include
« : Февраль 13, 2014, 01:41:36 pm »
Ошибка Автозапуска скрипта
#autorun Не работает если в скрипте присутствуют #include

« Последнее редактирование: Февраль 17, 2014, 09:19:17 am от Johnny »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3817
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • Просмотр профиля
Re: Ошибка Автозапуска
« Ответ #1 : Февраль 13, 2014, 02:57:00 pm »
Ну тогда до кучи:
SUB() Не работает если он внутри #include


ЦИТРИН

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

Vint

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


Johnny

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

Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3817
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • Просмотр профиля
Re: Ошибка Автозапуска
« Ответ #5 : Февраль 15, 2014, 12:39:38 pm »
Выжидал.
Я думал ты знаешь. Написал просто, чтоб не забыли.


NEf

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

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

Johnny

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

Vint

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


Johnny

  • Создатель
  • Герой форума
  • *
  • Сообщений: 593
    • Просмотр профиля
Re: Страсти по #include
« Ответ #9 : Февраль 17, 2014, 09:17:10 am »
А ограничение на расположение подпрограмм раньше вызова принципиальное?
настолько, что оно по другому не заработает в данной версии парсера. не то что бы оно было сделано искусственно. просто пошел по наиболее простому пути реализации

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


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

Код: Clickermann
  1. // ----- header -----
  2.  
  3. sub(print_one)
  4.  print("one!")
  5. end_sub
  6.  
  7. sub(print_two)
  8.  print("two!")
  9. end_sub
  10.  
  11. sub(roll)
  12.  $roll_res = rnd(1,2)
  13. end_sub
  14.  
  15. //----- body -----
  16.  
  17. roll()
  18.  
  19. if($roll_res = 1)
  20.  print_one()
  21. else  
  22.  print_two()
  23. end_if
  24.  
  25. halt


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

Код: Clickermann
  1. #include "roll_subs.cms"
  2.  
  3. //----- body -----
  4.  
  5. roll()
  6.  
  7. if($roll_res = 1)
  8.  print_one()
  9. else  
  10.  print_two()
  11. end_if
  12.  
  13. halt

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

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

Vint

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

???   :o   :-\   :-[   :'(   ???   :o   :-\   :-[   :'(   ???   :o   :-\   :-[   :'(   ???   :o   :-\   :-[   :'(   ???   :o   :-\   :-[   :'(   ???   :o   :-\   :-[   :'(   ???   :o   :-\   :-[   :'(   ???   :o   :-\   :-[   :'(   
« Последнее редактирование: Февраль 17, 2014, 10:02:21 am от Vint »


NEf

  • Зашел в гости
  • *
  • Сообщений: 6
    • Просмотр профиля
Re: Страсти по #include
« Ответ #11 : Февраль 17, 2014, 11:31:48 am »
Дело не в пихании их в средину, а наоборот оптимизации читаемости и юзабельности.. мы, юзеры, ведь не для парсера пишем код, а выполняемое и редактируемое "рабочее тело".
Конечно, не скажу за всех, но основная часть ведь пишет код под игрушки :) а в играх что главное? мобильность и быстрая адаптация под ситуацию.


[spoiler=Вот пример:]
Код: Clickermann
  1. //--------------------------------
  2. #name "sand@Reval_v3.0"
  3. LOGCLEAR
  4. print("INITIALIZING...")
  5. print("===SCRIPT===")
  6. print("=looting Sand at Reval=")
  7. print("..v3.0")
  8. wait(1)
  9.  
  10. // === SET this area up! ===
  11. $petslots = 8  // !!! needed by #bag_check
  12. $boots = 1     // 1 if you have agility boots
  13.  
  14. // === unsetting area ===
  15. $runcount = 0      //counts how meny runs done
  16. $starttime = $_time_t //starting time
  17. $grabslots = 40 - 1 - $boots + $petslots - 1 //free bag slots
  18.  
  19. //--- LIBS INCLUDES - must printed AFTER set up area!
  20. #include "_Window_Rresize.cms" // GOSUB(window_resize)
  21. #include "_system_info.cms"  // GOSUB(time_passed ++ #suminfo)
  22. #include "_Captcha.cms"  // GOSUB(check_captcha)
  23. #include "_Check_Bag.cms"   // GOSUB(check_bag)
  24. #include "_drop_chest.cms" // GOSUB(drop_to_chest)
  25. //--------------------------------------
  26.  
  27. mainbody:
  28.   GOSUB(go_gather)
  29. gathernow:
  30.   GOSUB(gather_this)
  31.   GOSUB(go_chest)
  32.   GOSUB(drop_to_chest)
  33. goto(mainbody)
  34.  
  35. //halt // for single run
  36.  
  37. //------SUB going to gathering place-----------
  38. SUB (go_gather)
  39.   HINTPOPUP("Wait while RUNNING!", "RUNNING!")
  40.   print("goin to gather")
  41. ===blah blah blah ===
  42. END_SUB
  43.  
  44. //------SUB going to chest---------------
  45. SUB (go_chest)
  46.   HINTPOPUP("Wait while RUNNING!", "RUNNING!")
  47.   print("goin to chest")
  48. ===blah blah blah ===
  49. END_SUB
  50.  
  51. GOSUB(drop_to_chest)
  52.  
  53. //------SUB wait for gathering---------------
  54. SUB (gather_this)
  55.   GOSUB(time_passed)
  56.   GETSCREEN
  57. ===blah blah blah===
  58.   wait(1)
  59. END_SUB
  60.  
  61. //--------------------------------
  62.  
[/spoiler]

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

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