24

» WarCraft 3 / Официально стал доступен PTR 1.31

PT153, скажу честно - мне лень реанимировать акк на хайве. Если как-то дойдут руки и еще не будет репорта - отрепорчу сам.
24

» WarCraft 3 / Официально стал доступен PTR 1.31

Нашли вместе с ScorpioT1000 баг парсера - наличие %S или %s в любой части луа-кода приводит к падению редактора. Было бы здорово если бы кто-то зарепортил это на хайв и близам.
24

» WarCraft 3 / Официально стал доступен PTR 1.31

H, я пока не озадачивался автоматизацией инжекта кода в карту - пишу в vscode с плагинами рекомендоваными на хайве. Весь код пишу в одном большом файле и по мере необходимости переношу вручную в блоки кода в редакторе, а дальше стандарно для WE. Криво, но мне пока хватает, нормальная среда разработки экономит достаточно времени, чтобы эти дополнительные ручные действия окупались, в сравнении с работой прямо в WE. Если буду что-то более серьезное чем тест новых возможностей делать, то может и подумаю о чем-то большем.
24

» WarCraft 3 / Официально стал доступен PTR 1.31

Еще немного Lua вам в ленту. ForGroup, Lua и кложуры.
function TestLib.TestGroup(g)
    print("group test start")
    local a = 42
    local i = 0
    ForGroup(g, function()
        local u = GetEnumUnit()
        print('i='..i..' a='..a.." "..GetHandleId(u).." "..GetUnitName(u))
        i = i +1
    end)
    print("group test end")
end
Результат
На очереди таймеры...

Lua, таймеры и кложуры
TestLib.TimerCounter=0
function TestLib.TestTimers()
  local t1 = CreateTimer()
  local i = 0
  local a = 42
  local x = TestLib.TimerCounter
  print('start timer '..x)
  TimerStart(t1, 1, true, function()
    print('timer '..x..' tick '..i..' a='..a)
    i = i +1
  end)
  TestLib.TimerCounter = TestLib.TimerCounter+1
end
Результат:
Загруженные файлы
24

» WarCraft 3 / Официально стал доступен PTR 1.31

Еще один юз-кейс BlzChangeMinimapTerrainTex - террейн, который динамически меняется в пределах фиксированного набора состояний, для которых можно заранее нарисовать текстуру миникарты.
24

» WarCraft 3 / Запретить атаковать

Там короче проблема появляется, в том, что если я начинаю чарджить, то анимации нет, в РО указывается только анимация, котороая будет проигрываться только после самого каста спелла.
Что-то странное, потому как я именно на канале делал скилы такого типа, без управления анимацией триггерно, да и в стандартных настройках канал должен работать подобным образом - запускать длительную channel анимацию.
24

» WarCraft 3 / Официально стал доступен PTR 1.31

ScorpioT1000, даже если я пропустил изменения и она уже кропает текстуру миникарты под отрезаную область, возможность проставить кастомную текстуру динамически всеравно будет востребована хотябы ради того чтобы детализация миникарты не зависела от размера области.
24

» WarCraft 3 / Официально стал доступен PTR 1.31

Nelloy, нативная многопоточность от Lua, скорее всего, будет отключена близами, если еще не отключена, как уже отключено все IO.

Следующее на очереди к проверке - функция BlzChangeMinimapTerrainTex
Это не так круто и полезно, как работа с полями всего и вся, но вротмненоги, если она работает, то насколько же приятней станет делать и играть карты с несколькими локациями в одной карте!

upd: BlzChangeMinimapTerrainTex работает. На входе принимает путь до текстуры.
24

» WarCraft 3 / Запретить атаковать

А канал пробовали? В смысле, в канале же анимацию задать тоже можно в РО.
24

» WarCraft 3 / Официально стал доступен PTR 1.31

exAres, у нас есть Lua и кони наши быстры... А если серьезно - это все сильно зависит от реальных условий в карте - одно дело два десятка героев снабдить кастомным уроном и кастомной системой статов, и совсем другое - пару сотен юнитов у каждого из двадцати игроков.
24

» WarCraft 3 / Официально стал доступен PTR 1.31

quq_CCCP, в новых реалиях - возможно проще запилить систему кастом урона и переделать интерфейс чтобы он показывал то что нужно и когда нужно.
24

» WarCraft 3 / Официально стал доступен PTR 1.31

Bergi_Bear,
Из интересного - работает изменение типа цели у юнита, возможно и у атаки но атаку еще не проверил. Но я уже и не вспомню можно ли это было менять раньше без этой нативки и как оно соотносится с классификациями, которые проставляются отдельно и у которых другой список значений. А вот и нет - для атаки ситуация аналогична попытке получить тип атаки - нули на выходе, возможно дело таки в индексах.
Из того что еще проверял и что работает - броня. Работает как сумма белой и зеленой брони без изменения зеленой.
24

» WarCraft 3 / Официально стал доступен PTR 1.31

