Библиотеки

FYP

Известный
Автор темы
Администратор
1,754
5,507
В связи с выходом MoonLoader версии .022, в которой одним из самых важных изменений была замена встроенного ядра Lua на отдельную библиотеку, захотелось выложить пару полезных библиотек для примера. Но парой дело не ограничилось - для Lua этих библиотек столько, что под какую-то одну задачу можно найти больше десяти разных библиотек. Я постарался собрать несколько самых лучших из наиболее полезных по моему мнению, и решил создать общую тему для обмена библиотеками для Lua.

lua-cjson - высокопроизводительная библиотека для парсинга и записи данных в формате JSON
htmlparser - простой парсер HTML целиком написанный на Lua. Поддерживает базовые селекторы jQuery
inspect - преобразует любое значение Lua в легко-читаемый текст, очень удобно использовать для вывода таблиц
LuaSQL-MySQL - работа с базами данных MySQL
LuaSQL-SQLite3 - работа с локальными базами данных посредством SQLite
Lustache - реализация Mustache на Lua. Предназначен для замены тегов в тексте на значения. Примеры: http://mustache.github.io/mustache.5.html
Penlight - огромный набор всего, целиком написанный на Lua. Содержит массу возможностей стандартной библиотеки питона. Даже свою модель ООП, схожую с классами питона
LuaSocket - сокеты. TCP, UDP, HTTP, DNS, SMTP, FTP. То есть почти всё, что может понадобиться для работы с сетью
LuaFileSystem - набор функций для работы с файловой системой
LPeg - парсинг сложных текстовых данных при помощи грамматики, разбирающей выражение. Применяется обычно для парсинга исходных кодов и конфигов. Включает в себя небольшой модуль "re.lua" в качестве примера, который реализует свой формат регулярных выражений
Lume - коллекция очень полезных и удобных функций, направленных на разработку игр. Написана целиком на Lua и состоит из одного единственного файла
Lrexlib-PCRE - работа с регулярными выражениями самого распространённого и наиболее полного стандарта регулярных выражений PCRE
Lanes - многопоточность, асинхронность, параллельное программирование

Все DLL-модули из этих библиотек собраны статически (т.е. нет никаких зависимостей, кроме ядра Lua) под Windows/x86 с поддержкой Windows XP для Lua 5.1 и LuaJIT. Все они протестированы и идеально работают как с MoonLoader-ом, так и отдельно.

Установка: распаковать содержимое папки нужной библиотеки в директорию 'moonloader/lib/'.
Документация по всем библиотекам доступна на официальных ресурсах.
Скрипт, с которым тестировались все перечисленные библиотеки, можно скачать из вложения.
 

Вложения

  • lua51-libs.rar
    1.5 MB · Просмотры: 26,685
  • _libs_test.lua
    4.7 KB · Просмотры: 4,543

Losyash1337

Новичок
17
15
log.lua (A tiny logging module for lua) - простой логгер для lua. Может использоваться для логгирования скриптов в разных файлах.
На заметку: чтобы логи не выводились в moonloader.txt, закомментируйте строки с 69 по 75.
Установка: из скачанного архива переместить log.lua в папку 'moonloader/lib/'
Lua:
log = require "lib.log"
log.outfile = "custom_log.txt"

log.info("Hello! I'm log")
log.debug("I am for DEBUG")
log.warn("For small problems")
log.fatal("You have(no) problems")
 

Musaigen

abobusnik
Проверенный
1,568
1,247
JSONCFG
jsoncfg - мини-файл для работы с файлами типа .json.
Установка: скачать jsoncfg.lua и перекинуть в папку moonloader/lib
read = прочитать данные внутри файла, возвращает LUA таблицу, требует путь до .json файла.
write = записать данные внутрь файла, требует путь до .json файла и LUA таблицу с данными.
 

Вложения

  • jsoncfg.lua
    581 байт · Просмотры: 710
  • Нравится
Реакции: bet.io, romacaddy и AnWu

Akionka

akionka.lua
Проверенный
685
464
Описание: Генерирует защитный код а-ля GAuth [TOTP]
Lua:
local sha1     = require 'sha1'
local basexx   = require 'basexx'
local band     = bit.band

function genCode(skey)
  skey = basexx.from_base32(skey)
  value = math.floor(os.time() / 30)
  value = string.char(
  0, 0, 0, 0,
  band(value, 0xFF000000) / 0x1000000,
  band(value, 0xFF0000) / 0x10000,
  band(value, 0xFF00) / 0x100,
  band(value, 0xFF))
  local hash = sha1.hmac_binary(skey, value)
  local offset = band(hash:sub(-1):byte(1, 1), 0xF)
  local function bytesToInt(a,b,c,d)
    return a*0x1000000 + b*0x10000 + c*0x100 + d
  end
  hash = bytesToInt(hash:byte(offset + 1, offset + 4))
  hash = band(hash, 0x7FFFFFFF) % 1000000
  return ('%06d'):format(hash)
end
Пример использования:
Lua:
genCode('MTIzNDU2Nzg5MTIz')
Требует наличия библиотек SHA1 & BASEXX
 

