1
1
7 лет назад
Отредактирован Goreblaze
1

» WarCraft 3 / Осваиваем JASS - исправления и дополнения

Год назад я уже читал эту статью. Её понимание приходит только тогда, когда приходится самому глубоко вникать в то, что на самом деле происходит во время исполнения скрипта на языке Jass.
То есть, когда нужно максимально оптимизировать то, что итак неплохо работало.
Поэтому думаю, что нелестно о ней отзывающиеся не испытывали мучительных сомнений, доходя до подобных выводов самостоятельно. Лично же я слагал структуры русского мата, не понимая, что же лучше использовать взамен устаревших или медленных систем.
Сомнения у меня ещё остались, но некоторые свежие идеи начали обретать более чёткую форму.
В пример одной такой бредовой идеи:
globals
    handle array H
endglobals

...

function NoMoreLongCJ takes nothing returns nothing
	set H[0]=ConvertUnitState(0)
	set H[1]=ConvertUnitState(1)
	set H[2]=ConvertUnitState(2)
	...
endfunction

...

function ManaLeak takes nothing returns nothing
	call SetUnitState(GetTriggerUnit(),H[2],0)
endfunction
Это незначительно сокращает объём кода, который пишется в war3map.j, поэтому я до сих пор сомневаюсь в полезности замены каждой константы.
Как мне известно, замена UNIT_STATE_LIFE на ConvertUnitState(0) исключает обращение к архивам игры, но скорость обращения к переменной в массиве вместо вызова функции конвертации будет не намного выше.
Думаю, что если заменить ConvertUnitState(0) на H[0], то сократится разве что несколько байтиков в файле скрипта (ну, и вызов функции, пусть и нативной - это всё-таки вызов функции). Поэтому и возникают сомнения в необходимости перенесения 100+ строк из Common.j в основной код карты.
А вот статьи, которая подтвердила бы мои догадки я не могу найти уже долгое время.