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

Если у тебя есть необходимость в сотни пакетов, ты что-то явно делаешь не так.
Либо это будет вызывать ошибки, по типу всяких бесконечных компиляций и т.д.
Нет. Но если такая ошибка возникнет, это баг компилятора (если не твоя ошибка), о котором надо сообщить разработчику.
Ты можешь только упереться в ОП лимит, поскольку выполнение блоков init каждого пакета выполняется в пределах одной функции вызовом TriggerEvaluate. В остальном без ограничений.
`
ОЖИДАНИЕ РЕКЛАМЫ...
15
Если у тебя есть необходимость в сотни пакетов, ты что-то явно делаешь не так.
Либо это будет вызывать ошибки, по типу всяких бесконечных компиляций и т.д.
Нет. Но если такая ошибка возникнет, это баг компилятора (если не твоя ошибка), о котором надо сообщить разработчику.
Ты можешь только упереться в ОП лимит, поскольку выполнение блоков init каждого пакета выполняется в пределах одной функции вызовом TriggerEvaluate. В остальном без ограничений.
Принятый ответ
17
GetLocalPlayer, Ну, про сотню-другую я конечно загнул, но системки раскидать было бы неплохо.
Хотябы те, что я уже допилил и протестил.
GetLocalPlayer, Ещё вопрос
Возможно ли в compiletime запихнуть функцию, что будет автоматически id абилкам давать?
т.е. во время компиляции генерировать id абилок, с A000 и выше, все абилки в переменные, а через переменные сделать триггеры и т.д.?
Если же вурст на такое способен
15
Если же вурст на такое способен
Да, конечно. Если нужна просто одна константа, то можно так
Код
import ObjectIdGenerator
import MagicFunctions

constant MY_HERO_ID = compiletime(HERO_ID_GEN.next())
// Или с массивами
constant MY_ABILITY_ID = [compiletime(ABIL_ID_GEN.next()), compiletime(ABIL_ID_GEN.next()), compiletime(ABIL_ID_GEN.next()), compiletime(ABIL_ID_GEN.next()), compiletime(ABIL_ID_GEN.next())]
Или можно разделить
Код
import ObjectIdGenerator
import MagicFunctions

int array myAbilities

// Выполнится во время компиляции
@compiletime function initArray()
    for i=0 to 9
        myAbilities[i] = HERO_ID_GEN.next()

// Вызовем ту же фкнкцию во время инициализации, генерируя те же данные
init
    initArray()
Посмотри выражения времени компиляции, есть пример кода. А там уже как самому удобнее будет придумаешь.
15
Один только момент о котором все таки стоит упомянуть, который может вызвать ряд очевидных ошибок. Вот у тебя есть например такой код
Код
import NoWurst
import MagicFunctions
import ObjectIdGenerator

constant MY_ABILITY = compiletime(ABIL_ID_GEN.next())

int array otherAbilities 

@compiletime
function initArray()
    for i = 0 to 9
        otherAbilities[i] = ABIL_ID_GEN.next()

init
    initArray()
Затем ты проверяешь и видишь, что во время компиляции у тебя в массиве otherAbilities находится следующий список значений
Список
1095577650
1095577651
1095577652
1095577653
1095577654
1095577655
1095577656
1095577657
1095577697
1095577698
а во время выполнения карты, другой список значений
Скриншот
В итоге, система не работает. Вопрос, почему?
Из-за константы MY_ABILITY. Как сказано в статье, выражение
compiletime(ABIL_ID_GEN.next())
будет заменено компилятором результатом его работы, то есть во время загрузки карты, вызова метода ABIL_ID_GEN.next уже не будет по месту константы, там будет сгенерированное значение. То есть метод ABIL_ID_GEN.next вызывается меньшее количество раз во время загрузки карты, чем во время ее компиляции, отсюда несоответствие генерируемых значений. Решить эту проблему можно добавлением в функцию initArray кода
Код
@compiletime
function initArray()
    if not compiletime
        ABIL_ID_GEN.next() // Дополнительный вызов в счет константы MY_ABILITY
    for i = 0 to 9
        otherAbilities[i] = ABIL_ID_GEN.next()

init
    initArray()
Так что если ты генерируешь идентичные значения и во время компиляции и во время выполнения (что в целом нежелательно, так как это делает код очень неструктурированным) держи этот момент в голове.
Загруженные файлы
Чтобы оставить комментарий, пожалуйста, войдите на сайт.