Current time: 22.11.2024, 07:32 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
ERA II
» WoG Era 2: Русская и Английская версии
Author Message
Berserker Offline
Administrators

Posts: 16657
Post: #4816

Bes, только через тесты проверять, не знаю.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
10.10.2020 03:34
Find all posts by this user Quote this message in a reply
Bes Offline

Posts: 5422
Post: #4817

ну, тут упирается всё в логику срабатывания, ты не помнишь как заводил событие это?
оно туда же ссылается куда и !!HO ?Unsure
10.10.2020 03:36
Visit this user's website Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16657
Post: #4818

Bes, только тестами, Бес. По-другому не скажешь.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
10.10.2020 04:03
Find all posts by this user Quote this message in a reply
Bes Offline

Posts: 5422
Post: #4819

Berserker, можно как-то получить параметры родительного события из тела вызванной ф-ции?


Unsure
12.10.2020 00:06
Visit this user's website Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16657
Post: #4820

Bes, нет. Либо сохраняй в i^^, s^^ глобальных (если нет риска повторной генерации события внутри триггера), либо нужные данные передавай каждой функции сам.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
12.10.2020 00:55
Find all posts by this user Quote this message in a reply
Bes Offline

Posts: 5422
Post: #4821

вопрос по комбинировании !!re и SN:G
Berserker, сразу оговорюсь, в данном примере полностью согласен касаемо опасности goto команд
Но всё же... разрешается (безопасно) ли без проблем со стороны цикла !!re "выпрыгивать" из тела цикла?
Так?
15.10.2020 01:02
Visit this user's website Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16657
Post: #4822

Поведение не определено и не будет определено по причинам эволюции проекта. То есть все баги и потеря обратной совместимости будут на совести скриптописателя. Напиши, что не разрешается использовать !!SN:G для прыжков из структурных блоков и в структурные блоки. И большой красный DEPRECATED.

На следующее обновление Эры:
[*] SN:G is DEPRECATED and may be removed in future versions.

Для прерывания цикла есть !!br. Эмулировать !!SN:G можно так:


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
15.10.2020 01:43
Find all posts by this user Quote this message in a reply
Bes Offline

Posts: 5422
Post: #4823

во-о-т! наконец-то ты сказал то,что следовало сказать - нельзя прыгать в структурные блоки. Вот тут спасибо за замечание, обязательно надо отразить. Что до будущего удаления - ну, это уже дело твоё, хозяин-барин.
Ещё один вопросик .про циклы...
15.10.2020 02:17
Visit this user's website Find all posts by this user Quote this message in a reply
Night Offline

Posts: 462
Post: #4824

Смотрю тут отличные вопросы идут по !!re... У меня тоже появился, не могу понять смысл команды !!co - в справке указано:
Quote:!!co ("continue" – продолжить) с условием (опционально) немедленно переходит к ресиверу цикла !!en, который, в свою очередь, будет выполняться в соответствии с логикой работы.

И хочется сказать - и что? Ну переходит, разве это не логичное продолжение выполнения !!re? Он ведь так и так идёт до !!en... Или при срабатывании !!co не учитывается счётчик кругов? Есть более понятный пример про эту команду?
(This post was last modified: 15.10.2020 02:45 by Night.)
15.10.2020 02:45
Find all posts by this user Quote this message in a reply
XEPOMAHT Offline
Moderators

Posts: 2356
Post: #4825

(15.10.2020 01:43)Berserker Wrote:  [*] SN:G is DEPRECATED and may be removed in future versions.

Кто ж в очередной раз захочет переписывать ERA-скрипты, использующие !!SN:G? 105 Скорее всего опять скриптописатели разделятся на староверов и нововеров (а кто-то например ещё до сих пор сидит на ERA 2.46, а есть кто и под WoG 3.58 что-то мудрит...).

(15.10.2020 02:17)Bes Wrote:  во-о-т! наконец-то ты сказал то,что следовало сказать - нельзя прыгать в структурные блоки.

Теоретически можно, код только будет чуток посложнее (т.е. прыжок будет в подготовительную часть кода, в котором будут прописаны структурные границы, например !!en:; для выхода из !!re, ну и следующий прыжок уже куда нужно). Ну или прыгать прямо на !!en:;, где прописывать условия для мгновенного выхода из цикла.

А мне вот привычны стандартные DO...WHILE. Когда условие для проверки где пишется, там и проверяется. А не наоборот, как в !!re:;, от чего я не хочу использовать !!re:; и предпочитаю !!SN:G.

(15.10.2020 02:45)Night Wrote:  И хочется сказать - и что? Ну переходит, разве это не логичное продолжение выполнения !!re? Он ведь так и так идёт до !!en... Или при срабатывании !!co не учитывается счётчик кругов? Есть более понятный пример про эту команду?

Если скляроз не изменяет, !!co:; просто прыгает в начало цикла и +1 к итерации. Ну а !!br:; - выход из цикла. А нестандартные циклы можно создавать только с помощью !!SN:G и меток
(This post was last modified: 15.10.2020 03:17 by XEPOMAHT.)
15.10.2020 02:58
Find all posts by this user Quote this message in a reply
V_Maiko Offline

Posts: 610
Post: #4826

(15.10.2020 02:58)XEPOMAHT Wrote:  
(15.10.2020 01:43)Berserker Wrote:  [*] SN:G is DEPRECATED and may be removed in future versions.

Кто ж в очередной раз захочет переписывать ERA-скрипты, использующие !!SN:G? 105 Скорее всего опять скриптописатели разделятся на староверов и нововеров (а кто-то например до сих пор сидит на ERA 2.46).

