повторение строк

Howau

Участник
Автор темы
43
8
Версия MoonLoader
.026-beta
делаю биндер, когда пишу команду первый раз выводит все правильно.
пример:
1
2
когда пишу второй раз выводит:
1
2
1
2
и чем больше раз пишешь команду, тем больше раз это повтряется
Помогите исправить

Lua:
function save_command()
    for i, binder in ipairs(binders) do
        local bind = i
        local lines = {}
        sampRegisterChatCommand(binder.command, function()
            lua_thread.create(function()  -- Создание нового потока
                for line in binder.text:gmatch("[^\n]+") do
                    table.insert(lines, line) -- Добавление каждого бинда с новой строки в таблицу
                end
                for i, line in ipairs(lines) do
                    sampSendChat(line, -1)
                    wait(delay[0])
                end
            end)
        end)
    end
end
 
Решение
очень странная реализация, лучше сделать это как-то так:
Lua:
local samp = require("samp.events")

-- таблица формата [команда] = { строки }
local binder = {}

function samp.onSendCommand(arguments)
    local command, parameters = arguments:match("/(%S+) ?(.*)")
    if binder[command] then
        lua_thread.create(function()
            for i, v in ipairs(binder[command]) do
                sampSendChat(v)
                wait(delay[0])
            end
        end)
        return false
    end
end

function save_command() -- очистка и перезаполнение таблицы
    binder = {}
    for i, v in ipairs(binders) do
        binder[v.command] = {}
        for line in v.text:gmatch("[^\n]+") do
            table.insert(binder[v.command], line)
        end...

Fedya Ogrizok

Участник
50
12
Fix:
function save_command()
    for i, binder in ipairs(binders) do
        local bind = i
        local lines = {}
        sampRegisterChatCommand(binder.command, function()
            lua_thread.create(function()  -- Создание нового потока
                lines = {}
                for line in binder.text:gmatch("[^\n]+") do
                    table.insert(lines, line)  -- Добавление каждого бинда с новой строки в таблицу
                end
                for i, line in ipairs(lines) do
                    sampSendChat(line, -1)
                    wait(delay[0])
                end
            end)
        end)
    end
end
 

wojciech?

Известный
Проверенный
390
289
очень странная реализация, лучше сделать это как-то так:
Lua:
local samp = require("samp.events")

-- таблица формата [команда] = { строки }
local binder = {}

function samp.onSendCommand(arguments)
    local command, parameters = arguments:match("/(%S+) ?(.*)")
    if binder[command] then
        lua_thread.create(function()
            for i, v in ipairs(binder[command]) do
                sampSendChat(v)
                wait(delay[0])
            end
        end)
        return false
    end
end

function save_command() -- очистка и перезаполнение таблицы
    binder = {}
    for i, v in ipairs(binders) do
        binder[v.command] = {}
        for line in v.text:gmatch("[^\n]+") do
            table.insert(binder[v.command], line)
        end
    end
end