- 37
- 11
BinderSystem | Продвинутая система биндера с переменными и функциями в любом скрипте
Описание:
BinderSystem - это гибкая система биндера для MoonLoader, которая позволяет вставить биндер в mimgui интерфейс своего скрипта с поддержкой встроенных переменных и функций.
Основные возможности:
- Создание бесконечного количества биндов
- Использование встроенных переменных
- Использование встроенных функций
- Возможность добавления собственных переменных и функций
- Два типа активации бинда (при нажатии/при отпускании клавиши)
- Сохранение настроек биндов в JSON файл, выбирая путь и название файла
Встроенные функции:
Код:
chat(текст) - отправка сообщения в чат
input(текст) - ввод текста в строку чата
notif(текст) - вывод уведомления
wait(мс) - ожидание в миллисекундах
Встроенные переменные:
Код:
{mynick} - ваш никнейм
{myid} - ваш ID
Примеры использования:
Код:
chat(/me достал документы)
wait(1000)
chat(/do Документы в руках.)
chat(/me {mynick} поправил форму)
notif(Мое здоровье: {FF1FFF}{health})
Метод | Функционал | Пример |
---|---|---|
BinderSystem.init(config_path) | Инициализирует систему биндера, создает конфиг, если его нет, загружает существующие бинды, регистрирует активные хоткеи |
Lua:
|
BinderSystem.registerVariable(name, callback, description, example) | Регистрирует новую переменную |
Lua:
|
BinderSystem.registerCommand(name, callback, description, example) | Регистрирует новую функцию |
Lua:
|
BinderSystem.renderBinderTab() | Рендерит бинды, управление биндами и изменение активаций/хоткеев |
Lua:
|
BinderSystem.getVariablesWithInfo() | Возвращает таблицу переменных со всей информацией |
Lua:
|
BinderSystem.getCommandsWithInfo() | Возвращает таблицу функций со всей информацией |
Lua:
|
BinderSystem.getVariableInfo(name) | Возвращает таблицу с информацией о переменной | См. в BinderSystem.getVariablesWithInfo() |
BinderSystem.getCommandInfo(name) | Возвращает таблицу с информацией о функции | См. в BinderSystem.getCommandsWithInfo() |
Скрипт с использованием библиотеки:
Lua:
require('lib.moonloader')
local imgui = require('mimgui')
local encoding = require('encoding')
encoding.default = 'CP1251'
local u8 = encoding.UTF8
function getMyNickName()
return sampGetPlayerNickname(getMyId())
end
function getMyId()
return select(2, sampGetPlayerIdByCharHandle(PLAYER_PED))
end
-- Подключаем нашу систему биндеров
local BinderSystem = require('bindersystem')
-- Создаем окно
local window = imgui.new.bool(false)
function main()
while not isSampAvailable() do wait(0) end
-- Инициализируем систему биндеров
BinderSystem.init(getWorkingDirectory() .. '\\config\\my_binders.json')
-- Регистрируем новую переменную
BinderSystem.registerVariable('myhealth',
function() return getCharHealth(PLAYER_PED) end,
u8"Возвращает текущее здоровье игрока",
u8"notif(Мое здоровье: {myhealth}) -- покажет текущее здоровье"
)
-- Регистрируем свои функции с описаниями и примерами
-- Функция для телепорта к метке
BinderSystem.registerCommand('tptomark',
function()
local x, y, z = getTargetBlipCoordinates()
if x ~= 0 and y ~= 0 and z ~= 0 then
setCharCoordinates(PLAYER_PED, x, y, z)
else
sampAddChatMessage('{414f93}[Binder]: {FFFFFF}Метка не найдена!', -1)
end
end,
u8"Телепортация к метке на карте",
u8"tptomark() -- телепортирует персонажа к активной метке"
)
-- Функция для восстановления здоровья
BinderSystem.registerCommand('heal',
function(amount)
amount = tonumber(amount) or 100
setCharHealth(PLAYER_PED, amount)
end,
u8"Восстановление здоровья персонажа",
u8"heal(50) -- установить 50 HP\nheal() -- установить 100 HP"
)
-- Функция для отправки серии сообщений
BinderSystem.registerCommand('multichat',
function(messages)
for msg in messages:gmatch('[^;]+') do
sampSendChat(msg:match('^%s*(.-)%s*$'))
wait(1000)
end
end,
u8"Отправка нескольких сообщений с задержкой",
u8"multichat(/me снял форму; /do Форма снята.) -- отправит два сообщения с задержкой"
)
BinderSystem.registerVariable('myarmor',
function() return getCharArmour(PLAYER_PED) end,
u8"Возвращает текущее брони игрока",
u8"notif(Моя броня: {myarmor}) -- покажет текущую броню"
)
-- Регистрируем команду для открытия меню
sampRegisterChatCommand('mybinder', function()
window[0] = not window[0]
end)
while true do
wait(0)
end
end
-- Создаем окно ImGui
local newFrame = imgui.OnFrame(
function() return window[0] end,
function(player)
local resX, resY = getScreenResolution()
local sizeX, sizeY = 600, 400
imgui.SetNextWindowPos(imgui.ImVec2(resX / 2, resY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
imgui.SetNextWindowSize(imgui.ImVec2(sizeX, sizeY), imgui.Cond.FirstUseEver)
if imgui.Begin(u8'Мой биндер', window) then
if imgui.BeginTabBar('##tabs') then
if imgui.BeginTabItem(u8'Биндер') then
-- Рендерим интерфейс биндера
BinderSystem.renderBinderTab()
imgui.EndTabItem()
end
if imgui.BeginTabItem(u8'Доступные функции') then
imgui.TextWrapped(u8'Список всех доступных функций для использования в биндере:')
imgui.Separator()
-- Получаем список всех функций с описаниями
local commands = BinderSystem.getCommandsWithInfo()
-- Встроенные функции
imgui.TextColored(imgui.ImVec4(0.5, 0.8, 1.0, 1.0), u8'Встроенные функции')
for _, cmd in ipairs(commands) do
if cmd.name == 'chat' or cmd.name == 'input' or cmd.name == 'notif' or cmd.name == 'wait' then
if imgui.CollapsingHeader(cmd.name..'##'..cmd.name) then
imgui.TextWrapped(cmd.description)
imgui.TextColored(imgui.ImVec4(0.7, 0.7, 0.7, 1.0), u8'Пример:')
imgui.TextWrapped(cmd.example)
end
end
end
imgui.Spacing()
imgui.Separator()
imgui.Spacing()
-- Пользовательские функции
imgui.TextColored(imgui.ImVec4(0.5, 1.0, 0.5, 1.0), u8'Пользовательские функции:')
for _, cmd in ipairs(commands) do
if cmd.name ~= 'chat' and cmd.name ~= 'input' and cmd.name ~= 'notif' and cmd.name ~= 'wait' then
if imgui.CollapsingHeader(cmd.name..'##'..cmd.name) then
imgui.TextWrapped(cmd.description)
imgui.TextColored(imgui.ImVec4(0.7, 0.7, 0.7, 1.0), u8'Пример:')
imgui.TextWrapped(cmd.example)
end
end
end
imgui.EndTabItem()
end
if imgui.BeginTabItem(u8'Доступные переменные') then
imgui.TextWrapped(u8'Список всех доступных переменных для использования в биндере:')
imgui.TextWrapped(u8'Переменные используются в формате {имя_переменной}')
imgui.Separator()
-- Получаем список всех переменных с описаниями
local variables = BinderSystem.getVariablesWithInfo()
for _, var in ipairs(variables) do
if imgui.CollapsingHeader('{'..var.name..'}'..'##'..var.name) then
imgui.TextWrapped(var.description)
imgui.TextColored(imgui.ImVec4(0.7, 0.7, 0.7, 1.0), u8'Пример:')
imgui.TextWrapped(var.example)
end
end
imgui.EndTabItem()
end
imgui.EndTabBar()
end
imgui.End()
end
end
)
Установка:
1. Скачать файл
bindersystem.lua
2. Поместить
bindersystem.lua
в папку moonloader/lib/
Требования:
- SAMP 0.3.7-R1 или выше
- MoonLoader
- mimgui
- encoding
Примечание:
- Я скриптер - любитель, раньше вообще не занимался серьезными скриптами/библиотеками
- Код написан за пару дней, шибко его не тестировал. Если найдете баги/недоработки - пишите в тему!
Вложения
Последнее редактирование: