- 130
- 39
- Версия MoonLoader
- .026-beta
Всем добрый вечер, я написал скрипт на binder и в итоге всё сохраняется, но после перезагрузки скрипта команда почему то не работает.
Помогите пожалуйста, за рание спасибо.
Вот сам скрипт на код:
Помогите пожалуйста, за рание спасибо.
Вот сам скрипт на код:
Binder:
require "lib.moonloader" -- подключение библиотеки
require "lib.sampfuncs" -- подключение библиотеки
local sampevcheck, sampev = pcall(require, "lib.samp.events")
local inicfg = require 'inicfg'
local keys = require 'vkeys'
local imgui = require 'imgui'
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8
local window_binder = imgui.ImBool(false)
local binderIni = inicfg.load({
BindsName = {},
BindsDelay = {},
BindsType = {},
BindsAction = {},
BindsCmd = {},
BindsKeys = {}
}, "PoliceHelper/binder_settings.ini")
-- ##//\\//\\//\\//\\//\\//\\//##
-- ###// Binder //###
-- ##//\\//\\//\\//\\//\\//\\//##
local bindersettings = {
binderbuff = imgui.ImBuffer(4096),
bindername = imgui.ImBuffer(40),
binderdelay = imgui.ImBuffer(7),
bindertype = imgui.ImInt(0),
bindercmd = imgui.ImBuffer(15)
}
local tagbuttons = {
{name = '{my_id}',text = 'Пишет Ваш ID.',hint = '/n /showpass {my_id}\n(( /showpass \'Ваш ID\' ))'},
{name = '{H}',text = 'Пишет системное время в часы.',hint = 'Давай встретимся завтра тут же в {H} \n- Давай встретимся завтра тут же в чч'},
{name = '{HM}',text = 'Пишет системное время в часы:минуты.',hint = 'Сегодня в {HM} будет концерт!\n- Сегодня в чч:мм будет концерт!'},
{name = '{HMS}',text = 'Пишет системное время в часы:минуты:секунды.',hint = 'У меня на часах {HMS}\n- У меня на часах \'чч:мм:сс\''},
{name = '{rep}', text = 'Пишет координаты на которых вы находитесь.', hint = '/r Нахожусь на координатах {rep}, требуется подкрепление'},
}
if not doesFileExist('moonloader/config/PoliceHelper/binder_settings.ini') then inicfg.save(binderIni, 'PoliceHelper/binder_settings.ini') end
function main()
if not isSampLoaded() or not isSampfuncsLoaded() then return end
while not isSampAvailable() do wait(100) end
imgui.Process = false
while true do
wait(0)
if window_binder.v == false then
imgui.Process = true
end
if window_binder.v == false then
imgui.Process = false
end
end
end
------------------------------------------------
function updatechatcommands()
for i, value in pairs(binderIni.BindsName) do
if tostring(value) == tostring(binderIni.BindsName[i]) then
if binderIni.BindsCmd[i] ~= '' then
sampUnregisterChatCommand(binderIni.BindsCmd[i])
sampRegisterChatCommand(binderIni.BindsCmd[i], function()
if not inprocess then
local temp = 0
local temp2 = 0
for bp in tostring(binderIni.BindsAction[i]):gmatch('[^~]+') do
temp = temp + 1
end
lua_thread.create(function()
inprocess = true
for bp in tostring(binderIni.BindsAction[i]):gmatch('[^~]+') do
temp2 = temp2 + 1
sampSendChat(tostring(bp))
if temp2 ~= temp then
wait(binderIni.BindsDelay[i])
end
end
inprocess = false
end)
else
acm('Не торопитесь, вы уже отыгрываете что-то!')
end
end)
end
end
end
end
function imgui.LockedButton(text, size)
local r, g, b, a = imgui.ImColor(imgui.GetStyle().Colors[imgui.Col.Button]):GetFloat4()
imgui.PushStyleColor(imgui.Col.Button, imgui.ImVec4(r, g, b, a/2) )
imgui.PushStyleColor(imgui.Col.ButtonHovered, imgui.ImVec4(r, g, b, a/2))
imgui.PushStyleColor(imgui.Col.ButtonActive, imgui.ImVec4(r, g, b, a/2))
imgui.PushStyleColor(imgui.Col.Text, imgui.GetStyle().Colors[imgui.Col.TextDisabled])
local button = imgui.Button(text, size)
imgui.PopStyleColor(4)
return button
end
function imgui.TextColoredRGB(text,align)
local width = imgui.GetWindowWidth()
local style = imgui.GetStyle()
local colors = style.Colors
local ImVec4 = imgui.ImVec4
local explode_argb = function(argb)
local a = bit.band(bit.rshift(argb, 24), 0xFF)
local r = bit.band(bit.rshift(argb, 16), 0xFF)
local g = bit.band(bit.rshift(argb, 8), 0xFF)
local b = bit.band(argb, 0xFF)
return a, r, g, b
end
local getcolor = function(color)
if color:sub(1, 6):upper() == 'SSSSSS' then
local r, g, b = colors[1].x, colors[1].y, colors[1].z
local a = tonumber(color:sub(7, 8), 16) or colors[1].w * 255
return ImVec4(r, g, b, a / 255)
end
local color = type(color) == 'string' and tonumber(color, 16) or color
if type(color) ~= 'number' then return end
local r, g, b, a = explode_argb(color)
return imgui.ImColor(r, g, b, a):GetVec4()
end
local render_text = function(text_)
for w in text_:gmatch('[^\r\n]+') do
local textsize = w:gsub('{.-}', '')
local text_width = imgui.CalcTextSize(u8(textsize))
if align == 1 then imgui.SetCursorPosX( width / 2 - text_width .x / 2 )
elseif align == 2 then imgui.SetCursorPosX(imgui.GetCursorPosX() + width - text_width.x - imgui.GetScrollX() - 2 * imgui.GetStyle().ItemSpacing.x - imgui.GetStyle().ScrollbarSize)
end
local text, colors_, m = {}, {}, 1
w = w:gsub('{(......)}', '{%1FF}')
while w:find('{........}') do
local n, k = w:find('{........}')
local color = getcolor(w:sub(n + 1, k - 1))
if color then
text[#text], text[#text + 1] = w:sub(m, n - 1), w:sub(k + 1, #w)
colors_[#colors_ + 1] = color
m = n
end
w = w:sub(1, n - 1) .. w:sub(k + 1, #w)
end
if text[0] then
for i = 0, #text do
imgui.TextColored(colors_[i] or colors[1], u8(text[i]))
imgui.SameLine(nil, 0)
end
imgui.NewLine()
else imgui.Text(u8(w)) end
end
end
render_text(text)
end
function imgui.Hint(text, delay, action)
if imgui.IsItemHovered() then
if hintanim == nil then hintanim = os.clock() + (delay and delay or 0.0) end
local alpha = (os.clock() - hintanim) * 5
if os.clock() >= hintanim then
imgui.PushStyleVar(imgui.StyleVar.WindowPadding, imgui.ImVec2(10, 10))
imgui.PushStyleVar(imgui.StyleVar.Alpha, (alpha <= 1.0 and alpha or 1.0))
imgui.PushStyleColor(imgui.Col.PopupBg, imgui.ImVec4(0.11, 0.11, 0.11, 0.80))
imgui.BeginTooltip()
imgui.PushTextWrapPos(450)
imgui.SetCursorPosX( imgui.GetWindowWidth() / 2 - imgui.CalcTextSize(fa.ICON_FA_INFO_CIRCLE..u8' Подсказка:').x / 2 )
imgui.TextColored(imgui.ImVec4(1.00, 1.00, 1.00, 1.00), fa.ICON_FA_INFO_CIRCLE..u8' Подсказка')
imgui.TextColoredRGB(('{FFFFFF}%s'):format(text),1)
if action ~= nil then imgui.Text(('\n %s'):format(action)) end
if not imgui.IsItemVisible() and imgui.GetStyle().Alpha == 1.0 then hintanim = nil end
imgui.PopTextWrapPos()
imgui.EndTooltip()
imgui.PopStyleColor()
imgui.PopStyleVar(2)
end
end
end
function bindertags()
if imgui.BeginPopup(u8'Тэги', nil, imgui.WindowFlags.NoCollapse + imgui.WindowFlags.AlwaysAutoResize + imgui.WindowFlags.NoTitleBar) then
for k,v in pairs(tagbuttons) do
if imgui.Button(u8(tagbuttons[k].name),imgui.ImVec2(150,25)) then
bindersettings.binderbuff.v = bindersettings.binderbuff.v..''..u8(tagbuttons[k].name)
acm('Тэг был скопирован.')
end
imgui.SameLine()
if imgui.IsItemHovered() then
imgui.BeginTooltip()
imgui.Text(u8(tagbuttons[k].hint))
imgui.EndTooltip()
end
imgui.Text(u8(tagbuttons[k].text))
end
imgui.EndPopup()
end
end
------------------------------------------------
-- Начало меню биндера --
function imgui.Window_Binder()
imgui.BeginChild("Binder_Slots", imgui.ImVec2(100, 320),true)
for i, value in pairs(binderIni.BindsName) do
if imgui.Selectable(u8(binderIni.BindsName[i])) then
binder_slot = i
bindersettings.binderbuff.v = u8(binderIni.BindsAction[i]):gsub('~', '\n')
bindersettings.bindername.v = u8(binderIni.BindsName[i])
bindersettings.bindertype.v = u8(binderIni.BindsType[i])
bindersettings.bindercmd.v = u8(binderIni.BindsCmd[i])
binderkeystatus = u8(binderIni.BindsKeys[i])
bindersettings.binderdelay.v = u8(binderIni.BindsDelay[i])
end
end
imgui.EndChild()
if binder_slot ~= nil and binder_slot <= 50 then
imgui.SameLine()
imgui.BeginChild("binder_settings", imgui.ImVec2(-1,320), true)
if binder_slot ~= 50 then imgui.Text(u8"Название биндера: ") imgui.SameLine() imgui.PushItemWidth(250) imgui.InputText('##bindersettings.bindername', bindersettings.bindername,imgui.InputTextFlags.ReadOnly)
else imgui.Text(u8'Навание биндера: ') imgui.SameLine() imgui.PushItemWidth(250) imgui.InputText('##bindersettings.bindername', bindersettings.bindername)
end
imgui.SameLine(485)
if imgui.Button(fa.ICON_FA_QUESTION_CIRCLE,imgui.ImVec2(23,23)) then
imgui.OpenPopup(u8'Тэги')
end
bindertags()
imgui.TextColoredRGB('Задержка между строками {808080}(ms):'); imgui.SameLine()
imgui.Hint('Указывайте значение в миллисекундах\n{FFFFFF}1 секунда = 1.000 миллисекунд')
imgui.Text(u8"") imgui.SameLine() imgui.PushItemWidth(50) imgui.InputText('##bindersettings.binderdelay', bindersettings.binderdelay, imgui.InputTextFlags.CharsDecimal)
if tonumber(bindersettings.binderdelay.v) and tonumber(bindersettings.binderdelay.v) > 60000 then
bindersettings.binderdelay.v = '60000'
elseif tonumber(bindersettings.binderdelay.v) and tonumber(bindersettings.binderdelay.v) < 1 then
bindersettings.binderdelay.v = '1'
end
imgui.Text(u8"Команда: ") imgui.SameLine() imgui.Text("/") imgui.SetCursorPos(imgui.ImVec2(95, 70)) imgui.PushItemWidth(100) imgui.InputText('##bindersettings.bindercmd',bindersettings.bindercmd,imgui.InputTextFlags.CharsNoBlank)
imgui.PopItemWidth()
imgui.SetCursorPos(imgui.ImVec2(3, 115))
imgui.InputTextMultiline(u8'',bindersettings.binderbuff, imgui.ImVec2(664,167))
local kei
local doreplace = false
if bindersettings.binderbuff.v ~= '' and bindersettings.bindername.v ~= '' and bindersettings.binderdelay.v ~= '' and bindersettings.bindertype.v ~= nil then
if imgui.Button(u8"Сохранить", imgui.ImVec2(150,25)) then
if not inprocess then
if bindersettings.bindertype.v == 0 then
if bindersettings.bindercmd.v ~= '' and bindersettings.bindercmd.v ~= nil then
for i, value in pairs(binderIni.BindsName) do
if tostring(u8:decode(bindersettings.bindername.v)) == tostring(value) then
sampUnregisterChatCommand(binderIni.BindsCmd[i])
doreplace = true
kei = i
end
end
if doreplace then
local refresh_text = u8:decode(bindersettings.binderbuff.v):gsub('\n', '~')
binderIni.BindsName[kei] = u8:decode(bindersettings.bindername.v)
binderIni.BindsAction[kei] = refresh_text
binderIni.BindsDelay[kei] = u8:decode(bindersettings.binderdelay.v)
binderIni.BindsType[kei]= u8:decode(bindersettings.bindertype.v)
binderIni.BindsCmd[kei] = u8:decode(bindersettings.bindercmd.v)
binderIni.BindsKeys[kei] = ''
if inicfg.save(binderIni, 'PoliceHelper/binder_settings.ini') then
acm('Бинд успешно сохранён!')
setbinderkey = false
keyname = nil
keyname2 = nil
bindersettings.bindercmd.v = ''
bindersettings.binderbuff.v = ''
bindersettings.bindername.v = ''
bindersettings.bindertype.v = 0
bindersettings.binderdelay.v = ''
bindersettings.bindercmd.v = ''
binderkeystatus = nil
binder_slot = nil
end
else
local refresh_text = u8:decode(bindersettings.binderbuff.v):gsub('\n', '~')
table.insert(binderIni.BindsName, u8:decode(bindersettings.bindername.v))
table.insert(binderIni.BindsAction, refresh_text)
table.insert(binderIni.BindsDelay, u8:decode(bindersettings.binderdelay.v))
table.insert(binderIni.BindsType, u8:decode(bindersettings.bindertype.v))
table.insert(binderIni.BindsCmd, u8:decode(bindersettings.bindercmd.v))
table.insert(binderIni.BindsKeys, '')
if inicfg.save(binderIni, 'PoliceHelper/binder_settings.ini') then
acm('Бинд успешно создан!')
setbinderkey = false
keyname = nil
keyname2 = nil
bindersettings.bindercmd.v = ''
bindersettings.binderbuff.v = ''
bindersettings.bindername.v = ''
bindersettings.bindertype.v = 0
bindersettings.binderdelay.v = ''
bindersettings.bindercmd.v = ''
binderkeystatus = nil
binder_slot = nil
end
end
else
acm('Вы неправильно указали команду бинда!')
end
end
updatechatcommands()
else
acm('Вы не можете взаимодействовать с биндером во время любой отыгровки!')
end
end
else
imgui.LockedButton(u8'Сохранить',imgui.ImVec2(150,25))
imgui.Hint('Вы ввели не все параметры. Перепроверьте всё.')
end
imgui.SameLine()
if imgui.Button(u8'Отменить',imgui.ImVec2(150,25)) then
setbinderkey = false
keyname = nil
keyname2 = nil
bindersettings.bindercmd.v = ''
bindersettings.binderbuff.v = ''
bindersettings.bindername.v = ''
bindersettings.bindertype.v = 0
bindersettings.binderdelay.v = ''
bindersettings.bindercmd.v = ''
binderkeystatus = nil
updatechatcommands()
binder_slot = nil
end
imgui.EndChild()
end
if imgui.Button(u8'Добавить', imgui.ImVec2(100,28)) then
binder_slot = 50
bindersettings.binderbuff.v = ''
bindersettings.bindername.v = ''
bindersettings.bindertype.v = 0
bindersettings.bindercmd.v = ''
binderkeystatus = nil
bindersettings.binderdelay.v = ''
updatechatcommands()
end
imgui.SameLine()
if binder_slot ~= nil and binder_slot ~= 50 then
if imgui.Button(u8'Удалить',imgui.ImVec2(82,30)) then
if not inprocess then
for i, value in pairs(binderIni.BindsName) do
local value = tostring(value)
if u8:decode(bindersettings.bindername.v) == tostring(binderIni.BindsName[i]) then
sampUnregisterChatCommand(binderIni.BindsCmd[i])
table.remove(binderIni.BindsName,i)
table.remove(binderIni.BindsKeys,i)
table.remove(binderIni.BindsAction,i)
table.remove(binderIni.BindsCmd,i)
table.remove(binderIni.BindsDelay,i)
table.remove(binderIni.BindsType,i)
if inicfg.save(binderIni,'PoliceHelper/binder_settings.ini') then
setbinderkey = false
keyname = nil
keyname2 = nil
bindersettings.bindercmd.v = ''
bindersettings.binderbuff.v = ''
bindersettings.bindername.v = ''
bindersettings.bindertype.v = 0
bindersettings.binderdelay.v = ''
bindersettings.bindercmd.v = ''
binderkeystatus = nil
binder_slot = nil
acm('Бинд успешно удалён!')
end
end
end
updatechatcommands()
else
acm('Вы не можете удалять бинд во время любой отыгровки!')
end
end
else
imgui.LockedButton(u8'Удалить',imgui.ImVec2(82,30))
imgui.Hint('Выберите бинд который хотите удалить',0)
end
end
-- Конец меню биндера --
function imgui.OnDrawFrame()
if window_binder.v then
imgui.SetNextWindowSize(imgui.ImVec2(650, 370), imgui.Cond.FirstUseEver)
imgui.SetNextWindowPos(imgui.ImVec2(sw / 2 , sh / 2),imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
imgui.Begin(u8'Биндер', window_binder, imgui.WindowFlags.NoScrollWithMouse + imgui.WindowFlags.NoTitleBar + imgui.WindowFlags.NoResize + imgui.WindowFlags.NoScrollbar + imgui.WindowFlags.NoCollapse)
imgui.Window_Binder()
imgui.End()
end
if sampevcheck then
function sampev.onServerMessage(color, text)
if mainIni.command.mask == true then
if string.find(text, 'Время действия маски истекло, вам пришлось ее выбросить', 1, true) then
SC('/me сдёрнул балаклаву с головы, после чего выбросил её')
mainIni.history.masks = false
inicfg.save(mainIni, "PoliceHelper/settings.ini")
end
end
if string.find(text, 'У вас нет маски!', 1, true) then
mainIni.history.masks = false
inicfg.save(mainIni, "PoliceHelper/settings.ini")
end
end
------------------Для биндера--------------------------
function sampev.onSendChat(message)
if message:find('{my_id}') then
SC(message:gsub('{my_id}', select(2, sampGetPlayerIdByCharHandle(playerPed))))
return false
end
if message:find('{H}') then
SC(message:gsub('{H}', os.date('%H', os.time())))
return false
end
if message:find('{HM}') then
SC(message:gsub('{HM}', os.date('%H:%M', os.time())))
return false
end
if message:find('{HMS}') then
SC(message:gsub('{HMS}', os.date('%H:%M:%S', os.time())))
return false
end
if message:find('{rep}') then
local x, y, z = getCharCoordinates(PLAYER_PED)
SC(message:gsub('{rep}', calculateZone(x, y, z)))
return false
end
end
function sampev.onSendCommand(cmd)
if cmd:find('{my_id}') then
SC(cmd:gsub('{my_id}', select(2, sampGetPlayerIdByCharHandle(playerPed))))
return false
end
if cmd:find('{H}') then
SC(cmd:gsub('{H}', os.date('%H', os.time())))
return false
end
if cmd:find('{HM}') then
SC(cmd:gsub('{HM}', os.date('%H:%M', os.time())))
return false
end
if cmd:find('{HMS}') then
SC(cmd:gsub('{HMS}', os.date('%H:%M:%S', os.time())))
return false
end
if cmd:find('{rep}') then
local x, y, z = getCharCoordinates(PLAYER_PED)
SC(cmd:gsub('{rep}', calculateZone(x, y, z)))
return false
end
end
----------------------------------------------------------------------------
end
end