Перейти к содержимому
  • 0
Stinger

Вопрос. Обработка строки.

Вопрос

Никак не получается реализовать!

 

--&say ник,сообщение -- Команда которую хочу реализовать!

 

Как должна работать ?

 

--Допустим модератор пишет данную команду, игрок чей ник напишет модератор, отправит в чат 

сообщение, которое укажет модератор, надеюсь растолковал)

 

В чём заключается проблема ?

 

--Проблема заключается в том, что если в сообщении модератор сделает пробел,

и напишет например "Привет Мир" в чат выведется только  Привет, всё остальное обрезается!

 

 

 

          --Обрезка пробелов

 

          function trim(s)
          return (string.gsub(s, "^%s*(.-)%s*$", "%1"))
          end

 

          --Разделение строки

 

         function explode(seperator, str) 
         local pos, i, arr = 0, 0, {}
         for st, sp in function() return string.find(str, seperator, pos, true) end do
         table.insert(arr, i, trim(string.sub(str, pos, st-1)))
         pos = sp + 1
         i = i + 1
         end
         table.insert(arr, i, trim(string.sub(str, pos)))
        return arr
        end

 

         -- Часть основной функции

 

        elseif messarr[0] == "&say" and GetGmLv(role) <= 24  then
        SystemNotice(role,"Нет Доступа!")
        elseif messarr[0] == "&say" and GetGmLv(role) >= 25  then
        local params = {}
        if messarr[1] ~= nil then
        params = explode(",", messarr[1])
        local name = tostring(params[0])
        local text = tostring(params[1])    
        if params[1] ~= nil then            
        local Char = GetPlayerByName(name)
        Say(Char,text)
        elseif  params[1] == nil then
        end
        end

 

-- Косяк в том, что когда я делаю в сообщении пробел , то, что после пробела не пишется.

 

P.S Я конечно могу делать нижнее подчёркивание вместо пробелов, но это очень не удобно, буду благодарен за вашу помощь!

Изменено пользователем Stinger

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения

Ты видимо разбиваешь всю строку по пробелам, вот и получаешь в messar[1] первое слово сообщения

 

Ты можешь попробовать что-нибудь вроде:

local command = "&say nick,some message"
local tail = command:sub(6)
print(tail:match("([^,]+),([^,]+)"))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Плохая идея к сожалению.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Как я понял, в messarr хранится строка до пробела и строка после; в params - до запятой и после запятой.

Тут всё довольно просто. Как-то так примерно. Я тут приблизительно код данный привёл.

local messarr = {msg:match("^(%S*)%s?(.*)$")}
if messarr[1] == "&say" then
  if checkAccess(user, ACCESS_LEVELS.Moderator) then
    local params = {messarr[2]:match("^([^,]*),(.*)$")}
    say {user = params[1], message = params[2]}
  end
end

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...