Помогите с кодом

TopCarl

Участник
Автор темы
107
14
Написал скрипт для вывода списка /admins в чат но ошибка (38: attempt to get length of global 'adm' (a nil value)), помогите решить, и вот текст для пасты если что (Vlad_Pypkin[6] - [5 lvl] [Отсуствует{FEFE22}] - [AFK: 0]{FFFFFF}. Репутация: 212 - Выговоры [1/3])
Lua:
require 'lib.moonloader'
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8
local sampev = require 'lib.samp.events'
local ffi = require 'ffi'

state = false
CPX = 300
CPY = 300
font = 'Arial'

function main()
   while not isSampAvailable() do wait(200) end
   sampRegisterChatCommand('adv', function ()
      state = not state
      msg(state and 'ON' or 'OFF')
   end)
   lua_thread.create(rendertext)
   while true do
      wait(0)
   end
end

function sampev.onServerMessage(color, text)
   if state then
      if text:find('(.*)%[(%d+)%] - %[(%d+) lvl%] %[(.*){......}%] - %[AFK: (%d+)%]{......}. Репутации: (%d+) - Выговоры %[(%d+)/0%]') then
         local pname, pid, padm, pdg, pafk, prep, pvig = text:match("(.*)%[(%d+)%] - %[(%d+) lvl%] %[(.*){......}%] - %[AFK: (%d+)%]{......}. Репутации: (%d+) - Выговоры %[(%d+)/0%]")
         texts = pname..'['..pid..'] - ['..padm..' lvl] ['..pdg..'] - [AFK: '..pafk..']. Репутации: '..prep..' - Выговоры ['..pvig..'/0]'
         table.insert(adm, texts)
         return false
      end
   end
end

function rendertext()
   while true do wait(0)
      if #adm > 0 and state then
            renderFontDrawText(font,'Администрация в сети:', CPX, CPY,0xFFFFFFFF)
            for i = 1, #adm do
                renderFontDrawText(font,adm[i], CPX, CPY+i*30,0xFFFFFFFF)
            end
      end
   end
end

lua_thread.create(function ()
   while true do
      wait(2000)
      if state and not sampIsCursorActive() then
         sampSendChat('/zeks')
      end
   end
end)
function msg(text)
   sampAddChatMessage('[AdminTool] {FFFFFF}'..text, 0x73b461)
end
 
  • Bug
Реакции: Mississippi
Решение
Не выводит на экран все равно
Lua:
local sampev = require 'lib.samp.events'
local adm = {data={}}
local state = false
local CPX = 300
local CPY = 300
local font = renderCreateFont('Arial', 10,5)

function main()
    while not isSampAvailable() do wait(200) end
    sampRegisterChatCommand('adv', function ()
        state = not state
        msg(state and 'ON' or 'OFF')
    end)
    while true do
        wait(0)
        if #adm > 0 and state then
            renderFontDrawText(font,'Администрация в сети:', CPX, CPY,0xFFFFFFFF)
            for k,v in pairs(adm.data) do
               renderFontDrawText(font,v, CPX, CPY+k*30,0xFFFFFFFF)
            end
        end
    end
end

function sampev.onServerMessage(color, text)
    if state then...

Willy4ka

Известный
202
385
пробуй

Lua:
local sampev = require 'lib.samp.events'
local adm = {}
local state = false
local CPX = 300
local CPY = 300
local font = 'Arial'

function main()
    while not isSampAvailable() do wait(200) end
    sampRegisterChatCommand('adv', function ()
        state = not state
        msg(state and 'ON' or 'OFF')
    end)
    while true do
        wait(0)
        if #adm > 0 and state then
            renderFontDrawText(font,'Администрация в сети:', CPX, CPY,0xFFFFFFFF)
            for i = 1, #adm do
                renderFontDrawText(font,adm[i], CPX, CPY+i*30,0xFFFFFFFF)
            end
        end
    end
end

