я понял, о чем ты, я говорю, что жасс не подгадаешь - в кишках простейших действий тысячи прыжков и обращений к самым разным областям памяти, т.к. байт-код исполняется еще и в "виртуалке". нет смысла играть в компилятор, достаточно делать те оптимизации, которые не противоречат общей логике.
бранчера в виртуалке жасса нет, а количество внутренних проверок рабочих объектов на каждом этапе так велико, что надеяться на "прогрев" нативок бессмысленно. Если используется больше одного раза - вбивай в локалку, если один раз - оставляй вызовом функции.
хммм, дай подумать, наверное дело в том, что у тебя не должно быть иконки в позиции с отрицательным индексом? UB во всей красе
И давно уже сказано, что buttonpos=-2147483648,-2147483648 надо использовать, а не это ваше всё
и что же ты делал, чтобы трижды крашнуть 1.26?
не перестаю хвалить именно такой подход близзов, где в игре, созданной с парой сотен различных скиллов и апгрейдов, огромными листами механик, встроенным ИИ, по пальцам пересчитать краши. Причем они появляются не из-за того, что код кривой, а из-за Undefined Behavior, как с ANeg, который не предполагали вообще увидеть на обычном юните вместо героя.
Вспомнил ту же доту2, которую кроили изначально под известный список абилок, зная наперед всё, что понадобится, и всё равно часто попадали впросак.
Проблема в том, что "рынок" и без того пуст (мертв), так что даже "что-то", что не учит в очередной раз двигать гуишные менюшки, уже неплохо.
самое главное в jass - английский язык. как и в любом языке, кроме 1С.
сохраняют в таблицу для использования потом. а как использовать агент? он в двух с половиной функций разрешен в аргументах. поэтому и сохранять его смысла нет
по скорости всё одинаково, игре похер че вы сохраняете, это всегда 32-битное число
Гуванч, дикий костыль который заставит отказатся от орбов, критов и башей в дальнеам бою, иначе работать небудет. Если при получении урона у юнита появился бафф яда - следовательно юнита ударили физ атакой, но кол-во полученного урона таким способом не получить, ибо сперва проходит основная атака, потом 0.00 урона от абилки яда и появляется бафф яда.
нет, орб накладывает эффект до нанесения урона собой, всё нормально там
function AdjustCooldownModel takes integer h, real maxCD returns nothing
if h>0 then
call WMem(h+0xB4, mI2R(maxCD))
endif
endfunction
call AdjustCooldownModel(GetUnitAbility(u,'Abil'),10)//set total cooldown value to 10
в файлах есть файл со стандартными данными всех объектов
когда патч выходит, соответственно данные меняются
в карте могут быть файлы с нестандартными данными
пользовательские файлы имеют высший приоритет, так что если вставлял кастомные настройки - кастомные и останутся
зависит от твоих нужд
например, мне нужно хранить последние 5 секунд позиций нескольких юнитов, т.е. разбитые на участки по 0.25 секунд снимки хп/мп/координат каждого из них
это 5*4 = 20 значений каждого, итого 80
когда мы доходим до секунды 5.25, то надо сдвигать все предыдущие на единичку назад, и вставлять текущие данные на последний слот
это 79*4 операций чтения и 80*4 записей (считаю грубо, всё для примера)
когда это делается в хештбалице, нагрузка значительно выше выходит, чем если делать на массивах (хт перебирает ключи как ассоциативный массив, а обычный массив просто обращается к памяти с указанным адресом, в разы быстрее).
Но чтобы делать эту процедуру на массивах, тебе нужен индексатор этих самых юнитов, чтобы их уникальный ключ не превышал лимит массива. Это дополнительный код, который тебе нужно реализовать с нуля. Но после реализации система становится быстрее.
Была она до этого медленной? да. Влияло ли это на игру? Нет, это 100-200 микросекунд.
Опять же, когда у тебя есть пре-процессор типа vJASS + сниппеты типа Table , которые имитируют массив самостоятельно, они снимают с тебя часть обязанностей. Но из-за того, что они созданы для ОБЩЕГО случая, они все равно не дадут того выигрыша в скорости, который можешь ожидать.
Используй то, что тебе удобнее, и оптимизируй только когда это реально влияет на игру. habr.com/ru/post/550926
И не забывай, что дота стала популярной еще во времена, когда была написана почти целиком на ГУИ и нихера в ней не пахло даже оптимизацией.
ты пишешь "не влияет", я говорю "влияет, но не в таких масштабах, чтобы паниковать, но и закрыть на это глаза непросто". байт-коду всё равно, а вот постоянно прыгать между функциями, особенно с аргументами, виртуальной машине сложнее, чем просто ехать по нативкам.
жасс - жестко ограниченный скриптовый язык, в нем потолок довольно четкий, единственное, где можно прогрессировать, это в оптимизациях, типа вместо ==false использовать not, вместо groupEnumUnitsInRange(filter) использовать null-фильтр и перебирать в цикле, етк
мемхак - это не про изучение, это про доступ к новому API , когда он нужен. изучать конкретно там нечего. Ну, некоторые функции у меня "написаны" на ассемблере, чтобы максимально быстро выполняться, но это уже извращения для конкретных целей.
Ред. DracoL1ch
» WarCraft 3 / Что меньше влияет на память?
Ред. DracoL1ch
» WarCraft 3 / Что меньше влияет на память?
» WarCraft 3 / Начала внезапно вылетать карта. (редактор 1.26а)
» WarCraft 3 / Начала внезапно вылетать карта. (редактор 1.26а)
» WarCraft 3 / Вопросы по мемхаку
» WarCraft 3 / Warcraft 3 Reforged Взломан!
И давно уже сказано, что buttonpos=-2147483648,-2147483648 надо использовать, а не это ваше всё
» WarCraft 3 / Warcraft 3 Reforged Взломан!
не перестаю хвалить именно такой подход близзов, где в игре, созданной с парой сотен различных скиллов и апгрейдов, огромными листами механик, встроенным ИИ, по пальцам пересчитать краши. Причем они появляются не из-за того, что код кривой, а из-за Undefined Behavior, как с ANeg, который не предполагали вообще увидеть на обычном юните вместо героя.
Вспомнил ту же доту2, которую кроили изначально под известный список абилок, зная наперед всё, что понадобится, и всё равно часто попадали впросак.
» WarCraft 3 / Вопросы по мемхаку
» WarCraft 3 / Вопросы по мемхаку
Ред. DracoL1ch
» WarCraft 3 / Обучение jass
самое главное в jass - английский язык. как и в любом языке, кроме 1С.
» WarCraft 3 / LoadAgentHandle или LoadUnitHandle?
по скорости всё одинаково, игре похер че вы сохраняете, это всегда 32-битное число
» WarCraft 3 / Совет по оптимизации скрипта
» WarCraft 3 / Триггерный урон на ровне с атакой
» WarCraft 3 / Триггерный урон на ровне с атакой
» WarCraft 3 / Почему. Просто почему.
» WarCraft 3 / Как установить текущий кд аблики?
» WarCraft 3 / Reforged – Как работает обновление баланса?
» WarCraft 3 / Reforged – Как работает обновление баланса?
когда патч выходит, соответственно данные меняются
в карте могут быть файлы с нестандартными данными
пользовательские файлы имеют высший приоритет, так что если вставлял кастомные настройки - кастомные и останутся
» WarCraft 3 / Алгоритм построения юнитов
Ред. DracoL1ch
» WarCraft 3 / Что лучше таймер или триггер?
например, мне нужно хранить последние 5 секунд позиций нескольких юнитов, т.е. разбитые на участки по 0.25 секунд снимки хп/мп/координат каждого из них
это 5*4 = 20 значений каждого, итого 80
когда мы доходим до секунды 5.25, то надо сдвигать все предыдущие на единичку назад, и вставлять текущие данные на последний слот
это 79*4 операций чтения и 80*4 записей (считаю грубо, всё для примера)
когда это делается в хештбалице, нагрузка значительно выше выходит, чем если делать на массивах (хт перебирает ключи как ассоциативный массив, а обычный массив просто обращается к памяти с указанным адресом, в разы быстрее).
Но чтобы делать эту процедуру на массивах, тебе нужен индексатор этих самых юнитов, чтобы их уникальный ключ не превышал лимит массива. Это дополнительный код, который тебе нужно реализовать с нуля. Но после реализации система становится быстрее.
Была она до этого медленной? да. Влияло ли это на игру? Нет, это 100-200 микросекунд.
Опять же, когда у тебя есть пре-процессор типа vJASS + сниппеты типа Table , которые имитируют массив самостоятельно, они снимают с тебя часть обязанностей. Но из-за того, что они созданы для ОБЩЕГО случая, они все равно не дадут того выигрыша в скорости, который можешь ожидать.
» WarCraft 3 / Что лучше таймер или триггер?
» WarCraft 3 / Как прикрепить способность к дереву(декорации)?
любой widget сойдет, не только юнит
» WarCraft 3 / Self Improve
» WarCraft 3 / Self Improve
» WarCraft 3 / Self Improve
мемхак - это не про изучение, это про доступ к новому API , когда он нужен. изучать конкретно там нечего. Ну, некоторые функции у меня "написаны" на ассемблере, чтобы максимально быстро выполняться, но это уже извращения для конкретных целей.