Гайд LuBu // Простенький склейщик луашек

lubu.png

LuBu - простенький склейщик .lua и .dll файлов написанный на коленке за 10 минут. Используя LuBu вы можете превратить такую кучу файлов в 1 .lua скрипт.​
Код:
vAcs/
├── dist/
├── src/
│   ├── cfg-tools/
│   │   ├── base64.lua
│   │   ├── json.lua
│   │   └── reflect.lua
│   ├── components/
│   │   ├── hint-button.lua
│   │   ├── image-url.lua
│   │   ├── input.lua
│   │   ├── link.lua
│   │   ├── main-menu.lua
│   │   ├── scroller.lua
│   │   ├── slots-menu.lua
│   │   ├── spinner.lua
│   │   ├── start-menu.lua
│   │   └── toggle-button.lua
│   ├── resource/
│   │   ├── fonts/
│   │   │   ├── bold.lua
│   │   │   └── regular.lua
│   │   └── images/
│   │       ├── logo.lua
│   │       └── logo-compact.lua
│   ├── cfg.lua
│   ├── skin.lua
│   ├── sync.lua
│   ├── utils.lua
│   ├── config
│   ├── init.lua
│   ├── items.lua
│   ├── net.lua
│   ├── object-editor.lua
│   ├── render-object.lua
│   └── init.lua
├── lubu.json
└── lubu.exe

Использование:
  1. скачиваем lubu.exe файл из вложений
  2. создаем файл lubu.json в папке с нашим проектом
  3. в lubu.json файле указываем главный файл, все модули и путь по которому будет создан склеенный файл
  4. запускаем lubu командой lubu.exe lubu.json или просто переносим .json на lubu.exe
  5. готово!
    1734014851935.png
Пример lubu.json:
JSON:
{
    "main":"src/init.lua",
    "modules":{
        "cfg-tools.base64": "src/cfg-tools/base64.lua",
        "cfg-tools.json": "src/cfg-tools/json.lua",
        "cfg-tools.reflect": "src/cfg-tools/reflect.lua",
        "cfg": "src/cfg.lua",
        "components.hint-button": "src/components/hint-button.lua",
        "components.image-url": "src/components/image-url.lua",
        "components.input": "src/components/input.lua",
        "components.link": "src/components/link.lua",
        "components.main-menu": "src/components/main-menu.lua",
        "components.scroller": "src/components/scroller.lua",
        "components.slots-menu": "src/components/slots-menu.lua",
        "components.spinner": "src/components/spinner.lua",
        "components.start-menu": "src/components/start-menu.lua",
        "components.toggle-button": "src/components/toggle-button.lua",
        "config": "src/config.lua",
        "init": "src/init.lua",
        "items": "src/items.lua",
        "net": "src/net.lua",
        "object-editor": "src/object-editor.lua",
        "render-object": "src/render-object.lua",
        "resource.fonts.bold": "src/resource/fonts/bold.lua",
        "resource.fonts.logo-compact": "src/resource/fonts/logo-compact.lua",
        "resource.fonts.regular": "src/resource/fonts/regular.lua",
        "resource.images.logo-compact": "src/resource/images/logo-compact.lua",
        "resource.images.logo": "src/resource/images/logo.lua",
        "skin": "src/skin.lua",
        "sync": "src/sync.lua",
        "utils": "src/utils.lua"
    },
    "output":"dist/vAcs-bundled.lua"
}

GitHub:
 

Вложения

  • lubu.exe
    2.4 MB · Просмотры: 7
Последнее редактирование:

OSPx

Участник
40
25
ну жсон и yml можно, но вот шрифты вряд ли выйдет, типо как ты их юзаешь во время разработки если они не переведены в base64?
с помощью констант твоих, типа

Lua:
if BUNDLED then
     -- грузим шрифт из модуля
else
     -- как обычно
end
 
  • Нравится
Реакции: chapo

chapo

чопа сребдс // @moujeek
Автор темы
Модератор
8,973
11,753
Добавлена поддержка запихивания .dll модулей в луашку. Использовать не рекомендую, но работает. После сжатия выглядит примерно так:
Lua:
-- This function generated by LuBu. Used to load compressed .dll modules
local function LUBU_LOAD_COMPRESSED_DYNAMIC_LIBRARY(moduleName, bytes)
    local tempFileName = moduleName .. ".dll";
    local file = io.open(tempFileName, "wb");
    assert(file, '[LuBu Error] Error loading compressed dynamic library (counld not open file): ' .. tempFileName);
    for _, byte in ipairs(bytes) do
        file:write(string.char(byte));
    end
    file:close();
    local module = require(moduleName);
    return module;
end


-- Dll Module lfs (../example-project/src/lfs.dll)
package.preload['lfs'] = LUBU_LOAD_COMPRESSED_DYNAMIC_LIBRARY('lfs', { ... });
На скрине видно вес дллки и итоговый вес луашки
1735572293868.png


Пример lubu.json с дллками:
JSON:
{
    "main": "../example-project/src/init.lua",
    "modules": {
        "add": "../example-project/src/add.lua",
        "mul": "../example-project/src/mul.lua"
    },
    "dll": {
        "lfs": "../example-project/src/lfs.dll"
    },
    "output": "../example-project/dist/release.lua",
    "const": {}
}
спасибочки @kyrtion
 

Вложения

  • lubu.exe
    2.5 MB · Просмотры: 1
  • Нравится
Реакции: kyrtion

Vespan

loneliness
Проверенный
2,129
1,747
Делал для себя но может кому то приходится - автоматическое "компиляция" проекта
Принцип что чекает ли изменился какой то из файлов раз в 1 секунду(можно изменить в main.go -> 82 строка вместо 1000), можно было как в AutoReboot.lua условие по времени изменении файла ну да ладно :=-#

Так же добавил константы - да можно было писать в .json но мне это не удобно!!!!!
в "main": ".lua":
Lua:
--[[static]]
require "players"
ffi = require('ffi')
ffi.cdef('struct CVector2D {float x, y;}')
CRadar_TransformRealWorldPointToRadarSpace = ffi.cast('void (__cdecl*)(struct CVector2D*, struct CVector2D*)', 0x583530)
CRadar_TransformRadarPointToScreenSpace = ffi.cast('void (__cdecl*)(struct CVector2D*, struct CVector2D*)', 0x583480)
CRadar_IsPointInsideRadar = ffi.cast('bool (__cdecl*)(struct CVector2D*)', 0x584D40)
events = require "samp.events"
handler = require 'lib.samp.events.handlers'
imgui = require "imgui"
inspect = require "inspect"
--[[static]]
важно - --[[static]] обозначает как и начало так и конец глобальных перемен проекта которых нужно вырезать (generator.go -> 91 line func getStatic)
generator.go вырежет и вставит в самое начало "output":".lua"

(сильно колхоз ну да похуй, в своем стиле)

обновил файлик сверху :=-))
 

Вложения

  • LuBu.7z
    1.7 MB · Просмотры: 2
Последнее редактирование:
  • Нравится
Реакции: kyrtion и chapo