Вытаскивание текста

William_Chkhalo

Участник
Автор темы
125
14
Версия MoonLoader
Другое
Всем привет. Есть такой код.
Lua:
function main()
    while not isSampAvailable() do wait(0) end
    while true do
        wait(0)
        if text:find('[%d+:%d+:%d+]') then
            time = '[%d+:%d+:%d+]'
            local text = text:match(time'%W')
sampAddChatMessage(text, -1)
        end
    end
end
Тут я пытаюсь достать то, что находится после времени в чате(оно высвечивается так:[12:32:35]. Это пример если что). Но, у меняв логах ошибка
Код:
attempt to index global 'text' (a nil value)
Скажите пожалуйста, что я делаю не правильно?
 

William_Chkhalo

Участник
Автор темы
125
14
Решил уже, спасибо за помощь.

Кхм, баг. Вот весь код.
Код:
samp = require "samp.events"

local file = io.open("chat_log.txt", "a")

function saveChatText(text)
    file:write(os.date("%Y-%m-%d %H:%M:%S") .. ": " .. text .. "\n")
    file:flush()  -- Очистка буфера, чтобы убедиться, что данные записаны на диск
end

function onServerMessage(text)
    if text then
        saveChatText(text)
    end
end

samp.onServerMessage = onServerMessage

-- Добавляем функцию для закрытия файла
function onClose()
    file:close()
end

samp.onExit = onClose  -- Вызываем onClose при выходе из игры

Когда я в игре перезапускаю скрипты, то все норм, но когда захожу, то в файл сохраняются какие-то числа, а текст из чата не сохраняется.
 
Последнее редактирование:

Hinаta

Известный
783
358
Решил уже, спасибо за помощь.

Кхм, баг. Вот весь код.
Код:
samp = require "samp.events"

local file = io.open("chat_log.txt", "a")

function saveChatText(text)
    file:write(os.date("%Y-%m-%d %H:%M:%S") .. ": " .. text .. "\n")
    file:flush()  -- Очистка буфера, чтобы убедиться, что данные записаны на диск
end

function onServerMessage(text)
    if text then
        saveChatText(text)
    end
end

samp.onServerMessage = onServerMessage

-- Добавляем функцию для закрытия файла
function onClose()
    file:close()
end

samp.onExit = onClose  -- Вызываем onClose при выходе из игры

Когда я в игре перезапускаю скрипты, то все норм, но когда захожу, то в файл сохраняются какие-то числа, а текст из чата не сохраняется.
скинь свой файл
 

MrDorlik

Известный
970
393
Решил уже, спасибо за помощь.

Кхм, баг. Вот весь код.
Код:
samp = require "samp.events"

local file = io.open("chat_log.txt", "a")

function saveChatText(text)
    file:write(os.date("%Y-%m-%d %H:%M:%S") .. ": " .. text .. "\n")
    file:flush()  -- Очистка буфера, чтобы убедиться, что данные записаны на диск
end

function onServerMessage(text)
    if text then
        saveChatText(text)
    end
end

samp.onServerMessage = onServerMessage

-- Добавляем функцию для закрытия файла
function onClose()
    file:close()
end

samp.onExit = onClose  -- Вызываем onClose при выходе из игры

Когда я в игре перезапускаю скрипты, то все норм, но когда захожу, то в файл сохраняются какие-то числа, а текст из чата не сохраняется.
как оно у тебя вообще могло работать, ты в text записываешь цвет сообщения а не текст
Lua:
function onServerMessage(color, text)
    if text then
        saveChatText(text)
    end
end
INCOMING_RPCS[RPC.CLIENTMESSAGE] = {'onServerMessage', {color = 'int32'}, {text = 'string32'}}
да и я хз зачем проверять text на nil, но пусть будет
 

tfornik

Известный
318
232
Lua:
local encoding = require "encoding"
encoding.default = 'CP1251'
u8 = encoding.UTF8

function saveChat(text)
    file = io.open("chat_log.txt", "a")
    file:write(string.format("[%s] %s\n", os.date("%H:%M:%S"), u8(text)))
    file:close()
end

addEventHandler("onReceiveRpc", function(id,bs)
    if id == 93 then
        local color = raknetBitStreamReadInt32(bs)
        local len = raknetBitStreamReadInt32(bs)
        local text = raknetBitStreamReadString(bs, len)
        saveChat(text)
    end
end)