При работе с несколькими картами, часто возникает необходимость копировать в них множество кода облегчающего разработку. В цивилизованном мире для этого используют менеджеры пакетов с зависимостями, контролем версий и автоматическим обновлением. В суровых реалиях варкрафта об этом можно только мечтать, но если вы используете дешёвый сборщик, то всё у вас в руках, и можно смело написать жалкое подобие менеджера пакетов.
В прошлой статье мы уже настроили проект, теперь используя его структру, добавим файл \run\lua\FileDownload.lua, который будет отвечать за скачивание файла.
local luacurl = require "luacurl"
function FileDownload(url)
local curl = luacurl.new()
curl:setopt(luacurl.OPT_URL, url)
curl:setopt(luacurl.OPT_FOLLOWLOCATION, true)
curl:setopt(luacurl.OPT_SSL_VERIFYPEER, false)
local s = ''
curl:setopt(luacurl.OPT_WRITEFUNCTION, function(p, chunk)
s = s .. chunk
return #chunk
end)
curl:setopt(luacurl.OPT_PROGRESSFUNCTION, function(p, dltotal, dlnow)
print(url, dltotal, dlnow)
end)
curl:setopt(luacurl.OPT_NOPROGRESS, false)
assert(curl:perform())
local out, count = s:gsub('\r\n', '\n')
return out
end
Теперь напишем /run/download.lua, который мы и будем запускать для скачивания:
require 'lfs' -- подключаем LuaFileSystem https://keplerproject.github.io/luafilesystem/manual.html
local param = {
libs = {
{ [[\build\libs\math.lua]], 'https://xgm.guru/files/100/227730/math.lua' },
{ [[\build\libs\pathable.lua]], 'https://xgm.guru/files/100/231022/pathable.lua' },
{ [[\build\libs\garbage.lua]], 'https://xgm.guru/files/100/231969/garbage.lua' }
},
current = lfs.currentdir() -- текущая папка проэкта
}
-- подключаем нужные функции
dofile(param.current .. [[\run\lib\FileDownload.lua]])
-- скачиваем нужные файлы
for i = 1, #param.libs do
local lib = param.libs[i]
local content = FileDownload(lib[2])
local file = io.open(param.current .. lib[1], 'w+')
file:write(content)
file:close()
end
-- запускаем сборку
dofile(lfs.currentdir() .. [[\run\build.lua]])
Обратите внимание на эту секцию:
{ [[\build\libs\math.lua]], 'https://xgm.guru/files/100/227730/math.lua' },
{ [[\build\libs\pathable.lua]], 'https://xgm.guru/files/100/231022/pathable.lua' },
{ [[\build\libs\garbage.lua]], 'https://xgm.guru/files/100/231969/garbage.lua' }
Здесь первый элемент, как вы уже догадались - путь к файлу в проекте:
Второй, соответственно, содержит ссылку, взять которую можно например здесь:
Заключение
Как видите, писать инструменты для разработки не так уже и сложно, так что пишите комментарии, подписывайтесь на канал ставьте лайк и следите за проэктом на github.
К примеру Рекомендуемый минимальное знание языка lua красным текстом.
А так лови + за то что учите людей.