Ошибка в LUA скрипте

Дмитрий Кондаков

Новичок
Автор темы
15
1
Вообщем, решил сделать скрипт, для Trinity RP. Он заменяет стандартное сообщение, например: "Ivan_Ivanov сказал: Текст" на "- Ivan_Ivanov[1] говорит: Текст.
Скопировал код с инета, дописал недостающий текст, но при заходе в игру в консоли выдаёт ошибку:
attempt to index global 'text' (a nil value)
stack traceback:
in main chunk
Помогите решить проблему, вот код скрипта:

local sampev = require 'lib.samp.events'
function sampev.onServerMessage(color, text)
return {"Текст"}
end
local nick, id, message = text:match("%- ({.-}.+)%[(%d+)%]{.-}: (.+)")
if nick and id and message then
return {string.format("- %s[%d]{ffffff} говорит: %s", nick, id, message)}
end
 

Дмитрий Кондаков

Новичок
Автор темы
15
1
Lua:
local sampev = require 'lib.samp.events'

function sampev.onServerMessage(color, text)
    if not text then
        return {"Текст"}
    end

    local nick, id, message = text:match("%- ({.-}.+)%[(%d+)%]{.-}: (.+)")
    if nick and id and message then
        return {string.format("- %s[%d]{ffffff} говорит: %s", nick, id, message)}
    else
        return {"Текст"}
    end
end
in function 'assert'
...lear GTA SAMP low PC\moonloader\lib\samp\events\core.lua:88: in function <...lear GTA SAMP low PC\moonloader\lib\samp\events\core.lua:53>

in function 'assert'
...lear GTA SAMP low PC\moonloader\lib\samp\events\core.lua:88: in function <...lear GTA SAMP low PC\moonloader\lib\samp\events\core.lua:53>
ошибка
 

wojciech?

Известный
Проверенный
366
246
in function 'assert'
...lear GTA SAMP low PC\moonloader\lib\samp\events\core.lua:88: in function <...lear GTA SAMP low PC\moonloader\lib\samp\events\core.lua:53>


ошибка
событие работает с 2 аргументами, ты возвращаешь лишь один, решение:
Lua:
return { color, text } -- или вместо text это string.format("- %s[%d]{ffffff} говорит: %s", nick, id, message)

и это абсолютно бесполезная проверка, она никогда не выполнится
Lua:
if not text then
    return {"Текст"}
end
 

Дмитрий Кондаков

Новичок
Автор темы
15
1
событие работает с 2 аргументами, ты возвращаешь лишь один, решение:
Lua:
return { color, text } -- или вместо text это string.format("- %s[%d]{ffffff} говорит: %s", nick, id, message)

и это абсолютно бесполезная проверка, она никогда не выполнится
Lua:
if not text then
    return {"Текст"}
end
исправленный код можешь кинуть, я удаляю появляется таже ошибка
 

wojciech?

Известный
Проверенный
366
246
исправленный код можешь кинуть, я удаляю появляется таже ошибка
Lua:
local sampev = require 'lib.samp.events'

function sampev.onServerMessage(color, text)
    local nick, id, message = text:match("%- ({.-}.+)%[(%d+)%]{.-}: (.+)")
    if nick and id and message then
        return { color, string.format("- %s[%d]{ffffff} говорит: %s", nick, id, message) }
    end
end
 
  • Влюблен
Реакции: qdIbp

Дмитрий Кондаков

Новичок
Автор темы
15
1
Lua:
local sampev = require 'lib.samp.events'

function sampev.onServerMessage(color, text)
    local nick, id, message = text:match("%- ({.-}.+)%[(%d+)%]{.-}: (.+)")
    if nick and id and message then
        return { color, string.format("- %s[%d]{ffffff} говорит: %s", nick, id, message) }
    end
end
ошибок нет, но не работает

ошибок нет, но не работает
пишет точно также: Ben_Takana сказал:

ошибок нет, но не работает


пишет точно также: Ben_Takana сказал:
А мне нужно: - Ben_Takana[1] говорит: Прива
Например

ошибок нет, но не работает


пишет точно также: Ben_Takana сказал:


А мне нужно: - Ben_Takana[1] говорит: Прива
Например
хелп плиз помогите так сделать
 
Последнее редактирование:

kyrtion

