Неудачная попытка реализации с string.format()

Scra1chy

Известный
Автор темы
36
2
Привет. На сервере есть команда /su (id) (stars) (reason), например: /su 1 3 test. Сейчас при вводе команды и параметров либо ничего не происходит, либо скрипт уходит в ошибку.
Как сделать что бы оно работало?
p.s извиняюсь за такое быдло описание и код)

Lua:
function cmdSu(id, stars, reason)
    lua_thread.create(function()
        sampSendChat(string.format("/su %d %d %s", id, stars, reason))
        print(string.format("/su %d %d %s", id, stars, reason))
        -----------------------------------------------
        --sampSendChat(string.format("/su %d %d %s") id, stars, reason)
        --print(string.format("/su %d %d %s") id, stars, reason)
        ----------------------
        --sampSendChat("/su ", id, stars, reason)
        --sampSendChat(string.format("/su " .. '%id' .. stars .. reason))
        --print(string.format("/su " .. '%id' .. stars .. reason))
        wait(1000)
        sampSendChat("текст")
    end)
end


Код:
[ML] (error) Police Helper | Remake: ...Scratchy\Desktop\GTA SA LUA\moonloader\Police_Helper.lua:142: bad argument #2 to 'format' (number expected, got nil)
stack traceback:
    [C]: in function 'format'
    ...Scratchy\Desktop\GTA SA LUA\moonloader\Police_Helper.lua:142: in function <...Scratchy\Desktop\GTA SA LUA\moonloader\Police_Helper.lua:141>
stack traceback:
    [C]: in function 'create'
    ...Scratchy\Desktop\GTA SA LUA\moonloader\Police_Helper.lua:141: in function <...Scratchy\Desktop\GTA SA LUA\moonloader\Police_Helper.lua:140>
[ML] (error) Police Helper | Remake: Script died due to an error. (162417C4)
 
Последнее редактирование:

Scra1chy

