проблема с циклами for, inicfg, таблицами

Julimba

Участник
Автор темы
108
10
Версия MoonLoader
.026-beta
Здарова, вообщем в чем трабл, делаю тему для принятия админ форм так сказать. Объясню как все работает у меня
ищется форма в чате(с этим норм)
Lua:
if text:find("%[A%] .+ %w+_%w+%[%d+%]: " .. command .. " %d+ .+ || .+") then
найденная форма заносится в ини кфг(с этим норм)
Lua:
cfg.config.alevel, cfg.config.name, cfg.config.id, cfg.config.prichina , cfg.config.inic = text:match("%[A%] (.+) (%w+_%w+)%[%d+%]: " .. command .. " (%d+) (.+) || (.+)")
затем из сохраненного ранее ини переносится в таблицу(с этим норм)
Lua:
table.insert(NavodK, {alevel = cfg.config.alevel, name = cfg.config.name, id = cfg.config.id, prichina = cfg.config.prichina, inic = cfg.config.inic})
через цикл фор сверяется массив с никами и ник в форме(через ини) и если нету совпадений, то есть выбор принять или отклонить наводку(с этим норм)
Lua:
for anick, alvl in pairs(admnick) do
    if anick ~= cfg.config.name and alvl ~= cfg.config.alevel then
ну если есть совпадение, то отклоняет(с этим норм)

Когда принимается админ форма, то вся инфа берется из ини(с этим тоже норм)
Lua:
sampSendChat('command.. ' ' ..cfg.config.id.. ' ' ..cfg.config.prichina.. ' // ' ..cfg.config.inic')

теперь в чем проблемы:
1) когда была принята уже форма кем то другим, эта форма для меня никуда не пропадает и я так же могу её принять, пробовал очищать таблицу и ини, если наказание будет выдано, но при следующей наводке оно дважды повторяет почему то последнюю форму.
Lua:
if text:find('Наводка от администратора %- %w+_%w+ принята.') then
    for k, v in pairs(NavodK) do
        NavodK[k] = nil
    end
    cfg.config.id = nil
    cfg.config.alevel = nil
    cfg.config.name = nil
    cfg.config.prichina = nil
    cfg.config.inic = nil
end

2) Если приходит несколько форм сразу, то оно принимает последнюю форму сразу столько раз, сколько было ранее форм отправлено кем то
(это даже идей нету как исправить)

для наглядности проблемы скину видос

full code:
require 'lib.moonloader'
local hook = require 'lib.samp.events'
local inicfg = require 'inicfg'
local imgui = require 'imgui'
local directIni = 'moonloader\\config\\Navodki.ini'

local cfg = inicfg.load({
    config = {
        name = '',
        id = '',
        prichina = '',
        inic = ''
    }
}, "Navodki")

local NavodK = {}

local tag = '{f20f54}[Navodka] {ffffff}'
local admnick = {["Christopher_Dills"] = "Главный Администратор", ["Kalibr_Corrigan"] = "Заместитель Главного Администратора", ["Milro_Blanco"] = "Куратор", ["Ichiro_Nakata"] = "Куратор"}
local triggerCommand = {"/warn", "/ban", "/jail", "/skick", "/sethp", "/unwarn", "/pm", "/unmute", "/unjail", "/clearsu", "/spcar", "/spawncar", "/sban", "/unfreeze", "/ip", "/resgun", "/freeze", "/ans", "/sp", "/skin", "/offmute", "/jailoff", "/muteoff", "/ao", "/msg", "/banip", "/banoff", "/offban", "/warnoff", "/offwarn", "/mute", "/voicemute", "/kick", "/setarm", "/spawn"}

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end
  
    cfg.config.inic = nil
    if not doesFileExist(getWorkingDirectory()..'/config/Navodki.ini') then
        inicfg.save(cfg, 'Navodki.ini')
    end
  
    sampAddChatMessage(tag.. 'loaded', 0xf20f54)
    while true do wait(0)
    end
end