function sampev.onServerMessage(color, text)
    if state then
        if text:find('(.+)%[(%d+)%] %- %[(%d+) lvl%] %[(.+)%{.+%}%] %- %[AFK: (%d+)%]%{.+%}%. Репутация: (%d+) %- Выговоры %[(%d+)/3%]') then
            local pname, pid, padm, pdg, pafk, prep, pvig = text:match('(.+)%[(%d+)%] %- %[(%d+) lvl%] %[(.+)%{.+%}%] %- %[AFK: (%d+)%]%{.+%}%. Репутация: (%d+) %- Выговоры %[(%d+)/3%]')
            local texts = pname..'['..pid..'] - ['..padm..' lvl] ['..pdg..'] - [AFK: '..pafk..']. Репутации: '..prep..' - Выговоры ['..pvig..'/3]'
            table.insert(adm, texts)
            return false
        end
    end
end

function msg(text)
   sampAddChatMessage('[AdminTool] {FFFFFF}'..text, 0x73b461)
end
 
  • Нравится
Реакции: TopCarl

TopCarl

Участник
Автор темы
107
14
пробуй

Lua:
local sampev = require 'lib.samp.events'
local adm = {}
local state = false
local CPX = 300
local CPY = 300
local font = 'Arial'

function main()
    while not isSampAvailable() do wait(200) end
    sampRegisterChatCommand('adv', function ()
        state = not state
        msg(state and 'ON' or 'OFF')
    end)
    while true do
        wait(0)
        if #adm > 0 and state then
            renderFontDrawText(font,'Администрация в сети:', CPX, CPY,0xFFFFFFFF)
            for i = 1, #adm do
                renderFontDrawText(font,adm[i], CPX, CPY+i*30,0xFFFFFFFF)
            end
        end
    end
end

function sampev.onServerMessage(color, text)
    if state then
        if text:find('(.+)%[(%d+)%] %- %[(%d+) lvl%] %[(.+)%{.+%}%] %- %[AFK: (%d+)%]%{.+%}%. Репутация: (%d+) %- Выговоры %[(%d+)/3%]') then
            local pname, pid, padm, pdg, pafk, prep, pvig = text:match('(.+)%[(%d+)%] %- %[(%d+) lvl%] %[(.+)%{.+%}%] %- %[AFK: (%d+)%]%{.+%}%. Репутация: (%d+) %- Выговоры %[(%d+)/3%]')
            local texts = pname..'['..pid..'] - ['..padm..' lvl] ['..pdg..'] - [AFK: '..pafk..']. Репутации: '..prep..' - Выговоры ['..pvig..'/3]'
            table.insert(adm, texts)
            return false
        end
    end
end

function msg(text)
   sampAddChatMessage('[AdminTool] {FFFFFF}'..text, 0x73b461)
end
Ошибка на 17 строке (
[ML] (error) admins.lua: cannot resume non-suspended coroutine
stack traceback:
[C]: in function 'renderFontDrawText')
 

Willy4ka

Известный
202
385
  • Нравится
Реакции: TopCarl

TopCarl

Участник
Автор темы
107
14

Вложения

  • Снимок экрана 2023-10-13 121947.png
    Снимок экрана 2023-10-13 121947.png
    1.1 MB · Просмотры: 14

Willy4ka

Известный
202
385
Все работает, но оно создает ник один по несколько раз, как исправить? просто вообще вариантов нету на исправление
ты /admins вручную вводишь что ли? или где у тебя оно отправляется

Lua:
local adm = {data={}} -- в начале замени на это
function sampev.onSendCommand(command)
    if (command=='/admins') then
        adm:eraseTable('data')
    end
