Вот почему это не работает ?

FixZer

Активный
Автор темы
126
36
Версия 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
 

FixZer

Активный
Автор темы
126
36
Лог кинь, а то нет желания весь скрипт пересматривать ещё и понимать что делает каждая часть
В логах нечего не пишет.

Лог кинь, а то нет желания весь скрипт пересматривать ещё и понимать что делает каждая часть
До перезагрузки
sa-mp-060.png

Нажимаю на кнопку сохранить и всё работает
sa-mp-061.png

После перезагрузки команда не работает
sa-mp-063.png

После сохранения команда работает
sa-mp-062.png
 
Последнее редактирование:

SomaGnoma

Известный
442
152
if window_binder.v == false then imgui.Process = true end if window_binder.v == false then imgui.Process = false
че-то я не понял)
то есть если окно отрублено то процесс врубается
а если окно также отрубается то процесс отрубается
че это?

И как может ничего в логах не быть, когда ты даже функцию не закрыл..
 

FixZer

Активный
Автор темы
126
36
че-то я не понял)
то есть если окно отрублено то процесс врубается
а если окно также отрубается то процесс отрубается
че это?

И как может ничего в логах не быть, когда ты даже функцию не закрыл..
В моём скрипте она закрыта, я просто когда копировал end не захватил

Так то он работает, но после перезагрузки пишет "Неизвестная команда".