как создать много аргументов

Fasmin

Участник
Автор темы
112
2
Версия MoonLoader
.026-beta
Допустим:
Lua:
function test(arg)
    var = string.match(arg, "(.+)")
    if var == nil or var == "" then
        --error
    else
        sampAddChatMessage(var, -1)
    end
end
То есть если такой код сделать, то могу написать одно слово слитно, а надо, чтобы я мог писать целое предложение, просто не работает с пробелами

Я знаю, что можно сделать так
var,var2,var3,var4,var5 = strting.match(arg, (.+) (.+) (.+) (.+) (.+))
но это бред какой то так делать
 

Fasmin

Участник
Автор темы
112
2
у меня не работает это
мне надо чтобы в sampAddChatMessage(arg, -1) был, а не arg[1], arg[2], arg[3]
 

tiktokpay

Участник
84
81
у меня не работает это
мне надо чтобы в sampAddChatMessage(arg, -1) был, а не arg[1], arg[2], arg[3]
Странные запросы, чем тебе таблица не угодила? Но если нужны именно явные переменные, попробуй так
Lua:
function split_global(str, delim, variable)
    local tokens, pos = {}, 1
    repeat
        local npos, epos = string.find(str, delim, pos, false)
        table.insert(tokens, string.sub(str, pos, npos and npos - 1))
        pos = epos and epos + 1
    until not pos
    for i = 1, #tokens do
        _G[variable..i] = tokens[i]
    end
end

variable в функции split_global - это название переменных которые ты хочешь получить.
Важно! Вызов этой функции создаёт глобальные переменные в количестве, полученное через предыдущую разделительную функцию. В общем ниже пример использования

Lua:
function main()
    repeat wait(0) until isSampAvailable()
    sampRegisterChatCommand('bhtest', bhtest_func)
    wait(-1)
end

function bhtest_func(arg)
    split_global(arg, '%s+', 'var') -- после вызова функции у тебя будут глобальные переменные var1, var2, var3 и тд
    sampAddChatMessage(var4, -1)
end

function split_global(str, delim, variable)
    local tokens, pos = {}, 1
    repeat
        local npos, epos = string.find(str, delim, pos, false)
        table.insert(tokens, string.sub(str, pos, npos and npos - 1))
        pos = epos and epos + 1
    until not pos
    for i = 1, #tokens do
        _G[variable..i] = tokens[i]
    end
end
 
Последнее редактирование:

Adrian G.

Известный
Проверенный
521
453
Оно?
01.16.47.234.jpg

Lua:
function cmd(arg)
    for многоаргументов in arg:gmatch('[.%S]+') do
        sampAddChatMessage(многоаргументов, -1)
    end
end
 
  • Нравится
Реакции: MLycoris

Fasmin

Участник
Автор темы
112
2
Вообщем вот код весь
Lua:
require('lib.moonloader')
req = require("requests")
enc = require("encoding")
enc.default = "CP1251"
u8 = enc.UTF8

token = "здесь токен"

function main()
    while not isSampAvailable() do wait(5000) end
    sampRegisterChatCommand("vk", vk_command)
    wait(-1)
end

function vk_command(arg)
    var = string.match(arg, ".+")
    if var == nil or var == "" then
        sampAddChatMessage("Пустая строка!", 0xFF0000)
    else
        req.get(u8("https://api.vk.com/method/messages.send?user_id=321436796&random_id=0&message="..var.."&access_token="..token.."&v=5.131"))
    end
end

когда я пишу /vk привет
это отправляется нормально, но когда я пишу /vk привет как дела
ТО оно не отправляется, потому что с пробелами

Помогите кто знает
 
Последнее редактирование:

tiktokpay

Участник
84
81
когда я пишу /vk привет
это отправляется нормально, но когда я пишу /vk привет как дела
ТО оно не отправляется, потому что с пробелами

Помогите кто знает
Попробуй так
Lua:
function vk_command(arg)
    var = string.gsub(arg, '%s', '+')
    if var == nil or var == "" then
        sampAddChatMessage("Пустая строка!", 0xFF0000)
    else
        req.get(u8("https://api.vk.com/method/messages.send?user_id=321436796&random_id=0&message="..var.."&access_token="..token.."&v=5.131"))
    end
end

И ставь свой вопрос корректно, то судя по названию темы, тебе нужны аргументы, сейчас вовсе другое.
 
Последнее редактирование:
  • Нравится
Реакции: cort

P U L V I L I Z A T O R

Участник
85
29
Вообщем вот код весь
Lua:
require('lib.moonloader')
req = require("requests")
enc = require("encoding")
enc.default = "CP1251"
u8 = enc.UTF8

token = "здесь токен"

function main()
    while not isSampAvailable() do wait(5000) end
    sampRegisterChatCommand("vk", vk_command)
    wait(-1)
end

function vk_command(arg)
    var = string.match(arg, ".+")
    if var == nil or var == "" then
        sampAddChatMessage("Пустая строка!", 0xFF0000)
    else
        req.get(u8("https://api.vk.com/method/messages.send?user_id=321436796&random_id=0&message="..var.."&access_token="..token.."&v=5.131"))
    end
end

когда я пишу /vk привет
это отправляется нормально, но когда я пишу /vk привет как дела
ТО оно не отправляется, потому что с пробелами

Помогите кто знает
Не мучайся https://github.com/golgote/neturl

Пример:
u = url.parse("http://www.example.com")
u.query.foo = "bar"
print(u)
-- http://www.example.com/?foo=bar

u:setQuery{ json = true, skip = 100 }
print(u)
-- http://www.example.com/?json=true&skip=100