Данная функция отслеживает время от начала атаки до начала вылета снаряда. Принимает 2 значения, базовую анимацию - повреждений и текущую скорость атаки. Можно использовать для собственных системок урона и не только... Одна из ее полезностей в карте "черновике" где можно отловить промахи по цели и нанесеный урон "рукой" (юнитам у которых нет снарядов)
Код
scope ANIMATIONSPEED initializer Registry
globals real array number [80] endglobals
function AniSpeed takes integer AtSpeed,real AnSpeed returns real local integer l = 0 local real data = AnSpeed local real temp = AnSpeed local real exit = AnSpeed
if AtSpeed > 400 then set AtSpeed = 400 elseif AtSpeed < -80 then set AtSpeed = -80 endif
if AtSpeed != 0 then
if AtSpeed < 0 then
set l = AtSpeed - AtSpeed * 2 set temp = temp * number[l]
else
loop set l = l + 1
set temp = data - temp * (0.01 * l) if exit > temp then set exit = temp else set temp = exit endif
То же относится и к тексту темы в тегах кода, ну, кроме части о комментариях. Но не буду оффтопить своим чувством прекрасного. Говоря по делу: Зачем это может быть нужно на практике? Зачем указывать размерность массива глобальной переменной? В жассе размерность в принципе указать невозможно.
Ну к примеру: "Тиренд" может стрелять несколькими "Огненными стрелами"
Только если вся система атаки будет выполнена триггерно, что подарит необходимость в огромной базе данных способностей и базового урона юнитов. Или же создавать даммиков, что выстрелят одновременно с Тиренд, но в таком случае возникнут проблемы с расчетом урона, если дополнительный снаряд долетит до цели раньше чем основной.
ЦитатаBibo ()
Помню раньше нельзя было....
Независимо от того, указываешь ты размерность массива или нет, тебе в любом случае будут доступны все ~8 тысяч ячеек. Размер указанный после объявления переменной, парсер просто напросто закомментирует.
Однако, все таки есть случай, когда размер массива нужно указывать, а именно, при объявлении атрибута внутри структуры массивом. Так как структуры, это представление параллельных массивов удобным образом, то указывая размер массива внутри структуры, мы просто указываем кол-во зарезервированных ячеек в этих параллельных массивах. Это сокращает кол-во возможных экземпляров структуры, в 2 раза если структура в себе имеет массив размерностью в 2 ячейки, в 3 раза если 3 ячейки, в 4 если 4 и т.д.
Сообщение отредактировал Bibo - Четверг, 12 Марта 2015, 20:49:36
Если указать размерность больше 8192 (213), vJass создаст несколько подряд идущих массивов и две функции - аксессор и мутатор - к ним, что позволяет успешно имитировать очень большие массивы. Функции по индексу определяют нужный массив (бин. поиском) и возвращают/задают его элементы (транслируя индекс, естественно). Примечание: в текущей версии JassHelper есть баг: он создает "длинный" массив, даже если указана размерность строго 8192 (которая влезает и в обычный).
Если указать размерность меньше 8192, это дает возможность оптимизатору слить несколько массивов в один. Очень полезно во многих случаях. Первый пришедший на ум пример: в карте есть десятки MPI-заклинаний, на каждое требуется несколько массивов на 12 элементов. Ну и ложка дегтя, как же без нее. Я бы даже сказал, не ложка, а бочка. Текущая версия JassHelper вообще не умеет сливать массивы. То есть малые размерности попросту игнорируются.
Ну и ложка дегтя, как же без нее. Я бы даже сказал, не ложка, а бочка. Текущая версия JassHelper вообще не умеет сливать массивы. То есть малые размерности попросту игнорируются.
На месте разработчиков JassHelper (не только один Vexorian потеет над ним) я бы сделал так, чтобы слишком малоразмерные массивы (<100) бы интерпретировались как немассивные переменные. Это бы сэкономило память.
Не зли других и сам не злись. Мы - гости в этом мире. И если что не так - смирись, Будь поумнее - улыбнись, Ведь в мире всё закономерно. Зло, излучённое тобой, К тебе вернётся непременно.
Сообщение отредактировал Duosora - Пятница, 13 Марта 2015, 00:38:35
Не пройдет. Во что ты транслируешь set a[i] = 0? Компилятор ведь не всегда может вывести, чему равно i в данном месте.
Да, совсем за это забыл. Но, думаю, эти циклы всё одно можно развернуть в какой-то индусский код с приплетением макросов. Ну а как оно себя тогда будет вести - совсем другой вопрос.)
Не зли других и сам не злись. Мы - гости в этом мире. И если что не так - смирись, Будь поумнее - улыбнись, Ведь в мире всё закономерно. Зло, излучённое тобой, К тебе вернётся непременно.