Berserker
Posts: 16657
|
|
04.09.2020 02:24 |
|
Algor
Posts: 3881
|
3.0.4:
Синтакис освобождения, типа !#VA(-myArts); вызывает ошибку:
1000 era - consts.erm:
!#DC(PRIM_SKILL_FIRST) = 0;
!#DC(SKILL_ATTACK) = 0;
!#DC(SKILL_DEFENSE) = 0;
!#DC(SKILL_POWER) = 0;
!#DC(SKILL_KNOWLEDGE) = 0;
!#DC(PRIM_SKILL_LAST) = 3;
1000 era - stdlib.erm:
Не мешало бы добавить (week), (month) и переименовать (isAi) в (isAI)
Точно проверить не могу (см п.1), но сильно подозреваю, что в общем случае пример из changelog'а не корректен, т.к номера могут выделяться не последовательно:
|
|
05.09.2020 22:32 |
|
Berserker
Posts: 16657
|
Algor, спасибо, исправляю.
Я в именовании придерживаюсь соглашения о только первой заглавной в аббревиатурах. То есть ToHtml вместо ToHTML и GetId вместо GetID. Поскольку много капса сложно печатать.
Quote:Не мешало бы добавить (week), (month)
И monthWeek (0..3). Тут будет удобнее набор глобальных переменных. Их и проверять проще прямо в условии триггера.
Предлагаю:
i^timerDay^ 1..+inf
i^timerWeekDay^ 1..7
i^timerMonthDay^ 1..28
i^timerWeek^ 1..+inf
i^timerMonthWeek^ 1..4
i^timerMonth^ 1..+inf
i^timerOnce^ 0..1
i^timerOwner^ 0..7
i^timerIsAi^ 0..1
i^timerIsHuman^ 0..1
Quote:Точно проверить не могу (см п.1), но сильно подозреваю, что в общем случае пример из changelog'а не корректен, т.к номера могут выделяться не последовательно:
Я зарелизю мод сегодня, посмотришь. Индексы для массивов всегда последовательные.
Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
|
|
05.09.2020 22:52 |
|
Algor
Posts: 3881
|
(05.09.2020 22:52)Berserker Wrote: Я зарелизю мод сегодня, посмотришь. Индексы для массивов всегда последовательные.
Да, ругается, что не может выделить, если нет нужного последовательного куска. С одной стороны это хорошо, можно использовать такое свойство непрерывности. С другой - могут появиться проблемы с фрагментацией.
Нужно ли что-то менять? Наверное, нет. Просто учитывать, что большой массив из локальных переменных не всегда можно выкусить и использовать временные SN:M-слоты с последующим освобождением.
|
|
06.09.2020 01:57 |
|
Algor
Posts: 3881
|
(06.09.2020 02:04)Berserker Wrote: Algor, для этих целей в SN:M добавилось значение 4-го параметра в виде (SN_M_TRIGGER_LOCAL).
Угу, видел в описании. Удобно.
(06.09.2020 02:04)Berserker Wrote: По фрагментации всё верно. Можно через !#VA в начале функции объявить массивы, которые потом освобождать.
Если в своей функции, то зачем освобождать, если при выходе они и так обнулятся?
А если в общем триггере, это не поможет, т.к. хрен знает сколько таких переменных уже занято и не освобождено сторонними скриптами. Или я что-то не так понимаю? На примере сферического кода в вакууме:
UPD: туплю (сонный уже), написал код, а запустить и посмотреть не судьба.
Будет 1.
Но вопрос не в том, а в том, что объявление (myVar:y) затерло фактически использовавшуюся y1, т.е.
С этим могут быть проблемы. Наверное. Подумаю на свежую голову.
|
|
06.09.2020 02:14 |
|
daemon_n
Posts: 4343
|
|
06.09.2020 02:17 |
|
Berserker
Posts: 16657
|
|
06.09.2020 02:22 |
|
Algor
Posts: 3881
|
(06.09.2020 02:22)Berserker Wrote: Собственно, всё верно. Каждый обработчик будет насиловать y1..y100 по-своему.
Т.е., фактически, можно вообще никогда не использовать синтаксис освобождения, кроме отдельных способов особо циничного извращения (это я про попытки использования многих больших временных массивов без SN:M)
daemon_n, взаимно, но я пока еще не надолго.
|
|
06.09.2020 02:30 |
|
Bes
Posts: 5422
|
(06.09.2020 02:14)Algor Wrote: Но вопрос не в том, а в том, что объявление (myVar:y) затерло фактически использовавшуюся y1, т.е.
С этим могут быть проблемы. Наверное. Подумаю на свежую голову.
Berserker, а вот да, вопрос почему !!VR(myVar:y):S1; возьмёт y1, а не y2. ERM2 разве не смотрит, есть ли в использовании y1 до присвоения ей метки myVar ???
|
|
06.09.2020 02:34 |
|
Algor
Posts: 3881
|
(06.09.2020 02:41)Berserker Wrote: Algor, да, но вдруг тебе сперва нужен массив на 50 ячеек, потом высчитать среднее по ним, потом сгенерировать другие 50 чисел на основе среднего + рандома. Вот тут и придётся
Это как раз тот случай, который я выше описал как "особо циничное извращение".
(06.09.2020 02:41)Berserker Wrote: Bes, локальные переменные локальны для одного триггера до следующего триггера в тексте. Реальный код точно также переиспользует y1.
Берс, даже внутри одного триггера:
Т.е. использовать смешанный стиль вообще раскованно и, по-хорошему, недопустимо.
Это НЕ плохо.
Если взялся за оружие написал ZVSE 2, будь готов получить пулю добр использовать только новые правила. Главное, чтобы при этом не возникало коллизий с используемым в сборке старым кодом. Навскидку, да, не должно. На практике - посмотрим.
|
|
06.09.2020 12:18 |
|
Berserker
Posts: 16657
|
|
06.09.2020 16:11 |
|