Хук текста.

3211Marlon1123

Участник
Автор темы
130
12
Версия MoonLoader
.026-beta
123:
require 'lib.moonloader'

require 'lib.moonloader'

local hook = require 'lib.samp.events'

local main_color = 0xFFFFFF

nickname = 'Roman_Vorontsov'

forhome = '1$'

onhome = 0

function main()

    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end

    sampAddChatMessage('Крутой текст', main_color)

    sampRegisterChatCommand('idn', cmd_idn)

    while true do
        wait(0)
    end

end

function sampGetPlayerIdByNickname(nick)
  nick = tostring(nick)
  local _, myid = sampGetPlayerIdByCharHandle(PLAYER_PED)
  if nick == sampGetPlayerNickname(myid) then return myid end
  for i = 0, 1003 do
    if sampIsPlayerConnected(i) and sampGetPlayerNickname(i) == nick then
      return i
    end
  end
end

function cmd_idn()
    local idln = sampGetPlayerIdByNickname(nickname)
  if idln then
        sampAddChatMessage(nickname..'['..idln..']', -1)
    end
end

function hook.onServerMessage(color, text)
    if onhome == 0 then
        if color == 865730559 then
            idlnh = sampGetPlayerIdByNickname(nickname)
            if idlnh then
                if text:find(nickname .. '[' .. idlnh .. '] передал Вам ' .. forhome) then
                    sampAddChatMessage('123', main_color)
                end
            end
        end
    end
end


1629227101919.png


Суть скрипта и проблемы. Нужно хукнуть этот текст. В строке должно быть "Вы передали игроку", nickname(переменная в самом начале), idlnh(в хуке) и forhome(переменная в самом начале) и если это будет в строке, то напишется 123. Пример: nickname = 'Oleg_Lolov', forhome = '1$'. Если в строке будет: nickname[idlnh] передал Вам forhome (примерно такого формата должен быть текст) и значения совпадут с переменными - то вывод 123 в чат. Текст просто не хукается, сообщение не отправляется, не понимаю в чём проблема.
Цвет верный и прочек айди(потом нужен будет) рабочий, именно проблема в 53-55 строке.
 
Последнее редактирование:
Решение
Как ответили выше, символы ^$()%.[]*+-? не читаются, но заменять их на . неправильно. Чтобы данные символы читались нужно их экранировать.

Lua:
text:find(nickname .. '%[' .. idlnh .. '%] передал Вам ' .. forhome)

Snoopcheg

Известный
151
82
Как ответили выше, символы ^$()%.[]*+-? не читаются, но заменять их на . неправильно. Чтобы данные символы читались нужно их экранировать.

Lua:
text:find(nickname .. '%[' .. idlnh .. '%] передал Вам ' .. forhome)