Помощь в скрипте:

Maxim_Wayner

Активный
Автор темы
102
44
Версия MoonLoader
.026-beta
Здрасвуйте, написал на первый взгляд легкий скрипт который должен парсить обьявление с чата, и после чего сохранять их в текстовом документе.
Но почему-то, в консоле пишет что все ОК, а на самом деле не высвечивает кто автор и название скрипта, не реагирует на зареганую команду.
Lua::
script_author('maxim wayner')
script_name('Parser Number')
script_version('bomg ver')
require "lib.moonloader"
encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8
fa = require 'faIcons'
fa_font = require 'faIcons'
inicfg = require 'inicfg'
function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end
    sampRegisterChatCommand('pars', pars)
    wait(1000)

  
end


 

function pars(arg)
    event = require 'lib.samp.events'
    text, prefix, color, pcolor = sampGetChatString(99)
    event.onServerMessage(color, text)
    sampev.onServerMessage(color, text)
    if text:find('%w+_%w+%[%d+%]') then
        obav = text:find()
        local directIni = 'ParserObav.ini'
        local ini = inicfg.load(inicfg.load({
            settings = {     
                obav()
            }
        }, directIni))
        inicfg.save(ini, directIni)
        sampAddChatMessage('Обьявление спарсено'..number, -1)
    end
end
 

meowprd

Тот самый Котовский
Проверенный
1,280
712
*** Скрытый текст не может быть процитирован. ***
я же говорю что вообще все неправильно, выглядит так что ты даже не прочитал основы луа, а просто начал писать код наугад, но это так не работает.
почитай основы, я не люблю их рассказывать всем, это бесмысленно
может кто-то и найдется, кто расскажет тебе о них, но явно не я
 
  • Нравится
Реакции: Shepard

biscuitt

Известный
185
14
Здрасвуйте, написал на первый взгляд легкий скрипт который должен парсить обьявление с чата, и после чего сохранять их в текстовом документе.
Но почему-то, в консоле пишет что все ОК, а на самом деле не высвечивает кто автор и название скрипта, не реагирует на зареганую команду.
Lua::
script_author('maxim wayner')
script_name('Parser Number')
script_version('bomg ver')
require "lib.moonloader"
encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8
fa = require 'faIcons'
fa_font = require 'faIcons'
inicfg = require 'inicfg'
function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end
    sampRegisterChatCommand('pars', pars)
    wait(1000)

 
end


 

function pars(arg)
    event = require 'lib.samp.events'
    text, prefix, color, pcolor = sampGetChatString(99)
    event.onServerMessage(color, text)
    sampev.onServerMessage(color, text)
    if text:find('%w+_%w+%[%d+%]') then
        obav = text:find()
        local directIni = 'ParserObav.ini'
        local ini = inicfg.load(inicfg.load({
            settings = {   
                obav()
            }
        }, directIni))
        inicfg.save(ini, directIni)
        sampAddChatMessage('Обьявление спарсено'..number, -1)
    end
end

Lua:
local sampev = require 'lib.samp.events' -- Подключаешь библиотеку SAMP EVENTS.


function sampev.onServerMessage(color, text)
    if text:find('ТВОЯ РЕГУЛЯРКА') then -- если найден текст соответствующий твоей ругярке, то:
        testparam = text:match('ТВОЯ РЕГУЛЯРКА (что парсим)') - testparam = выражению в ( )
    end
end

а вообще, вот правильный ответ на твой вопрос:
к большому сожалению весь код неправильный.
тебе стоит почитать еще раз основы луа + работу с samp.lua
 

Maxim_Wayner

Активный
Автор темы
102
44
Lua:
local sampev = require 'lib.samp.events' -- Подключаешь библиотеку SAMP EVENTS.


function sampev.onServerMessage(color, text)
    if text:find('ТВОЯ РЕГУЛЯРКА') then -- если найден текст соответствующий твоей ругярке, то:
        testparam = text:match('ТВОЯ РЕГУЛЯРКА (что парсим)') - testparam = выражению в ( )
    end
end

а вообще, вот правильный ответ на твой вопрос:
Я изучил основы но не понимаю в чем дело
 

Andrinall

Известный
678
531
Я изучил основы но не понимаю в чем дело
Слабо верится в эти слова, особенно после того, как в коде есть попытка вызвать обработчики событий как простые функции.
1639581642178.png
 

Shepard

Активный
459
88
  • Ха-ха
Реакции: Andrinall

Maxim_Wayner

Активный
Автор темы
102
44
Блять, мне через молитву луа учить?

Мда:
script_author('maxim wayner')
script_name('Parser Number')
script_version('bomg ver')
local

