sampev.OnSendCommand - конфликт в функции

w99zzl1

Участник
Автор темы
158
18
Версия MoonLoader
.026-beta
Привет. Я использую перенос строк (не вспомню автора уж...)


Lua:
function sampev.onSendCommand(msg)
    if bi then bi = false; return end
    local cmd, msg = msg:match("/(%S*) (.*)")
    if msg == nil then return end
    -- cmd = cmd:lower()

    --Рация, радио, ООС чат, шепот, крик (с поддержкой переноса ООС-скобок)
    for i, v in ipairs(commands) do if cmd == v then
        local length = msg:len()
        if msg:sub(1, 2) == "((" then
            msg = string.gsub(msg:sub(4), "%)%)", "")
            if length > 80 then divide(msg, "/" .. cmd .. " (( ", " ))"); return false end
        else
            if length > 80 then divide(msg, "/" .. cmd .. " ", ""); return false end
        end
    end end

    --РП команды
    if cmd == "me" or cmd == "do" then
        local length = msg:len()
        if length > 75 then divide(msg, "/" .. cmd .. " ", "", "ext"); return false end
    end

    --SMS
    if cmd == "sms" then
        local msg = "{}" .. msg
        local number, _msg = msg:match("{}(%d+) (.*)")
        local msg = msg:sub(3)
        if _msg == nil then -- если номер не указан, ищется ближайшее полученное/отправленное сообщение
            for i = 1, 99 do                     -- номер берется из него
                local test = sampGetChatString(i):match("SMS: .* | .*: (.*)")
                if test ~= nil then number = string.match(test, ".* %[.*%.(%d+)%]") end
            end
        else msg = _msg end
        if number == nil then return end
        local length = msg:len()

        -- long SMS
        if length > 66 then divide(msg, "/sms " .. number .. " ", "", "sms"); return false end

        -- short SMS
        if length < 66 then bi = true; sampSendChat("/sms " .. number .. " " .. msg); return false end
    end
end
Но я начал разрабатывать биндер, и хочу совместить эти функции. Пока что у меня обычный бинд на команду, типо: /бинд- sampSendChat(текст в биндере), но чтобы проверить, введена ли команда бинда, я использую это:

Lua:
function sampev.onSendCommand(msg)
    for _, bind in ipairs(bindList) do
        if bind.type == 0 and string.lower(msg) == string.lower(bind.trigger) then
            sampSendChat(bind.text)
            return false
        end
    end
end
Но если я просто так возьму и помещу новый код в старый (с переносом строк), то они будут конфликтовать, из за чего - не работать. Сам же блок (если вместо переноса строк поместить биндер) - работает. Помогите пожалуйста, как решить проблему. Может, можно использовать что то другое, что заменит этот sampev?
 
Решение
Lua:
function sampev.onSendCommand(msg)
    for _, bind in ipairs(bindList) do
        if bind.type == 0 and string.lower(msg) == string.lower(bind.trigger) then
            local bindCmd, bindText = bind.text:match("^/(%S*) (.*)")
            if bindCmd and bindText then
                handleText(bindCmd, bindText)
            else
                sampSendChat(bind.text)
            end
            return false
        end
    end
    
    if bi then bi = false; return end
    local cmd, text = msg:match("/(%S*) (.*)")
    if cmd == nil or text == nil then return end
    -- cmd = cmd:lower()
    
    local function handleText(cmd, text)
        --Рация, радио, ООС чат, шепот, крик (с поддержкой переноса ООС-скобок)
        for i, v in...

Deps

Участник
95
26
Lua:
function sampev.onSendCommand(msg)
    for _, bind in ipairs(bindList) do
        if bind.type == 0 and string.lower(msg) == string.lower(bind.trigger) then
            local bindCmd, bindText = bind.text:match("^/(%S*) (.*)")
            if bindCmd and bindText then
                handleText(bindCmd, bindText)
            else
                sampSendChat(bind.text)
            end
            return false
        end
    end
    
    if bi then bi = false; return end
    local cmd, text = msg:match("/(%S*) (.*)")
    if cmd == nil or text == nil then return end
    -- cmd = cmd:lower()
    
    local function handleText(cmd, text)
        --Рация, радио, ООС чат, шепот, крик (с поддержкой переноса ООС-скобок)
        for i, v in ipairs(commands) do if cmd == v then
            local length = text:len()
            if text:sub(1, 2) == "((" then
                text = string.gsub(text:sub(4), "%)%)", "")
                if length > 80 then divide(text, "/" .. cmd .. " (( ", " ))"); return false end
            else
                if length > 80 then divide(text, "/" .. cmd .. " ", ""); return false end
            end
        end end

        --РП команды
        if cmd == "me" or cmd == "do" then
            local length = text:len()
            if length > 75 then divide(text, "/" .. cmd .. " ", "", "ext"); return false end
        end

        --SMS
        if cmd == "sms" then
            local msg = "{}" .. text
            local number, _msg = msg:match("{}(%d+) (.*)")
            local msg = msg:sub(3)
            if _msg == nil then -- если номер не указан, ищется ближайшее полученное/отправленное сообщение
                for i = 1, 99 do                     -- номер берется из него
                    local test = sampGetChatString(i):match("SMS: .* | .*: (.*)")
                    if test ~= nil then number = string.match(test, ".* %[.*%.(%d+)%]") end
                end
            else msg = _msg end
            if number == nil then return end
            local length = msg:len()

            -- long SMS
            if length > 66 then divide(msg, "/sms " .. number .. " ", "", "sms"); return false end
            
            -- short SMS
            if length < 66 then bi = true; sampSendChat("/sms " .. number .. " " .. msg); return false end
        end
    end
    
    return handleText(cmd, text)
end
 
  • Влюблен
Реакции: w99zzl1