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

lubu.png

LuBu - простенький склейщик .lua и .dll файлов написанный на коленке за 10 минут. Используя LuBu вы можете превратить такую кучу файлов в 1 .lua скрипт.​
Код:
vAcs/
├── dist/
├── src/
│   ├── ui/
│   │   ├── components/
│   │   │   ├── button.lua
│   │   │   ├── center-text.lua
│   │   │   ├── circle-glow.lua
│   │   │   ├── clickable-text.lua
│   │   │   ├── hint.lua
│   │   │   ├── image-url.lua
│   │   │   ├── input.lua
│   │   │   ├── item.lua
│   │   │   ├── item-drag.lua
│   │   │   ├── link.lua
│   │   │   ├── menu-notifications.lua
│   │   │   ├── navigation.lua
│   │   │   ├── page-header.lua
│   │   │   ├── phrases.lua
│   │   │   ├── scroller.lua
│   │   │   ├── skin.lua
│   │   │   ├── spinner.lua
│   │   │   ├── test-image-url.lua
│   │   │   ├── texture-loader.lua
│   │   │   ├── theme-switcher.lua
│   │   │   ├── toggle-button.lua
│   │   │   └── user-tags.lua
│   │   ├── pages/
│   │   │   ├── items.lua
│   │   │   ├── other.lua
│   │   │   ├── profiles.lua
│   │   │   ├── settings.lua
│   │   │   ├── skins.lua
│   │   │   └── sync.lua
│   │   ├── subpages/
│   │   │   ├── constructor.lua
│   │   │   └── library.lua
│   │   ├── windows/
│   │   │   ├── editor.lua
│   │   │   ├── main.lua
│   │   │   ├── save-edited-item.lua
│   │   │   ├── slots.lua
│   │   │   └── welcome.lua
│   │   ├── resource/
│   │   │   ├── fonts.lua
│   │   │   ├── logo.lua
│   │   │   └── logo-compact.lua
│   │   ├── ease.lua
│   │   ├── fonts.lua
│   │   ├── style.lua
│   │   └── smooth-menu.lua
│   ├── arizona.lua
│   ├── bones.lua
│   ├── colors.lua
│   ├── config.lua
│   ├── init.lua
│   ├── inventory.lua
│   ├── items.lua
│   ├── json.lua
│   ├── library.lua
│   ├── net.lua
│   ├── object-editor.lua
│   ├── raknet.lua
│   ├── skin.lua
│   ├── sub.lua
│   ├── sync.lua
│   └── utils.lua
├── lib/
├── project.json
├── 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",
    "out": "X:\\Arizona Games Launcher\\bin\\arizona\\moonloader\\bundled.lua",
    "watcher_delay": 150,
    "const": {
        "VERSION": "5.0.0-alpha"
    },
    "modules": {
        "arizona": "src\\arizona.lua",
        "bones": "src\\bones.lua",
        "colors": "src\\colors.lua",
        "config": "src\\config.lua",
        "init": "src\\init.lua",
        "inventory": "src\\inventory.lua",
        "items": "src\\items.lua",
        "json": "src\\json.lua",
        "library": "src\\library.lua",
        "net": "src\\net.lua",
        "object-editor": "src\\object-editor.lua",
        "raknet": "src\\raknet.lua",
        "skin": "src\\skin.lua",
        "sub": "src\\sub.lua",
        "sync": "src\\sync.lua",
        "ui.components.button": "src\\ui\\components\\button.lua",
        "ui.components.center-text": "src\\ui\\components\\center-text.lua",
        "ui.components.circle-glow": "src\\ui\\components\\circle-glow.lua",
        "ui.components.clickable-text": "src\\ui\\components\\clickable-text.lua",
        "ui.components.hint": "src\\ui\\components\\hint.lua",
        "ui.components.image-url": "src\\ui\\components\\image-url.lua",
        "ui.components.input": "src\\ui\\components\\input.lua",
        "ui.components.item": "src\\ui\\components\\item.lua",
        "ui.components.item-drag": "src\\ui\\components\\item-drag.lua",
        "ui.components.link": "src\\ui\\components\\link.lua",
        "ui.components.menu-notifications": "src\\ui\\components\\menu-notifications.lua",
        "ui.components.navigation": "src\\ui\\components\\navigation.lua",
        "ui.components.page-header": "src\\ui\\components\\page-header.lua",
        "ui.components.phrases": "src\\ui\\components\\phrases.lua",
        "ui.components.scroller": "src\\ui\\components\\scroller.lua",
        "ui.components.skin": "src\\ui\\components\\skin.lua",
        "ui.components.spinner": "src\\ui\\components\\spinner.lua",
        "ui.components.test-image-url": "src\\ui\\components\\test-image-url.lua",
        "ui.components.texture-loader": "src\\ui\\components\\texture-loader.lua",
        "ui.components.theme-switcher": "src\\ui\\components\\theme-switcher.lua",
        "ui.components.toggle-button": "src\\ui\\components\\toggle-button.lua",
        "ui.components.user-tags": "src\\ui\\components\\user-tags.lua",
        "ui.ease": "src\\ui\\ease.lua",
        "ui.fonts": "src\\ui\\fonts.lua",
        "ui.pages.items": "src\\ui\\pages\\items.lua",
        "ui.pages.other": "src\\ui\\pages\\other.lua",
        "ui.pages.profiles": "src\\ui\\pages\\profiles.lua",
        "ui.pages.settings": "src\\ui\\pages\\settings.lua",
        "ui.pages.skins": "src\\ui\\pages\\skins.lua",
        "ui.pages.sync": "src\\ui\\pages\\sync.lua",
        "ui.resource.fonts": "src\\ui\\resource\\fonts.lua",
        "ui.resource.logo": "src\\ui\\resource\\logo.lua",
        "ui.resource.logo-compact": "src\\ui\\resource\\logo-compact.lua",
        "ui.smooth-menu": "src\\ui\\smooth-menu.lua",
        "ui.style": "src\\ui\\style.lua",
        "ui.subpages.constructor": "src\\ui\\subpages\\constructor.lua",
        "ui.subpages.library": "src\\ui\\subpages\\library.lua",
        "ui.windows.editor": "src\\ui\\windows\\editor.lua",
        "ui.windows.main": "src\\ui\\windows\\main.lua",
        "ui.windows.save-edited-item": "src\\ui\\windows\\save-edited-item.lua",
        "ui.windows.slots": "src\\ui\\windows\\slots.lua",
        "ui.windows.welcome": "src\\ui\\windows\\welcome.lua",
        "utils": "src\\utils.lua"
    }
}