function main()
    if not isSampfuncsLoaded() or not isSampLoaded() then return end
    while not isSampAvailable() do wait(100) end
    repeat wait(0) until isSampAvailable()
    sampRegisterChatCommand('pars', pars)
    while true do
      wait(0)
   end
end

function pars(arg)
    local event = require "lib.samp.events"
    text, prefix, color, pcolor = sampGetChatString(99)
    if text:find('%w+_%w+%[%d+%]') then
        obav = text:find()
        local directIni = "Obava\\ObavaInf.ini"
        local def = {
            info = {
                obav(text)
            },
        }
        if not doesFileExist('moonloader/config/Obava/ObavaInf.ini') then inicfg.save(def, directIni) end
        sampAddChatMessage('Обьявление спарсено!'..number, -1)
    end
end
Изменил код, только все равно что-то не то.
 

Andrinall

Известный
678
531
Изменил код, только все равно что-то не то.
Lua:
script_author('maxim wayner')
script_name('Parser Number')
script_version('bomg ver')
local -- это зачем?

function main()
    if not isSampfuncsLoaded() or not isSampLoaded() then return end -- Здесь нужно циклом ждать загрузку сампа, иначе скрипт просто выходит из мейна и завершает работу
    while not isSampAvailable() do wait(100) end -- >>
    repeat wait(0) until isSampAvailable() -- а зачем 2 строки подряд одинаковые проверки?
    sampRegisterChatCommand('pars', pars)
    while true do -- ты не используешь беск.цикл, вместо него можно просто вставить wait(-1), вместо конструкции while true do wait(0) end
      wait(0)
   end
end

function pars(arg)
    local event = require "lib.samp.events" -- зачем тебе здесь это?
    text, prefix, color, pcolor = sampGetChatString(99)
    if text:find('%w+_%w+%[%d+%]') then
        obav = text:find() -- из строки значения получаются через string.match(str, pattern, ...)
        local directIni = "Obava\\ObavaInf.ini"
        local def = {
            info = {
                obav(text) -- а как ты из text:find() получил функцию?
            },
        }
        if not doesFileExist('moonloader/config/Obava/ObavaInf.ini') then inicfg.save(def, directIni) end -- если файл есть у тебя нифига не сохранится
        sampAddChatMessage('Обьявление спарсено!'..number, -1)
    end
end
 

Maxim_Wayner

Активный
Автор темы
102
44
Lua:
script_author('maxim wayner')
script_name('Parser Number')
script_version('bomg ver')
local -- это зачем?

function main()
    if not isSampfuncsLoaded() or not isSampLoaded() then return end -- Здесь нужно циклом ждать загрузку сампа, иначе скрипт просто выходит из мейна и завершает работу
    while not isSampAvailable() do wait(100) end -- >>
    repeat wait(0) until isSampAvailable() -- а зачем 2 строки подряд одинаковые проверки?
    sampRegisterChatCommand('pars', pars)
    while true do -- ты не используешь беск.цикл, вместо него можно просто вставить wait(-1), вместо конструкции while true do wait(0) end
      wait(0)
   end
end

function pars(arg)
    local event = require "lib.samp.events" -- зачем тебе здесь это?
    text, prefix, color, pcolor = sampGetChatString(99)
    if text:find('%w+_%w+%[%d+%]') then
        obav = text:find() -- из строки значения получаются через string.match(str, pattern, ...)
        local directIni = "Obava\\ObavaInf.ini"
        local def = {
            info = {
                obav(text) -- а как ты из text:find() получил функцию?
            },
        }
        if not doesFileExist('moonloader/config/Obava/ObavaInf.ini') then inicfg.save(def, directIni) end -- если файл есть у тебя нифига не сохранится
        sampAddChatMessage('Обьявление спарсено!'..number, -1)
    end
end
С 27 строки если нету файла ObavaInf.ini он создает его самостоятельно,
насчет 7, 8, 9 , 11, 17, 20, 24 ты абсолютно прав, но в строке 20 и 24 я не понимаю как назначить text:find функцей, он должен парсить полностю обьявление.
Спасибо:
script_author('maxim wayner')
script_name('Parser Number')
script_version('bomg ver')


function main()
    repeat wait(0) until isSampAvailable()
    sampRegisterChatCommand('pars', pars)
    while true do
      wait(0)
   end
end

function pars(arg)
    text, prefix, color, pcolor = sampGetChatString(99)
    if text:find('%w+_%w+%[%d+%]') then
        obav = string.match(text,'%w+_%w+%[%d+%]' )
        local directIni = "Obava\\ObavaInf.ini"
        local def = {
            info = {
                obav(text)
            },
        }
        if not doesFileExist('moonloader/config/Obava/ObavaInf.ini') then inicfg.save(def, directIni) end
        sampAddChatMessage('Обьявление спарсено!'..number, -1)
    end
end