Bergi_Bear, говорят, у эффектов есть недостаток в отсутствии интерполяции для них, лично я не заметил большой разницы когда сравнивал, но говорят что на юнитах снаряды плавнее движутся чем на эффектах. Так что, возможно есть смысл по прежнему делать на юнитах отдельные снаряды, особенно если они движутся быстро.
H, код покажу позже, за другой машиной сейчас. Юзкейс для которого полезна замена Tick функции в рантайме - снаряд который меняет свое поведение в полете, например сперва снаряд движется по окружности привязаной к юниту и ищет цель в радиусе от себя, а после обнаружения цели летит к ней по параболе игнорируя столкновения. Ну и не люблю я плодить таймеры на каждый снаряд, поэтому у меня они все на одном таймере.
H, константы знает, айдишникам юнитов не учил ибо нафиг не нужно, может в каком-то из инструментов умеет и айдишники из коробки - это не вопрос IDE, это вопрос фреймворка который надстроен над возможностями вара. Вызов функций связанных с юнитами через переменные юнитов видел в одном из инструментов, себе не ставил т.к. собираюсь свою такую обертку делать над юнитами.
Вейт на скрытом таймере с самоуничтожением - можно реализовать, чуть с другим синтаксисом, но можно, готовой такой функции нет. естественно, но пишется за пять минут один раз и потом используется.
Зато у меня в Lua есть ассоциативные и обычные массивы, работающие очень быстро и без ограничений на размер массива и возможность завернуть или заменить любую "нативку" своей функцией, а также хранение функций в переменных, передача функций и массивов в параметры и все это без синтаксического сахара, прямо на уровне языка.
Есть яркий пример - система движения снарядов, которую я недавно делал и которую еще допиливать и допиливать. У меня таймер перебирает все снаряды в системе и для каждого вызывает его индивидуальную функцию движения. Функция вызывается напрямую, с передачей параметров и без скрытого за синтаксическим сахаром триггера. Причем я в любой момент в рантайме могу поменять эту функцию на другую, взятую где угодно, при желании даже из чата или прелоада могу получить код функции. Пока эта система рассчитана на снаряды на основе эффектов, но научить её работать с юнитами это вопрос пары лишних строк кода.
А Док вон вобще полностью код карты перезагружает без перезапуска вара и рестарта карты. Банально за счет прелоада и превращения текста в код в рантайме.
H, о, так значит я живу в будущем? Черт, боюсь за мной уже выехали. Да, полного дефайна ВСЕГО вплоть до террейна я пока не видел, только юнитов и абилки и то не стал ставить потому как мне это не нужно, а вот полноценной работой с Lua на уровне языкового сервера плюс запуском карты из IDE я пользуюсь уже сейчас и это даже не самый топовый инструментарий из существующих, а просто две фиговины которые я прикинул что проще будет курочить как руки дойдут.
Насколько я знаю - это передача в ИИ скрипт кастомных данных и обработка этой команды должна быть сперва реализована в самом ИИ скрипте чтобы что-то происходило в ответ на эту команду.
ScopteRectuS, я сам так начинал. Потом надоело и я починил jasshelper на PTR и научил его работать с Lua. А потом вышел релиз и жассхелпер убрали из луа режима полностью и я пересел на плагин warcraft-vscode. Теперь у меня запуск карты на тестирование выглядит так - в vscode F1 и выбор кнопки "запустить варкрафт". Надоест нажимать две кнопки - подправлю плагин и назначу на это какой-то хоткей.
ScopteRectuS, лучше не выделываться и поставить vscode и плагины к нему - заодно и подсветка синтаксиса Lua будет и все удобства нормальной среды разработки. Запуск тестирования карты чуть менее удобен оттуда, чем просто нажать кнопку в WE, но это стоит тех плюсов которые дает внешний редактор кода.
ScopteRectuS, я пользуюсь vscode для работы с кодом и плагином warcraft-vscode для сборки и запуска тестирования карты. Он берет код карты и код из всех внешних файлов в определенном месте и собирает это все в одну кучу на основе заданых шаблонов. Если убрать все лишнее из шаблонов, то получается что наш код помещается в код карты после оригинального кода и за счет этого я просто делаю вот так
local alpha_main = main
function main()
alpha_main()
Locales:Init()
Libraries:Init()
end
Но есть и другие инструменты, в том числе такие которые копируют синтаксис инжекта в мейн из жассхелпера.
NazarPunk, да в принципе ничем, кроме того факта что инициализация через функцию дает чуть больше потенциальных возможностей - например позволяет иметь две версии одной библиотеки и выбирать нужную и двух по какому-то критерию и уже её записывать в глобальную переменную с именем библиотеки.
ScopteRectuS, в вашем варианте нельзя, в моем можно.
Если с анонимной функцией непонятно, можно переписать так
local function InitMath()
local math = {}
math.pi = 3.14 --паблик
local secretvar = 42 --приват
function math.abs( a )
if a >= 0 then
return a
else
return -a
end
end
return math
end
math = InitMath()
ScopteRectuS, сойдет.
Еще можно как-то так - завернуть в вызов анонимной функции:
math = function()
local math = {}
math.pi = 3.14
local secretvar = 42
function math.abs( a )
if a >= 0 then
return a
else
return -a
end
end
return math
end ()
Это позволит использовать локальные переменные уровня библиотеки, недоступные внешнему миру
8gabriel8, я имел в виду стандартное действие которое всем сразу выдает стартовых юнитов, а не отдельному игроку. Которое не спрашивает куда создавать, а само перебирает стартовые точки.
А работает ли оно исправно со стандартными стартовыми юнитами из стандартного триггера инициализации карты? Если нет - что-то пошло совсем не так, может вы main меняли через inject? А если работает со стандартными, а с кастомными не хочет, то я даже не знаю что думать.
Гримбольд, скорее всего - нужно поменять порядок тайлов в тайлсете, от этого зависит края от какого из двух соприкасающихся тайлов будут отрисованы сверху. Скрин не смотрел - bmp не качаю из принципа
Рекомендую использовать трюк с выдачей руны в которую засунуто зелье неуязвимости. (руна - имеется в виду предмет настроенный на автоматическое использование при получении, стандартные предметы с такими настройками это именно руны)
Если у цели нет инвентаря - выдавать способность инвентарь, выдавать предмет и сразу забирать инвентарь.
Если у цели есть инвентарь, но без права применять пердметы - придется немного по возиться и выдать этому инвентарю дополнительный уровень, на котором будут права применять предметы и перед выдачей руны поднимать уровень инвентаря, а потом снижать обратно.
» WarCraft 3 / Использования юнита как снаряд
» WarCraft 3 / Официально стал доступен PTR 1.31
» WarCraft 3 / Официально стал доступен PTR 1.31
» WarCraft 3 / Официально стал доступен PTR 1.31
Вейт на скрытом таймере с самоуничтожением - можно реализовать, чуть с другим синтаксисом, но можно, готовой такой функции нет. естественно, но пишется за пять минут один раз и потом используется.
» WarCraft 3 / Официально стал доступен PTR 1.31
» WarCraft 3 / Очередной депротект...
» WarCraft 3 / Официально стал доступен PTR 1.31
» WarCraft 3 / set manacost of ability не работает
» WarCraft 3 / Очередной депротект...
» WarCraft 3 / Триггерный ИИ
» WarCraft 3 / Улучшения на юнитах другого клана
» WarCraft 3 / Аура снижающая защиту врагов
» WarCraft 3 / Увеличение размеров карты и нестандартных тайлов рельефа.
» WarCraft 3 / Как переходить на lua?
Ред. prog
» WarCraft 3 / Как переходить на lua?
» WarCraft 3 / Как переходить на lua?
Ред. prog
» WarCraft 3 / Как переходить на lua?
» WarCraft 3 / Как переходить на lua?
» WarCraft 3 / Как переходить на lua?
Если с анонимной функцией непонятно, можно переписать так
» WarCraft 3 / Как переходить на lua?
Еще можно как-то так - завернуть в вызов анонимной функции:
» WarCraft 3 / Стартовая локация игроков и создание юнитов на ней
» WarCraft 3 / Стартовая локация игроков и создание юнитов на ней
» WarCraft 3 / Стартовая локация игроков и создание юнитов на ней
Ред. prog
» WarCraft 3 / Редактор Карт, смена цвета текстуры.
» WarCraft 3 / Скилл на неуязвимость
Если у цели нет инвентаря - выдавать способность инвентарь, выдавать предмет и сразу забирать инвентарь.
Если у цели есть инвентарь, но без права применять пердметы - придется немного по возиться и выдать этому инвентарю дополнительный уровень, на котором будут права применять предметы и перед выдачей руны поднимать уровень инвентаря, а потом снижать обратно.