Хелп с регуляркой

mafia dumaet

Известный
Автор темы
13
2
Версия MoonLoader
Другое
Пишу скрипт который будет телепортировать игрока из виртуального мира в нормальный.
Инфа берётся из /getpos , далее через адм команду /plpos телепортирует по тем же координатам, но уже в нормальный мир. Но почему-то не работает, в чём ошибка?
Lua:
require 'lib.moonloader'
local samp = require 'lib.samp.events'

function samp.onServerMessage(color, text)
    local playerId, x, y, z = _t:match(text, "^Ivan_Ivanov%[ID: %d+%] %| ([%-]?%d+%.?%d*), ([%-]?%d+%.?%d*), ([%-]?%d+%.?%d*),")
    if playerId then
        sampSendChat("/plpos " .. playerId .. " " .. x .. " " .. y .. " " .. z .. " 0 0")
    end
end
 

mafia dumaet

Известный
Автор темы
13
2
отправил бы хотя бы саму строчку
из того, что тут есть: %[ID: %d+% не извлекаешь сам ид, нужно обернуть в скобки (%d+) и мб в конце запятая лишняя, не знаю
Ivan_Ivanov[ID: 531] | 21.94, 27.26, 995.87, 0.00 | State: 1, Int: 7, Vw: 777, VehicleID: 0
93Qkzzv.png


Скрипт умирает ещё после ввода кмд
[14:03:08.400830] (error) autovw.lua: ...Arizona Games Launcher\bin\arizona\moonloader\autovw.lua:5: attempt to index global '_t' (a nil value)
stack traceback:
...Arizona Games Launcher\bin\arizona\moonloader\autovw.lua:5: in function 'callback'
...Launcher\bin\arizona\moonloader\lib\samp\events\core.lua:79: in function <...Launcher\bin\arizona\moonloader\lib\samp\events\core.lua:53>
[14:03:08.404843] (error) autovw.lua: Script died due to an error. (9822F184)
 

wojciech?

Известный
Проверенный
366
245
Ivan_Ivanov[ID: 531] | 21.94, 27.26, 995.87, 0.00 | State: 1, Int: 7, Vw: 777, VehicleID: 0
93Qkzzv.png


Скрипт умирает ещё после ввода кмд
Lua:
local samp = require 'lib.samp.events'

function samp.onServerMessage(color, text)
    local id, x, y, z = text:match("[%w_]+%[ID: (%d+)%] | (-?[%d+%.]+), (-?[%d+%.]+), (-?[%d+%.]+)")
    if id then
        sampSendChat(("/plpos %s %s %s %s 0 0"):format(id, x, y, z)) 
    end
end
 
  • Влюблен
Реакции: mafia dumaet

mafia dumaet

Известный
Автор темы
13
2
Спасибо большое, вопрос только назревает, у себя я прям насрал в строчке, а у тебя красиво и сокращённо, что конкретно у меня было лишнее, и почему скрипт умирал?
Понять бы принцип на будущее
 

wojciech?

Известный
Проверенный
366
245
Спасибо большое, вопрос только назревает, у себя я прям насрал в строчке, а у тебя красиво и сокращённо, что конкретно у меня было лишнее, и почему скрипт умирал?
Понять бы принцип на будущее
скрипт умирал из-за этого: _t:match(text, ..., _t неопределенная переменная

да и на будущее синтаксис методов имеет такой формат:
Lua:
-- str переменная типа string
string.match(str, "pattern")
str:match("pattern") -- аналогичный первому, но метод вызывается из метатаблицы типа string

твой шаблон тоже работал, но ты не извлекал id (для извлечения нужно явно это указать скобками) и не сделал шаблон для ника (т.е. он бы работал только на одном игроке)
Lua:
local str = "Ivan_Ivanov[ID: 531] | -21.94, 27.26, 995.87, 0.00 | State: 1, Int: 7, Vw: 777, VehicleID: 0"
print(str:match("^Ivan_Ivanov%[ID: %d+%] %| ([%-]?%d+%.?%d*), ([%-]?%d+%.?%d*), ([%-]?%d+%.?%d*),"))
-- -21.94    27.26    995.87
 
  • Влюблен
Реакции: mafia dumaet