end
function adm:eraseTable(tab)
    if (#self[tab] > 0) then
        self[tab] = {}
    end
end
 
Последнее редактирование:
  • Нравится
Реакции: TopCarl

TopCarl

Участник
Автор темы
107
14
ты /admins вручную вводишь что ли? или где у тебя оно отправляется

Lua:
local adm = {data={}} -- в начале замени на это
function sampev.onSendCommand(command)
    if (command=='/admins') then
        adm:eraseTable('data')
    end
end
function adm:eraseTable(tab)
    if (#self[tab] > 0) then
        self[tab] = {}
    end
end
Хз, дописал что-то и все равно оно по несколько раз одним и тем же ником на весь экран, на 36 строке цикл на ввод /admins
Lua:
local sampev = require 'lib.samp.events'
local adm = {data={}}
local state = false
local CPX = 300
local CPY = 300
local font = renderCreateFont('Arial', 10,5)

function main()
    while not isSampAvailable() do wait(200) end
    sampRegisterChatCommand('adv', function ()
        state = not state
        msg(state and 'ON' or 'OFF')
    end)
    while true do
        wait(0)
        if #adm > 0 and state then
            renderFontDrawText(font,'Администрация в сети:', CPX, CPY,0xFFFFFFFF)
            for i = 1, #adm do
                renderFontDrawText(font,adm[i], CPX, CPY+i*30,0xFFFFFFFF)
            end
        end
    end
end

function sampev.onServerMessage(color, text)
    if state then
        if text:find('(.+)%[(%d+)%] %- %[(%d+) lvl%] %[(.+)%{.+%}%] %- %[AFK: (%d+)%]%{.+%}%. Репутация: (%d+) %- Выговоры %[(%d+)/3%]') then
            local pname, pid, padm, pdg, pafk, prep, pvig = text:match('(.+)%[(%d+)%] %- %[(%d+) lvl%] %[(.+)%{.+%}%] %- %[AFK: (%d+)%]%{.+%}%. Репутация: (%d+) %- Выговоры %[(%d+)/3%]')
            local texts = pname..'['..pid..'] - ['..padm..' lvl] ['..pdg..'] - [AFK: '..pafk..']. Репутации: '..prep..' - Выговоры ['..pvig..'/3]'
            table.insert(adm, texts)
            return false
        end
    end
end

lua_thread.create(function ()
   while true do
      wait(2000)
      if state and not sampIsCursorActive() then
         if sampSendChat('/admins') then
            adm:eraseTable('data')
         end
      end
   end
end)
function adm:eraseTable(tab)
   if (#self[tab] > 0) then
       self[tab] = {}
   end
end
function msg(text)
   sampAddChatMessage('[AdminTool] {FFFFFF}'..text, 0x73b461)
end
 

TopCarl

Участник
Автор темы
107
14
Lua:
lua_thread.create(function ()
   while true do
      wait(2000)
      if state and not sampIsCursorActive() then
         adm:eraseTable('data')
         sampSendChat('/admins')
      end
   end
end)
Все равно идет флуд текста на экран...
Lua:
local sampev = require 'lib.samp.events'
local adm = {data={}}
local state = false
local CPX = 300
local CPY = 300
local font = renderCreateFont('Arial', 10,5)

function main()
    while not isSampAvailable() do wait(200) end
    sampRegisterChatCommand('adv', function ()
        state = not state
        msg(state and 'ON' or 'OFF')
    end)
    while true do
        wait(0)
        if #adm > 0 and state then
            renderFontDrawText(font,'Администрация в сети:', CPX, CPY,0xFFFFFFFF)
            for i = 1, #adm do
                renderFontDrawText(font,adm[i], CPX, CPY+i*30,0xFFFFFFFF)
            end
        end
    end
end

function sampev.onServerMessage(color, text)
    if state then
        if text:find('(.+)%[(%d+)%] %- %[(%d+) lvl%] %[(.+)%{.+%}%] %- %[AFK: (%d+)%]%{.+%}%. Репутация: (%d+) %- Выговоры %[(%d+)/3%]') then
            local pname, pid, padm, pdg, pafk, prep, pvig = text:match('(.+)%[(%d+)%] %- %[(%d+) lvl%] %[(.+)%{.+%}%] %- %[AFK: (%d+)%]%{.+%}%. Репутация: (%d+) %- Выговоры %[(%d+)/3%]')
            local texts = pname..'['..pid..'] - ['..padm..' lvl] ['..pdg..'] - [AFK: '..pafk..']. Репутации: '..prep..' - Выговоры ['..pvig..'/3]'
            table.insert(adm, texts)
            return false
        end
    end
end

lua_thread.create(function ()
   while true do
      wait(2000)
      if state and not sampIsCursorActive() then
         adm:eraseTable('data')
         sampSendChat('/admins')
      end
   end
end)
function adm:eraseTable(tab)
   if (#self[tab] > 0) then
       self[tab] = {}
   end
end
function msg(text)
   sampAddChatMessage('[AdminTool] {FFFFFF}'..text, 0x73b461)
end
 

Вложения

  • Снимок экрана 2023-10-13 125401.png
    Снимок экрана 2023-10-13 125401.png
    750.7 KB · Просмотры: 12

TopCarl

Участник
Автор темы
107
14
вот ща должно работать

Lua:
local sampev = require 'lib.samp.events'
local adm = {data={}}
local state = false
local CPX = 300
local CPY = 300
local font = renderCreateFont('Arial', 10,5)

function main()
    while not isSampAvailable() do wait(200) end
    sampRegisterChatCommand('adv', function ()
        state = not state
        msg(state and 'ON' or 'OFF')
    end)
    while true do
        wait(0)
        if #adm > 0 and state then
            renderFontDrawText(font,'Администрация в сети:', CPX, CPY,0xFFFFFFFF)
            for i = 1, #adm do
                renderFontDrawText(font,adm[i], CPX, CPY+i*30,0xFFFFFFFF)
            end
        end
    end
end

function sampev.onServerMessage(color, text)
    if state then
        if text:find('(.+)%[(%d+)%] %- %[(%d+) lvl%] %[(.+)%{.+%}%] %- %[AFK: (%d+)%]%{.+%}%. Репутация: (%d+) %- Выговоры %[(%d+)/3%]') then
            local pname, pid, padm, pdg, pafk, prep, pvig = text:match('(.+)%[(%d+)%] %- %[(%d+) lvl%] %[(.+)%{.+%}%] %- %[AFK: (%d+)%]%{.+%}%. Репутация: (%d+) %- Выговоры %[(%d+)/3%]')
            local texts = pname..'['..pid..'] - ['..padm..' lvl] ['..pdg..'] - [AFK: '..pafk..']. Репутации: '..prep..' - Выговоры ['..pvig..'/3]'
            table.insert(adm.data, texts)
            return false
        end
    end
end
lua_thread.create(function ()
    while true do
        wait(2000)
        if state then
            adm:eraseTable("data")
            sampSendChat('/admins')
        end
    end
end)
function adm:eraseTable(tab)
   if (#self[tab] > 0) then
       self[tab] = {}
   end
end
function msg(text)
   sampAddChatMessage('[AdminTool] {FFFFFF}'..text, 0x73b461)
end
Теперь на экран вообще нечего не выводит
 

Вложения

  • Снимок экрана 2023-10-13 130520.png
    Снимок экрана 2023-10-13 130520.png
    701.6 KB · Просмотры: 12

TopCarl

Участник
Автор темы
107
14
да епаресете, замени 19 строку на renderFontDrawText(font,adm.data, CPX, CPY+i*30,0xFFFFFFFF)
Ну, оно так же не работает с adm.data на 19 строке
Lua:
local sampev = require 'lib.samp.events'
local adm = {data={}}
local state = false
local CPX = 300
local CPY = 300
local font = renderCreateFont('Arial', 10,5)

function main()
    while not isSampAvailable() do wait(200) end
    sampRegisterChatCommand('adv', function ()
        state = not state
        msg(state and 'ON' or 'OFF')
    end)
    while true do
        wait(0)
        if #adm > 0 and state then
            renderFontDrawText(font,'Администрация в сети:', CPX, CPY,0xFFFFFFFF)
            for i = 1, #adm do
               renderFontDrawText(font,adm.data, CPX, CPY+i*30,0xFFFFFFFF)
            end
        end
    end
end

function sampev.onServerMessage(color, text)
    if state then
        if text:find('(.+)%[(%d+)%] %- %[(%d+) lvl%] %[(.+)%{.+%}%] %- %[AFK: (%d+)%]%{.+%}%. Репутация: (%d+) %- Выговоры %[(%d+)/3%]') then
            local pname, pid, padm, pdg, pafk, prep, pvig = text:match('(.+)%[(%d+)%] %- %[(%d+) lvl%] %[(.+)%{.+%}%] %- %[AFK: (%d+)%]%{.+%}%. Репутация: (%d+) %- Выговоры %[(%d+)/3%]')
            local texts = pname..'['..pid..'] - ['..padm..' lvl] ['..pdg..'] - [AFK: '..pafk..']. Репутации: '..prep..' - Выговоры ['..pvig..'/3]'
            table.insert(adm.data, texts)
            return false
        end
    end
end
lua_thread.create(function ()
    while true do
        wait(2000)
        if state then
            adm:eraseTable("data")
            sampSendChat('/admins')
        end
    end
end)
function adm:eraseTable(tab)
   if (#self[tab] > 0) then
       self[tab] = {}
   end
end
function msg(text)
   sampAddChatMessage('[AdminTool] {FFFFFF}'..text, 0x73b461)
end
 

TopCarl

Участник
Автор темы
107
14
Не ворк
Lua:
local sampev = require 'lib.samp.events'
local adm = {data={}}
local state = false
local CPX = 300
local CPY = 300
local font = renderCreateFont('Arial', 10,5)

function main()
    while not isSampAvailable() do wait(200) end
    sampRegisterChatCommand('adv', function ()
        state = not state
        msg(state and 'ON' or 'OFF')
    end)
    while true do
        wait(0)
        if #adm > 0 and state then
            renderFontDrawText(font,'Администрация в сети:', CPX, CPY,0xFFFFFFFF)
            for i = 1, #adm do
               renderFontDrawText(font,adm.data[i], CPX, CPY+i*30,0xFFFFFFFF)
            end
        end
    end
end

function sampev.onServerMessage(color, text)
    if state then
        if text:find('(.+)%[(%d+)%] %- %[(%d+) lvl%] %[(.+)%{.+%}%] %- %[AFK: (%d+)%]%{.+%}%. Репутация: (%d+) %- Выговоры %[(%d+)/3%]') then
            local pname, pid, padm, pdg, pafk, prep, pvig = text:match('(.+)%[(%d+)%] %- %[(%d+) lvl%] %[(.+)%{.+%}%] %- %[AFK: (%d+)%]%{.+%}%. Репутация: (%d+) %- Выговоры %[(%d+)/3%]')
            local texts = pname..'['..pid..'] - ['..padm..' lvl] ['..pdg..'] - [AFK: '..pafk..']. Репутации: '..prep..' - Выговоры ['..pvig..'/3]'
            table.insert(adm.data, texts)
            return false
        end
    end
end
lua_thread.create(function ()
    while true do
        wait(2000)
        if state then
            adm:eraseTable("data")
            sampSendChat('/admins')
        end
    end
end)
function adm:eraseTable(tab)
   if (#self[tab] > 0) then
       self[tab] = {}
   end
end
function msg(text)
   sampAddChatMessage('[AdminTool] {FFFFFF}'..text, 0x73b461)
end
 

TopCarl

Участник
Автор темы
107
14
так попробуй

Lua:
for k,v in pairs(adm.data) do
    renderFontDrawText(font,v, CPX, CPY+k*30,0xFFFFFFFF)
end
Не выводит на экран все равно
Lua:
local sampev = require 'lib.samp.events'
local adm = {data={}}
local state = false
local CPX = 300
local CPY = 300
local font = renderCreateFont('Arial', 10,5)

function main()
    while not isSampAvailable() do wait(200) end
    sampRegisterChatCommand('adv', function ()
        state = not state
        msg(state and 'ON' or 'OFF')
    end)
    while true do
        wait(0)
        if #adm > 0 and state then
            renderFontDrawText(font,'Администрация в сети:', CPX, CPY,0xFFFFFFFF)
            for k,v in pairs(adm.data) do
               renderFontDrawText(font,v, CPX, CPY+k*30,0xFFFFFFFF)
            end
        end
    end
end

function sampev.onServerMessage(color, text)
    if state then
        if text:find('(.+)%[(%d+)%] %- %[(%d+) lvl%] %[(.+)%{.+%}%] %- %[AFK: (%d+)%]%{.+%}%. Репутация: (%d+) %- Выговоры %[(%d+)/3%]') then
            local pname, pid, padm, pdg, pafk, prep, pvig = text:match('(.+)%[(%d+)%] %- %[(%d+) lvl%] %[(.+)%{.+%}%] %- %[AFK: (%d+)%]%{.+%}%. Репутация: (%d+) %- Выговоры %[(%d+)/3%]')
            local texts = pname..'['..pid..'] - ['..padm..' lvl] ['..pdg..'] - [AFK: '..pafk..']. Репутации: '..prep..' - Выговоры ['..pvig..'/3]'
            table.insert(adm.data, texts)
            return false
        end
    end
end
lua_thread.create(function ()
    while true do
        wait(2000)
        if state then
            adm:eraseTable("data")
            sampSendChat('/admins')
        end
    end
end)
function adm:eraseTable(tab)
   if (#self[tab] > 0) then
       self[tab] = {}
   end
end
function msg(text)
   sampAddChatMessage('[AdminTool] {FFFFFF}'..text, 0x73b461)
end
 

Willy4ka

Известный
202
385
Не выводит на экран все равно
Lua:
local sampev = require 'lib.samp.events'
local adm = {data={}}
local state = false
local CPX = 300
local CPY = 300
local font = renderCreateFont('Arial', 10,5)

function main()
    while not isSampAvailable() do wait(200) end
    sampRegisterChatCommand('adv', function ()
        state = not state
        msg(state and 'ON' or 'OFF')
    end)
    while true do
        wait(0)
        if #adm > 0 and state then
            renderFontDrawText(font,'Администрация в сети:', CPX, CPY,0xFFFFFFFF)
            for k,v in pairs(adm.data) do
               renderFontDrawText(font,v, CPX, CPY+k*30,0xFFFFFFFF)
            end
        end
    end
end

function sampev.onServerMessage(color, text)
    if state then
        if text:find('(.+)%[(%d+)%] %- %[(%d+) lvl%] %[(.+)%{.+%}%] %- %[AFK: (%d+)%]%{.+%}%. Репутация: (%d+) %- Выговоры %[(%d+)/3%]') then
            local pname, pid, padm, pdg, pafk, prep, pvig = text:match('(.+)%[(%d+)%] %- %[(%d+) lvl%] %[(.+)%{.+%}%] %- %[AFK: (%d+)%]%{.+%}%. Репутация: (%d+) %- Выговоры %[(%d+)/3%]')
            local texts = pname..'['..pid..'] - ['..padm..' lvl] ['..pdg..'] - [AFK: '..pafk..']. Репутации: '..prep..' - Выговоры ['..pvig..'/3]'
            table.insert(adm.data, texts)
            return false
        end
    end
end
lua_thread.create(function ()
    while true do
        wait(2000)
        if state then
            adm:eraseTable("data")
            sampSendChat('/admins')
        end
    end
end)
function adm:eraseTable(tab)
   if (#self[tab] > 0) then
       self[tab] = {}
   end
end
function msg(text)
   sampAddChatMessage('[AdminTool] {FFFFFF}'..text, 0x73b461)
end
16 строка if #adm.data > 0 and state then