function hook.onServerMessage(clr, text)
    if text:find('Наводка от администратора %- %w+_%w+ принята.') then
        for k, v in pairs(NavodK) do
            NavodK[k] = nil
        end
        cfg.config.id = nil
        cfg.config.alevel = nil
        cfg.config.name = nil
        cfg.config.prichina = nil
        cfg.config.inic = nil
    end
    for k, command in ipairs(triggerCommand) do
        if text:find("%[A%] .+ %w+_%w+%[%d+%]: " .. command .. " %d+ .+") and not isGamePaused() then
            if text:find("%[A%] .+ %w+_%w+%[%d+%]: " .. command .. " %d+ .+ || .+") then
                cfg.config.alevel, cfg.config.name, cfg.config.id, cfg.config.prichina , cfg.config.inic = text:match("%[A%] (.+) (%w+_%w+)%[%d+%]: " .. command .. " (%d+) (.+) || (.+)")
            elseif text:find("%[A%] .+ %w+_%w+%[%d+%]: " .. command .. " %d+ .+ | .+") then
                cfg.config.alevel, cfg.config.name, cfg.config.id, cfg.config.prichina , cfg.config.inic = text:match("%[A%] (.+) (%w+_%w+)%[%d+%]: " .. command .. " (%d+) (.+) | (.+)")
            elseif text:find("%[A%] .+ %w+_%w+%[%d+%]: " .. command .. " %d+ .+ // .+") then
                cfg.config.alevel, cfg.config.name, cfg.config.id, cfg.config.prichina , cfg.config.inic = text:match("%[A%] (.+) (%w+_%w+)%[%d+%]: " .. command .. " (%d+) (.+) // (.+)")
            elseif text:find("%[A%] .+ %w+_%w+%[%d+%]: " .. command .. " %d+ .+ / .+") then
                cfg.config.alevel, cfg.config.name, cfg.config.id, cfg.config.prichina , cfg.config.inic = text:match("%[A%] (.+) (%w+_%w+)%[%d+%]: " .. command .. " (%d+) (.+) / (.+)")
            else
                cfg.config.alevel, cfg.config.name, cfg.config.id, cfg.config.prichina = text:match("%[A%] (.+) (%w+_%w+)%[%d+%]: " .. command .. " (%d+) (.+)")
            end
            table.insert(NavodK, {alevel = cfg.config.alevel, name = cfg.config.name, id = cfg.config.id, prichina = cfg.config.prichina, inic = cfg.config.inic})
            if inicfg.save(cfg, directIni) then
              
            end
            for anick, alvl in pairs(admnick) do
                if anick ~= cfg.config.name and alvl ~= cfg.config.alevel then
                    sampAddChatMessage(tag.. 'Наводка от администратора - ' ..cfg.config.name.. '. Чтобы принять нажмите - {f20f54}Alt + NumPad1', 0xf20f54)
                    lua_thread.create(function()
                        while true do wait(1)
                            if isKeyJustPressed(106) then break end
                            if isKeyDown(18) and isKeyJustPressed(97) and cfg.config.id ~= nil then
                                if cfg.config.inic == nil or cfg.config.inic == '' and cfg.config.id ~= nil then
                                    local inica = string.sub(cfg.config.name, 1, 1)
                                    local famil = string.match(cfg.config.name, "_([^\n]+)")
                                    sampSendChat('/c Наводка от администратора - ' ..cfg.config.name.. ' принята.')
                                    sampAddChatMessage(tag.. '' ..command.. ' ' ..cfg.config.id.. ' ' ..cfg.config.prichina.. ' // ' ..inica.. '.' ..famil, 0xf20f54) break
                                else
                                    sampSendChat('/c Наводка от администратора - ' ..cfg.config.name.. ' принята.')
                                    sampAddChatMessage(tag.. '' ..command.. ' ' ..cfg.config.id.. ' ' ..cfg.config.prichina.. ' // ' ..cfg.config.inic, 0xf20f54)
                                    cfg.config.inic = nil
                                end
                                break
                            end
                        end
                    end)
                end
                if anick == cfg.config.name or alvl == cfg.config.alevel then
                    sampAddChatMessage(tag.. 'Старшая администрация отправила наводку - {f20f54}' ..command.. ' ' ..cfg.config.id.. ' ' ..cfg.config.prichina, 0xf20f54)
                end
                break
            end
        end
    end
end

Буду благодарен за помощь
 

Вложения

  • navodka.lua
    4.8 KB · Просмотры: 4
Последнее редактирование:
  • Грустно
  • Bug
Реакции: AvAll и Lance_Sterling

tfornik

Известный
309
222
возьми отсюда, там код открытый, найди просто "active_forms"
 

Julimba

Участник
Автор темы
108
10
возьми отсюда, там код открытый, найди просто "active_forms"
Взять то легко и просто можно. А мне вот понять свою проблему и ошибку хочется, чтобы их потом не допускать