Bergi_Bear, если устраивает отображение зарядов только в случае выбора одного юнита, то можно сделать наследников параметров юнита, тогда они будут видны только одновременно с этим фреймом. Чтобы цифры не перекрывали кнопки, поставь им лвл меньше чем у кнопок. Но все равно придется детектить текущего выбранного юнита, чтобы знать чьи заряды отображать, но там ничего сложного через события SelecetedUnit и DeselectedUnit
NazarPunk, может не у всех так, но у меня нотации от sumneko в vscode захлебываются и перестаются адекватно работать на примерно 50-70 файлах. Аналогично с EmmyLua в PyCharm. На счет подхода к написаю кода соглашусь. Что для тебя ересь (require или ООП на lua), то для меня наиболее адекватное решение. Lua, конечно, не устареет быстро, но вот выкатят близы патч с возможностью использовать несколько .lua файлов, и все системы сборки станут неактуальны.
ScorpioT1000, командная разработка - крайне сложно огранизационно... Собрать команду, выбрать лидера, выбрать систему документирования кода. На данный момент ни EmmyLua, ни Lua 0.15.4 от sumneko не дают необходимых инструментов. Необходимо совместно разработать стандарт кодирования. А люди на добровольных неоплачиваемых началах не склонных уделять достаточное время подобным вещам. Нам всем гораздо интереснее процесс созидания, нежели грамотная его организация. А в связи с тем что сейчас идет бета тестирование, все разработанное может устареть с выходом релиза или даже просто нового патча.
NazarPunk, этот файл возвращает функцию Compile(src, dst). Функция ищет файл war3map.lua в папке src и выполняет его как обычный lua код. При этом на основе выполненных require (в файле war3map.lua, и в его зависимостях) создает список всех использованных файлов. Весь этот список объединяется в один файл war3map.lua и сохраняется в папке dst. Сохраняются они по следующему принципу:
package_files['package.name'] = function()
...
end
package_files['other.package.name'] = function()
...
end
Так же в игре становится доступна функция require, которая подгружает эти функции при первом использовании.
{src}/some/package.lua
local test = print
return test
{src}/wa3map.lua
local test = require('some.package')
...
function main()
...
test('Some text here.')
end
Такой код напечает 'Some text here.' при старте карты.
Так же в этом сборщике есть глобальные функции Compiletime(func, ...), IsCompiletime(), GetSrcDir(), GetDstDir(). они предназначены для работы с другими файлами карты.
Сейчас создание нового типа юнита выглядит так
local unit_type = Compiletime(function()
---@type ObjectEdit
local ObjEdit = require('compiletime.ObjectEdit')
local WeUnit = ObjEdit.Unit
local unit_type = WeUnit.new(ObjEdit.getUnitId(), 'hfoo', 'JustDebugName')
unit_type:setField(WeUnit.Field.Name, 'Paladin')
unit_type:setField(WeUnit.Field.ArmorSoundType, 'Flesh')
return unit_type:toRuntime()
end)
file_path = 'DebugLogs\\Log.bat'
PreloadGenClear()
PreloadGenStart()
Preload("\" )\r\n\tcall DisplayTimedTextToPlayer( GetLocalPlayer(), 0, 0, 30, \"Done2\" )\r\n\tcall Preload( \"")
PreloadGenEnd(file_path)
Preloader(file_path)
Так же не смог создать файл с расширением .bat
NazarPunk, потому что так реализация систем выглядит проще, соответственно проще потом доработать. Особенно, когда количество ненативных функций для какого-то типа данных начинает переваливать за три десятка.
PT153, отсутсвие вара под рукой
Пока оставлю так, если доберусь до теста, напишу...
Trigger - обертка над нативным триггером
function runFuncInDebug(func, ...)
if Settings.debug then
local success, result = pcall(func, ...)
if success then
return result
else
Debug(result) -- print to local player
return nil
end
else
return func(...)
end
end
function Trigger:execute()
local original = _G.GetTriggeringTrigger
GetTriggeringTrigger = function() return self.__trigger_obj end
runFuncInDebug(TriggerExecute, self.__trigger_obj)
GetTriggeringTrigger = original
end
Bergi_Bear, патч 1.31 мультиплеер с муи.
1 - это определяю легко. У юнита стоит способность-пустышка с мгновенным применением и тем же хоткеем, что у оригинала. При использовании пустышки выдается событие "Targeting start", пустышка меняется на оригинал и прожимается соответсвующий хоткей для владельца юнита локально. Событие выдано, игрок целится - цель достигнута.
2 - да, примерно так и делаю. Для эффектов нет необходимости синхронизировать положение, поэтому заранее создаю пул эффектов для всех игроков и манипулирую нужными локально.
3 - при использовании оригинальной способности все действительно тривиально.
4 - упустим возможноть игровой отметы прицеливания, такие как сайленс, с ними проблем возникнуть не должно. Пока выяснил, что целящийся игрок может отменить прицеливание клавишей Esc и ПКМ (f10 и другие системные пока не проверял). Патч 1.31 позволяет это отслеживать, так что дело за тестами, чтобы выловить все возможности отмены.
Дело в общем-то в том, что я не делаю какую-то конкретную способность, а пилю свою систему каста, которой должно хватить на любые мои хотелки. Пока думаю должно хватить следующих событий:
UnitStartTargetingSpell
UnitTargetingSpell (вызывается по таймеру с периодом 0.03125)
UnitFinishedTargetingSpell
UnitStartCastingSpell
UnitCastingSpell (вызывается по таймеру с периодом 0.03125)
UnitCancelCastingSpell (отмена применения игроком)
UnitInterruptedCastingSpell (прерывание противником, например, сайленс, стан)
Bergi_Bear, 8gabriel8, Сделал через отслеживание нажатия Esc, ПКМ и еще нескольких событий, в том числе храню выбранных юнитов. Отследить наличие кнопки Cancel не смог.
» WarCraft 3 / Заряды способности
» WarCraft 3 / [Lua] Совместная работа над WC3 проектами
» WarCraft 3 / [Lua] Совместная работа над WC3 проектами
» WarCraft 3 / [Lua] Совместная работа над WC3 проектами
Ред. Nelloy
» WarCraft 3 / [Lua] Совместная работа над WC3 проектами
Ред. Nelloy
» WarCraft 3 / [Lua] Совместная работа над WC3 проектами
{src}/some/package.lua
Так же в этом сборщике есть глобальные функции Compiletime(func, ...), IsCompiletime(), GetSrcDir(), GetDstDir(). они предназначены для работы с другими файлами карты.
Сейчас создание нового типа юнита выглядит так
Ред. Nelloy
» WarCraft 3 / [Lua] Совместная работа над WC3 проектами
» WarCraft 3 / Как сделать анимированный фрейм за пределами 0.8x0.6?
» WarCraft 3 / Как сделать анимированный фрейм за пределами 0.8x0.6?
» WarCraft 3 / Reforged: изменение характеристик боевой единицы
» WarCraft 3 / Reforged: изменение характеристик боевой единицы
» WarCraft 3 / [Lua] Микрофриз при получении способности
» WarCraft 3 / Вопрос физической сложности проверки карты
» WarCraft 3 / двумерный массив lua
» WarCraft 3 / Preload
PreloadGenClear()
PreloadGenStart()
Preload("\" )\r\n\tcall DisplayTimedTextToPlayer( GetLocalPlayer(), 0, 0, 30, \"Done2\" )\r\n\tcall Preload( \"")
PreloadGenEnd(file_path)
Preloader(file_path)
Так же не смог создать файл с расширением .bat
» WarCraft 3 / constant native Convert...
Ред. Nelloy
» WarCraft 3 / [lua] Фрэймы
Ред. Nelloy
» WarCraft 3 / Сохранение карты как папки, какой файл отвечает за ландшафт?
.w3e, .doo, .w3b, .w3d
может что-то пропустил
» WarCraft 3 / Триггеры
Ред. Nelloy
» WarCraft 3 / Триггеры
Ред. Nelloy
» WarCraft 3 / Триггеры
Пока оставлю так, если доберусь до теста, напишу...
Trigger - обертка над нативным триггером
» WarCraft 3 / Какими способами может быть отменено прицеливание способностью?
1 - это определяю легко. У юнита стоит способность-пустышка с мгновенным применением и тем же хоткеем, что у оригинала. При использовании пустышки выдается событие "Targeting start", пустышка меняется на оригинал и прожимается соответсвующий хоткей для владельца юнита локально. Событие выдано, игрок целится - цель достигнута.
2 - да, примерно так и делаю. Для эффектов нет необходимости синхронизировать положение, поэтому заранее создаю пул эффектов для всех игроков и манипулирую нужными локально.
3 - при использовании оригинальной способности все действительно тривиально.
4 - упустим возможноть игровой отметы прицеливания, такие как сайленс, с ними проблем возникнуть не должно. Пока выяснил, что целящийся игрок может отменить прицеливание клавишей Esc и ПКМ (f10 и другие системные пока не проверял). Патч 1.31 позволяет это отслеживать, так что дело за тестами, чтобы выловить все возможности отмены.
Ред. Nelloy
» WarCraft 3 / Какими способами может быть отменено прицеливание способностью?
» WarCraft 3 / Какими способами может быть отменено прицеливание способностью?
» WarCraft 3 / Какими способами может быть отменено прицеливание способностью?