Известный
1,055
380
хелп плиз помогите так сделать
Ты не даешь исходные данные что сервер тебе дало для чата
К примеру
Код:
OnServerMessage: Color[12582911] Text"Mikhail_Kyrtion крикнул: asd"
OnServerMessage: Color[885597439] Text"Mikhail_Kyrtion сказал: фыв"

Ладно, я тебе скину мини-скрипт
Lua:
local sampev = require('samp.events')
local sf = string.format

function main()
    repeat wait(0) until isSampAvailable()
    print('script loaded')
    wait(-1)
end

function sampGetPlayerIdByNickname(nickname)
    for playerId = 0, sampGetMaxPlayerId(false) do
        if sampIsPlayerConnected(playerId) then
            local playerNickname = sampGetPlayerNickname(playerId)
            if playerNickname and playerNickname == nickname then
                return playerId
            end
        end
    end
    return nil
end

-- OnServerMessage: Color[885597439] Text[Mikhail_Kyrtion сказал: тест просто тест]
function sampev.onServerMessage(color, text)
    text = text:gsub('{%x%x%x%x%x%x}', '')

    if text:find('^%S+ сказал: .*$') then
        local nickname, message = text:match('^(%S+) сказал: (.*)$')
        local playerId = sampGetPlayerIdByNickname(nickname)
        local fmt = sf('- %s[%d]: %s', nickname, playerId, message)
        -- "- Mikhail_Kyrtion[123]: тест просто тест"
        return { color, fmt }
    end
end
 

Дмитрий Кондаков

Новичок
Автор темы
15
1
заработало, но всё равно не пашет
sa-mp-208.png


заработало, но всё равно не пашет
sa-mp-208.png
скиньте рил кто нибудь, чтобы было примерно вот так

заработало, но всё равно не пашет
sa-mp-208.png



скиньте рил кто нибудь, чтобы было примерно вот так
чтобы как то так было, для тринити делаю
sa-mp-209.png
 
Последнее редактирование:

kyrtion

Известный
1,055
380
Так смотри что пишет скрипт в SAMPFUNCS, скрипт завершил ли работу.
Если не поймешь как работает, скорее всего ты не разбираешься как создавать скрипты и не изучал

чтобы как то так было, для тринити делаюПосмотреть вложение 261613
В тринити по другому делается, на сервере в чате такое отправится:
Код:
Mikhail_Kyrtion крикнул: asd
Mikhail_Kyrtion сказал: фыв

Я понял что ты хочешь модифицировать чата. но для жалобы оно не годится, оценивают как подделка чата и отклонят, но может быть и тебя забанят за такой чат

Или может быть наоборот? "Сделать такой стиль чат как в Тринити РП?" я так понимаю?
 
Последнее редактирование:

Дмитрий Кондаков

Новичок
Автор темы
15
1
Так смотри что пишет скрипт в SAMPFUNCS, скрипт завершил ли работу.
Если не поймешь как работает, скорее всего ты не разбираешься как создавать скрипты и не изучал


В тринити по другому делается, на сервере в чате такое отправится:
Код:
Mikhail_Kyrtion крикнул: asd
Mikhail_Kyrtion сказал: фыв

Я понял что ты хочешь модифицировать чата. но для жалобы оно не годится, оценивают как подделка чата и отклонят, но может быть и тебя забанят за такой чат

Или может быть наоборот? "Сделать такой стиль чат как в Тринити РП?" я так понимаю?
на мой 2 скрин глянь, наоборот. сделать чтобы вот так как я на 2 скрине показал, это с ревента. мне просто нужно чтобы любое сообщение от игроков было вот так
просто в таком формате - nick[id] говорит:
 

Дмитрий Кондаков

Новичок
Автор темы
15
1
Последнее редактирование:

SNAPE

Участник
80
3
Lua:
function main()
    repeat wait(0) until isSampAvailable()

    sampRegisterChatCommand('chatformat', toggleChatFormat)
end

local isCustomFormatEnabled = false

function toggleChatFormat()
    isCustomFormatEnabled = not isCustomFormatEnabled
    sampAddChatMessage(isCustomFormatEnabled and "Формат чата изменён." or "Формат чата отключён.", -1)
end

function onServerMessage(color, text)
    if isCustomFormatEnabled then
        local newText = text:gsub("^(%S+_%S+)%sсказал:%s(.+)", "- %1 говорит: %2")
        if newText ~= text then
            return false, color, newText
        end
    end
end
Команда /chatformat включает/выключает