GitHub:
 

Вложения

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

OSPx

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

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

chapo

чопа сребдс // TG/IG: @moujeek
Автор темы
Модератор
9,035
11,879
Добавлена поддержка запихивания .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 · Просмотры: 6
  • Нравится
Реакции: kyrtion

Vespan

loneliness
Проверенный
2,136
1,769
Делал для себя но может кому то приходится - автоматическое "компиляция" проекта
Принцип что чекает ли изменился какой то из файлов раз в 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

Vespan

loneliness
Проверенный
2,136
1,769
Сейчас вместо перекидывания .json на exe файл - нужно переименовать в init.json и кинуть в папку с проектом где должен быть префикс [lubu] в начале названии папки с проектом
Lua:
--root moonloader
    [lubu]test_1 -> init.lua, vehicle.lua, init.json = worked!
    test2[lubu] -> main.lua, init.json = worked!
    test3 -> main.lua, init.json = nope.
    LuBu.exe
JSON:
{
    "modules": {
        "utils": "utils.lua",
        "ui": "ui.lua"
    },
    "const": {
        "VERSION": "1.1a"
    },
    "main": "init.lua",
    "output": "./completed-lua!.lua"
}
output путь там где лежит LuBu.exe
тем самым не нужно запускать несколько LuBu - достаточно одно запустить и будет все проекты компилировать которые он видит [LuBu] & init.json не тратя много ресурсов пк

чапо любитель попукать на клавиатуру
 

Вложения

  • LuBu 2.7z
    1.7 MB · Просмотры: 2
  • Нравится
Реакции: kyrtion

chapo

чопа сребдс // TG/IG: @moujeek
Автор темы
Модератор
9,035
11,879
Бандлер был посностью переписан.
- Добавлена автоматическая сборка если главный файл или один из модулей был изменен. Для включение укажите задержку в json конфиге (в миллисекундах), например:
JSON:
{
    "main": "src/init.lua",
    "modules": {
        "my-math": "src/my-math.lua",
        "utils": "src/utils.lua",
        "lfs": "src/lfs.dll"
    },
    "out": "dist/bundled.lua",
    "watcher_delay": 250
}
- Теперь можно нормально указывать пути к файлам
- Вроде как теперь у проекта нормальная структура
 
  • Влюблен
  • Эм
Реакции: Tak и Vespan