Вложения

  • basexx.lua
    8.2 KB · Просмотры: 462
  • sha1.lua
    9.4 KB · Просмотры: 438

MrCreepTon

Неизвестный
Всефорумный модератор
1,941
4,002
NeatJSON - Библиотечка, которая умеет форматировать JSON с табуляцией и прочими удобными особенностями. Полезно для создания более продвинутых конфигов.

Пример:
--[[ Пусть мы подадим на функцию следующее:
    data = {
        names = {
            "Test1",
            "Test2",
            "Test3",
        },
        argument = false
    }
]]

local neatJSON = require('neatjson')

function convertTableToJsonString(data)
    return (neatJSON(data, {sort = true, wrap = 40}))
end

--[[

    На выходе получаем следующее:
    {
        "argument":false,
        "names":["Test1","Test2","Test3"]
    }

]]

Документация: https://github.com/Phrogz/NeatJSON
 

Вложения

  • neatjson.lua
    7.5 KB · Просмотры: 8,423

Smeruxa

Известный
1,255
629
JSONCFG
jsoncfg - мини-файл для работы с файлами типа .json.
Установка: скачать jsoncfg.lua и перекинуть в папку moonloader/lib
read = прочитать данные внутри файла, возвращает LUA таблицу, требует путь до .json файла.
write = записать данные внутрь файла, требует путь до .json файла и LUA таблицу с данными.
Если добавить в существующий JSON файл новую переменную, она будет добавлена, или придется удалять JSON и ждать пока он заного будет установлен?
 

k1zn

Известный
Модератор
2,386
1,927
LuaFileSystem (v.1.8.0) (собирал @alexandersaxon)

LuaFileSystem - это библиотека для Lua, разработанная для дополнения набора функций, связанных с файловыми системами, предлагаемых стандартным дистрибутивом Lua.

Документация
 

Вложения

  • lfs.dll
    134 KB · Просмотры: 1,833

Musaigen

abobusnik
Проверенный
1,568
1,247
class.lua - Библиотека для создания классов, в интернете таких предостаточно, но я решил сделать свою.
Пример использования:
Lua:
-- class - это функция.
local class = require("class")

-- Создадим класс "A". Т.к поле "__local" отсутствует, класс будет записан в глобальную таблицу "_G".
class {
  __name = "A",
  __constructor = function(self, numb) -- Конструктор с одним аргументом (self не считается, можно назвать его как угодно)
    self.Foo = "FooA"
    self.Number = numb
  end
}

-- Создадим объект класса.
local a = A(123) -- 123 -> Аргумент в конструкторе - `numb`.

-- Выведем его поле.
print(a.Foo) -- Выведет: FooA

-- Объявим функцию и вызовем её.
function A:Boo()
  print("Boo")
end

a:Boo() -- Выведет: Boo

-- Создадим локальный класс "B", наследующийся от "A".
local B = class {
  -- Вообще вся эта возня с "__local" чисто для красоты (лично мне так красивее выглядит).
  __local = true, -- Указываем что класс локальный, т.е он не будет записан в глобальную таблицу "_G".
  __name = "B", -- Если поле "__local" существует и истина, то объявлять имя класса необязательно.
  __parent = A, -- Указываем класс "А" как нашего родителя, таким образом мы получаем доступ к его функциям.
  __constructor = function(self) -- Конструктор с одним аргументом.
    A.__constructor(self, 228) -- Вызываем конструктор класса "А", таким образом можно получить доступ к его полям (даже если поле __parent отсутствует).
  end
}

-- Создадим объект класса B.
local b = B()

-- Нам доступны функции класса "A".
b:Boo()

-- Нам доступны поля класса "A".
print(b.Number)

-- Объявим метаметод, почему нет.
function B:__len()
  return #self.Foo
end

-- "FooA" -> 4 символа
print(#b)

-- Создадим класс "C", наследующийся от "B".
class {
  __name = "C",
  __parent = B,
  __constructor = function (self)
    B.__constructor(self)

    -- Изменили значение поля класса "А".
    self.Foo = "FooC"
  end
}

-- Переопределим метод "Boo" класса "А".
function C:Boo()
  print("BOOOOO")
end

-- Создадим объект класса "C".
local c = C()

-- Вызываем функцию "Boo".
c:Boo() -- Выведет: BOOOOO, а не Boo

-- Метаметоды, к сожалению, не копируются.
print(#c) -- Выведет: 0

-- Но объявить ещё раз всё равно сможем.
function C:__len()
  return #self.Foo
end

-- Полезная функция "instanceof", она есть у каждого класса
print(c:instanceof("A")) -- Истина, так как "С" наследуется от "B", а тот в свою очередь наследуется от "A",
print(b:instanceof("C")) -- Ложь, "B" вообще не знает о таком классе как "С".
print(a:instanceof("B")) -- Ложь, "А" не знает о классе "B".
 

Вложения

  • class.lua
    2.3 KB · Просмотры: 113
  • Нравится
Реакции: PanSeek, Smeruxa и k1zn