Проверил тип атаки - не доделано, судя по всему - возвращает ноль как текущий тип атаки, независимо от реального типа атаки. Или там что-то совсем не логичное в индекс атаки передавать надо. Но ставлю на то, что это и дальше не заведется, если близов не пинать активно - там явно мало поменять флаг, как и для движения.
24

» WarCraft 3 / Официально стал доступен PTR 1.31

Тип движения - число меняется, поведение юнита - нет. Скорее всего, мало поменять этот флаг, при живом юните. И, насколько я помню, с мемхаком аналогично было - еще какие-то махинации требовались помимо изменения этого флага.
Тип атаки и базовый урон - попробую, параметры оружия не трогал руками еще.
24

» WarCraft 3 / Официально стал доступен PTR 1.31

Кто там жаловался что для юнитов совсем не меняются поля новыми нативками? Только что пошел проверил - работает. Все поля не перебирал, естественно, но те что руками трогал отлично меняются. Единственное что - новое значение получается с учетом бонусов т.е. если у героя в инвентаре кольцо защиты на +2 и герою выставить новой нативкой броню в 2, то без кольца она станет равна нулю - меняется сумма белого и зеленого значений, без изменения зеленого значения.
24

» WarCraft 3 / Официально стал доступен PTR 1.31

PrincePhoenix, не так много вещей в варе которые могут создаваться или редактироваться локально, ничего нового, да это лишняя память, но зато меньше гемороя с синхронизацией.
24

» WarCraft 3 / Официально стал доступен PTR 1.31

Alexander12:
Кстати, может кто знает, как сделать кнопку, после нажатии которой работала клавиатура ?
Теоретически - снимать с неё фокус по нажатию через BlzFrameSetFocus(frame, flag). Еще можно попробовать полностью запрещать фокус самому фрейму кнопки, но не факт что выйдет.
24

» WarCraft 3 / Официально стал доступен PTR 1.31

quq_CCCP, посмотри те карты которые кидал pro100master на третьей странице комментов - какраз начиная с этого PTR это уже не трекабли, а полноценные фреймы интерфейсные.
24

» WarCraft 3 / Официально стал доступен PTR 1.31

upd2: искуственных ограничений на длину lua-строки не обнаружено. Но вполне вероятно, что при передаче в нативки происходит конверт в JASS строку и отбрасывание лишнего.

Jass компилируется в байткод при запуске карты
И выполняется на JASS-машине. А луа компилится в Lua-байткод и выполняется на Lua-машине.
24

» WarCraft 3 / Официально стал доступен PTR 1.31

ScorpioT1000, поясни что именно требуется проверить пошагово - проверю.
upd1: многострочная запись работает
24

» WarCraft 3 / Официально стал доступен PTR 1.31

Apotheosis, карта на хайве - пока продвинутый аналог дгуя, а не новые интерфейсные нативки, как на сриншоте, насколько я знаю, а люди хотят именно новые нативки.
24

» WarCraft 3 / Официально стал доступен PTR 1.31

Выкроил еще немного времени - проверил обработку ошибок в Lua.
Обработка ошибок через pcall и xpcall пока близами не выпилена и исправно работает.
24

» WarCraft 3 / Официально стал доступен PTR 1.31

H, я что-то пропустил? С каких пор у вара есть еще одна VM помимо JASS? Я всегда был уверен что JASS-машина дальше дергает нативную реализацию в движке, которая отвечает за хранение данных, генерацию событий и все остальное. Ну и обычно встраивание Lua делают не через компиляцию в сторонний байткод, а через каллбеки в С/С++ код.

Набросал то о чем писал выше - прототип "системы" хранения произвольных данных по хендлу. Никакой безопасности, да и функционал есть куда расширять, но даже в таком виде это намного лучше любой системы хранения данных которыми я пользовался в своих старых картах.
  local DataStorage = {}
  function DataStorage:new (o)
    o = o or {}
    setmetatable(o, DataStorage)
    DataStorage.__index = function (table, key) table[key] = {} return table[key] end
    return o
  end
  function DataStorage:Reset(h)
    local data = self[h]
    local count = #data
    for i=0, count do data[i]=nil end
  end

  function DataStorage:Purge(h)
    self[h] = nil
  end

  local HandleData = DataStorage:new()  -- для хендлов
  local ProtoData = DataStorage:new()  -- для равкодов
Пример использования. Ничего интересного, просто ведет подсчет сколько раз функция была вызвана для каждого юнита и выводит это на экран.
function TestLib.TestUnit(u)
  print(u)
  local h = GetHandleId(u)
  print("handle "..h)
  local data = HandleData[h]
  if (data.num==nil)then  --поле num еще не было использовано для этого хендла, задаем начальное значение
    data.num=0
  end
  data.num = data.num+1
  print("counter "..data.num)
end
Работает "из коробки", без сторонних утилит и парсеров, выполняется на Lua-машине. Производительность руки не дошли проверить, но опыт работы с Lua подсказывает мне, что будет быстрее чем vJass.
24

» WarCraft 3 / Официально стал доступен PTR 1.31

H, если бы он еще и в луа компилился, а не в джасс, цены б ему не было.