Известный
Автор темы
36
2
Что ты пытаешься сделать? Нужно понимать, что ты хочешь сделать, а что - нет
Я пытаюсь сделать что бы после ввода команды, она сработала на сервере и пошли дальнейшие действия.
Если сделать просто sampSendChat("/su " .. id .. stars .. reason), получается ерунда в плане отсутствия пробелов между аргументами(
 

James Hawk

Известный
919
218
Я пытаюсь сделать что бы после ввода команды, она сработала на сервере и пошли дальнейшие действия.
Если сделать просто sampSendChat("/su " .. id .. stars .. reason), получается ерунда в плане отсутствия пробелов между аргументами(
Lua:
sampSendChat("/su "..id.." "..stars.." "..reason)
 

Scra1chy

Известный
Автор темы
36
2
Lua:
sampSendChat("/su "..id.." "..stars.." "..reason)
Пробовал, такая же ошибка...

Код:
[ML] (error) Police Helper | Remake: ...Scratchy\Desktop\GTA SA LUA\moonloader\Police_Helper.lua:142: attempt to concatenate upvalue 'reason' (a nil value)
stack traceback:
    ...Scratchy\Desktop\GTA SA LUA\moonloader\Police_Helper.lua: in function <...Scratchy\Desktop\GTA SA LUA\moonloader\Police_Helper.lua:141>
stack traceback:
    [C]: in function 'create'
    ...Scratchy\Desktop\GTA SA LUA\moonloader\Police_Helper.lua:141: in function <...Scratchy\Desktop\GTA SA LUA\moonloader\Police_Helper.lua:140>
[ML] (error) Police Helper | Remake: Script died due to an error. (0F2B729C)
 

James Hawk

Известный
919
218
Пробовал, такая же ошибка...

Код:
[ML] (error) Police Helper | Remake: ...Scratchy\Desktop\GTA SA LUA\moonloader\Police_Helper.lua:142: attempt to concatenate upvalue 'reason' (a nil value)
stack traceback:
    ...Scratchy\Desktop\GTA SA LUA\moonloader\Police_Helper.lua: in function <...Scratchy\Desktop\GTA SA LUA\moonloader\Police_Helper.lua:141>
stack traceback:
    [C]: in function 'create'
    ...Scratchy\Desktop\GTA SA LUA\moonloader\Police_Helper.lua:141: in function <...Scratchy\Desktop\GTA SA LUA\moonloader\Police_Helper.lua:140>
[ML] (error) Police Helper | Remake: Script died due to an error. (0F2B729C)
пустая перменная reason
 

r4nx

Известный
Друг
201
265
Если ты регистрируешь эту функцию как обработчик команды, то это не так работает. В функцию передаётся только один аргумент - текст, который идёт после команды, допустим назови его params. Тебе нужно разбить его по пробелам. Вот функция готовая.
 

Scra1chy

Известный
Автор темы
36
2
пустая перменная reason
И как это можно исправить? Увы, я не очень понимаю что он от меня хочет... Все эти параметры я указываю при вводе...

h7wRSbF
Синтаксис команды сервера.

Так-же пробовал просто выводить в консоль, пишет такое:

Lua:
[ML] (error) Police Helper | Remake: ...Scratchy\Desktop\GTA SA LUA\moonloader\Police_Helper.lua:142: attempt to concatenate upvalue 'reason' (a nil value)
stack traceback:
    ...Scratchy\Desktop\GTA SA LUA\moonloader\Police_Helper.lua: in function <...Scratchy\Desktop\GTA SA LUA\moonloader\Police_Helper.lua:141>
stack traceback:
    [C]: in function 'create'
    ...Scratchy\Desktop\GTA SA LUA\moonloader\Police_Helper.lua:141: in function <...Scratchy\Desktop\GTA SA LUA\moonloader\Police_Helper.lua:140>
[ML] (error) Police Helper | Remake: Script died due to an error. (16235EE4)

Если ты регистрируешь эту функцию как обработчик команды, то это не так работает. В функцию передаётся только один аргумент - текст, который идёт после команды, допустим назови его params. Тебе нужно разбить его по пробелам. Вот функция готовая.
Было подозрение то что все значения что я вношу, относятся к одной переменной. На скрипте в AHK это реализовано через RegExMatch(или как-то так), но тут я не знаю аналога(
 

r4nx

Известный
Друг
201
265
И как это можно исправить? Увы, я не очень понимаю что он от меня хочет... Все эти параметры я указываю при вводе...

h7wRSbF
Синтаксис команды сервера.

Так-же пробовал просто выводить в консоль, пишет такое:

Lua:
[ML] (error) Police Helper | Remake: ...Scratchy\Desktop\GTA SA LUA\moonloader\Police_Helper.lua:142: attempt to concatenate upvalue 'reason' (a nil value)
stack traceback:
    ...Scratchy\Desktop\GTA SA LUA\moonloader\Police_Helper.lua: in function <...Scratchy\Desktop\GTA SA LUA\moonloader\Police_Helper.lua:141>
stack traceback:
    [C]: in function 'create'
    ...Scratchy\Desktop\GTA SA LUA\moonloader\Police_Helper.lua:141: in function <...Scratchy\Desktop\GTA SA LUA\moonloader\Police_Helper.lua:140>
[ML] (error) Police Helper | Remake: Script died due to an error. (16235EE4)


Было подозрение то что все значения что я вношу, относятся к одной переменной. На скрипте в AHK это реализовано через RegExMatch(или как-то так), но тут я не знаю аналога(
Ну вот используй функцию, что я скинул. В твоем случае будет так:
Lua:
local id, stars, reason = unpack(split(params, ' '))
 

Scra1chy

Известный
Автор темы
36
2
Ну вот используй функцию, что я скинул. В твоем случае будет так:

Lua:
function cmdSu(id, stars, reason)
    lua_thread.create(function()
        local id, stars, reason = unpack(split(params, ' '))
        print("/su "..id.." "..stars.." "..reason)
        wait(1000)
        sampSendChat("текст")
    end)
end
Lua:
local id, stars, reason = unpack(split(params, ' '))
Код получился таким, увы всё так-же :(




Lua:
[ML] (error) Police Helper | Remake: ...Scratchy\Desktop\GTA SA LUA\moonloader\Police_Helper.lua:142: attempt to call global 'split' (a nil value)
stack traceback:
    ...Scratchy\Desktop\GTA SA LUA\moonloader\Police_Helper.lua: in function <...Scratchy\Desktop\GTA SA LUA\moonloader\Police_Helper.lua:141>
stack traceback:
    [C]: in function 'create'
    ...Scratchy\Desktop\GTA SA LUA\moonloader\Police_Helper.lua:141: in function <...Scratchy\Desktop\GTA SA LUA\moonloader\Police_Helper.lua:140>
[ML] (error) Police Helper | Remake: Script died due to an error. (15D462D4)
 

r4nx

Известный
Друг
201
265
Код получился таким, увы всё так-же :(




Lua:
[ML] (error) Police Helper | Remake: ...Scratchy\Desktop\GTA SA LUA\moonloader\Police_Helper.lua:142: attempt to call global 'split' (a nil value)
stack traceback:
    ...Scratchy\Desktop\GTA SA LUA\moonloader\Police_Helper.lua: in function <...Scratchy\Desktop\GTA SA LUA\moonloader\Police_Helper.lua:141>
stack traceback:
    [C]: in function 'create'
    ...Scratchy\Desktop\GTA SA LUA\moonloader\Police_Helper.lua:141: in function <...Scratchy\Desktop\GTA SA LUA\moonloader\Police_Helper.lua:140>
[ML] (error) Police Helper | Remake: Script died due to an error. (15D462D4)
Так может ты вставишь функцию саму? xd
 

Scra1chy

Известный
Автор темы
36
2
Так может ты вставишь функцию саму? xd
В смысле:?)

Так может ты вставишь функцию саму? xd
Я её вставил сюда, только как то криво встала), в ответе выше.


Lua:
function cmdSu(id, stars, reason)
    lua_thread.create(function()
        local id, stars, reason = unpack(split(params, ' '))
        print("/su "..id.." "..stars.." "..reason)
        wait(1000)
        sampSendChat("текст")
    end)
end
 

James Hawk

Известный
919
218
В смысле:?)


Я её вставил сюда, только как то криво встала), в ответе выше.


Lua:
function cmdSu(id, stars, reason)
    lua_thread.create(function()
        local id, stars, reason = unpack(split(params, ' '))
        print("/su "..id.." "..stars.." "..reason)
        wait(1000)
        sampSendChat("текст")
    end)
end
Lua:
function cmdSu(params)
    lua_thread.create(function()
        local id, stars, reason = unpack(split(params, ' '))
        print("/su "..id.." "..stars.." "..reason)
        wait(1000)
        sampSendChat("текст")
    end)
end

Код получился таким, увы всё так-же :(




Lua:
[ML] (error) Police Helper | Remake: ...Scratchy\Desktop\GTA SA LUA\moonloader\Police_Helper.lua:142: attempt to call global 'split' (a nil value)
stack traceback:
    ...Scratchy\Desktop\GTA SA LUA\moonloader\Police_Helper.lua: in function <...Scratchy\Desktop\GTA SA LUA\moonloader\Police_Helper.lua:141>
stack traceback:
    [C]: in function 'create'
    ...Scratchy\Desktop\GTA SA LUA\moonloader\Police_Helper.lua:141: in function <...Scratchy\Desktop\GTA SA LUA\moonloader\Police_Helper.lua:140>
[ML] (error) Police Helper | Remake: Script died due to an error. (15D462D4)
Вот объяснял человек структуру, но ты невнимательно читал или не понял
Если ты регистрируешь эту функцию как обработчик команды, то это не так работает. В функцию передаётся только один аргумент - текст, который идёт после команды, допустим назови его params. Тебе нужно разбить его по пробелам. Вот функция готовая.
 

Scra1chy

Известный
Автор темы
36
2
Lua:
function cmdSu(params)
    lua_thread.create(function()
        local id, stars, reason = unpack(split(params, ' '))
        print("/su "..id.." "..stars.." "..reason)
        wait(1000)
        sampSendChat("текст")
    end)
end


Вот объяснял человек структуру, но ты невнимательно читал или не понял
Я всего лишь котик, у меня лапки :D

Lua:
function cmdSu(params)
    lua_thread.create(function()
        local id, stars, reason = unpack(split(params, ' '))
        print("/su "..id.." "..stars.." "..reason)
        wait(1000)
        sampSendChat("текст")
    end)
end


Вот объяснял человек структуру, но ты невнимательно читал или не понял
Я не такой мега-скриптер что бы разобраться во всём этом(

Lua:
function split(str, delim, plain)
    local tokens, pos, plain = {}, 1, not (plain == false) --[[ delimiter is plain text by default ]]
    repeat
        local npos, epos = string.find(str, delim, pos, plain)
        table.insert(tokens, string.sub(str, pos, npos and npos - 1))
        pos = epos and epos + 1
    until not pos
    return tokens
end
 

James Hawk

Известный
919
218
Я всего лишь котик, у меня лапки :D


Я не такой мега-скриптер что бы разобраться во всём этом(

Lua:
function split(str, delim, plain)
    local tokens, pos, plain = {}, 1, not (plain == false) --[[ delimiter is plain text by default ]]
    repeat
        local npos, epos = string.find(str, delim, pos, plain)
        table.insert(tokens, string.sub(str, pos, npos and npos - 1))
        pos = epos and epos + 1
    until not pos
    return tokens
end
Речь шла об аргументах в функции, а не о том примере