Let's avoid making this same mistake again, please, because of these changes that instead of updating and making it backwards compatible, the code replaced by something new has consequences for the future of the community. Mad Bad
15.10.2020 03:08
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16657
Post: #4827

Bes, конечно, не будет.

Night, !!сo сразу же перешагивает в конец цикла, завершая текущую итерацию. После чего к переменной-счётчику прибавляется значение шага и идёт проверка на продолжение цикла. Аналог !!co:
Quote:Кто ж в очередной раз захочет переписывать ERA-скрипты, использующие !!SN:G?
DEPRECATED означает, что новые скрипты не нужно писать с этой командой. Старые будут работать.

Quote:DO...WHILE
Большинство циклов это WHILE DO, то есть с возможностью 0-я итераций. !!re позволяет писать любые, от FOR i FROM x TO y BY step до LOOP и DO WHILE.
V_Maiko, everything is fine, friend, no need to worry. I follow best practices of product evolutioning. Deprecating features means, that in 3.X Era versions it's not recommended to use some commands in new scripts anymore.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
15.10.2020 04:13
Find all posts by this user Quote this message in a reply
igrik Offline
Administrators

Posts: 2819
Post: #4828

(15.10.2020 02:58)XEPOMAHT Wrote:  ... и предпочитаю !!SN:G.
Если скляроз не изменяет, !!co:; просто прыгает в начало цикла и +1 к итерации. Ну а !!br:; - выход из цикла. А нестандартные циклы можно создавать только с помощью !!SN:G и меток
Ага, и код в !!SN:G превращается в нечитаемую лапшу. XEPOMAHT, я понимаю, что ты привык писать на асме, и поэтому !!SN:G - это твой способ (асм весь в этом), но в высокоуровневом программировании это невероятно плохой тон написания кода. Не надо других (кто не владеет асмом) подписывать на дурные механики.

(15.10.2020 02:45)Night Wrote:  И хочется сказать - и что? Ну переходит, разве это не логичное продолжение выполнения !!re? Он ведь так и так идёт до !!en... Или при срабатывании !!co не учитывается счётчик кругов? Есть более понятный пример про эту команду?
Читайте про цикл for, который есть во всех языках программирования. Это самый простой и понятный цикл из всех возможных. Это базовые основы. Их важно знать!
Сам по себе цикл for простой до безобразия.

Цикл в C++, JavaScript
for (переменная; начало; условие; шаг) {
    // ... тело цикла ...
   ; continue - начать новую итерацию (без продолжения нижеидущего кода)
   ; break - завершить цикл полностью (выход из цикла)
}

Цикл в ERM
!!re переменная/начало/условие/шаг;
    // ... тело цикла ...
    !!co:; начать новую итерацию (без продолжения нижеидущего кода)
    !!br:; завершить цикл полностью (выход из цикла)
!!en:;

Пример:
Что тут сложного?
15.10.2020 11:22
Visit this user's website Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16657
Post: #4829

Напомню, что очень часто нужна итерация от 0 от Кол-Во чего-то -1, поскольку массивы индексируются с нуля. Или даже -2, если нужно исключить последний элемент из обработки. В таких случаях используем синтаксис из Эры 3.0.4:

Code:
[+] Introduced extended !!re syntax: !!re counter/start/stop/step/stop_modifier, where stop_modifier is any integer value,
    that will be added to stop value. New syntax allows to express such loops as FROM 0 to SOME_VAR - 1, for instance.

    Example:
    !!re i/0/(numStacks)/1/-1:;
      ...
    !!en:;

!!re переменная/начальное значение/конечное значение/шаг/что прибавить к конечному значению
Читается данный код как FOR i FROM 0 TO arraySize - 1 DO.
То есть выполнять от 0 до (размер массива - 1, то есть индекса последнего элемента).


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
15.10.2020 14:08
Find all posts by this user Quote this message in a reply
XEPOMAHT Offline
Moderators

Posts: 2356
Post: #4830

(15.10.2020 04:13)Berserker Wrote:  новые скрипты не нужно писать с этой командой. Старые будут работать.

Тогда не надо писать "removed in future versions", если предполагается всё же сохранить совместимость со старыми скриптами. Не пугайте народ.

(15.10.2020 11:22)igrik Wrote:  Ага, и код в !!SN:G превращается в нечитаемую лапшу.

Для меня в любом виде ERM - такая же слабочитаемая лапша, как и чистый ассемблер, если в коде напрочь отсутствуют комментарии или они на английском языке. Как впрочем и Си мне прочитать сложно в виду того, что не программист я, а только кодер.

Если использование !!SN:G откомментировано, то и читается и по прошествии 5 лет с момента написания кода нормально и понятно, по крайней мере для приверженца низкоуровнего программирования.

(15.10.2020 11:22)igrik Wrote:  Не надо других (кто не владеет асмом) подписывать на дурные механики.

Считаю, что если человек хочет программировать на высоком уровне, то он и должен конкретно изучать высокоуровневое программирование. Если хочет делать скрипты по принципам низкоуровнего языка - то использовать !!SN:G с умом. А если хочет делать "как получится" и "так сойдёт", как обычно получается у большинства скрипёров, то тут уже работает человеческий фактор: что-то проще сделать на !!re:;, ну а что-то и на !!SN:G, если !!re:; покажется слишком сложным или неудобным. Или наоборот.

Нельзя же всех скриптёров равнять на профессиональных программистов. Можно только рекомендовать не использовать в коде неудобные для программистов конструкции.
15.10.2020 14:12
Find all posts by this user Quote this message in a reply
« Next Oldest | Next Newest »
Post Reply 


Forum Jump:

Powered by MyBB Copyright © 2002-2024 MyBB Group