Изменение введенных символов на другую раскладку после определенного слова.

F L I P S T A R

Участник
Автор темы
62
1
Версия MoonLoader
Другое
Приветствую.
Возник вопрос. Многим известен такой луа скрипт InputHelper: *Ссылка*. В этом скрипте есть функция, которая меняет русские символы на английские, например ввел .ешьу , а вывелось /time. Вопрос состоит в том, можно ли и как написать такую функцию, чтобы после определенного слова, которое я ввожу дальше так же менялось на анлийские буквы? Если быть точнее, чтобы я вводил /id Шмфт_Шмфтщм , а исправлялось на /id Ivan_Ivanov. То есть сделать функцию, которая срабатывает, если я ввел ключевое слово /id, и все, что пишется после него будет меняться на английские буквы. Как это реализовать?
P.s. в том скрипте InputHelper замена идет после проверки первого введённого знака,
Lua:
if(firstChar == "." or firstChar == "/")then
P.s. Приложу этот InputHelper сюда для удобства.
Спасибо за помощь и ответ.
 

Вложения

  • InputHelper.lua
    4 KB · Просмотры: 12
Решение
Не совсем так работает, теперь абсолютно весь текст, который следует за любой командой переводится на англ. символы, но мне нужно, чтобы переводился только текст после команды /id , а после всех остальных команд он не переводил текст, как это и было задумано оригинальным скриптом.
Lua:
function inputChat()
    while true do
        if (sampIsChatInputActive()) then
            local getInput = sampGetChatInputText()
            if (oldText ~= getInput and #getInput > 0) then
                local firstChar = string.sub(getInput, 1, 1)
                if (firstChar == "." or firstChar == "/") then
                    local cmd, text = string.match(getInput, "^([^ ]+)(.*)")
                    local nText = "/" ...

F L I P S T A R

Участник
Автор темы
62
1
ну смотри как реализовано замена при .ешьу на /time и также делай под себя, только с проверкой на /id
Вот главный то вопрос в этом и заключается, как проверку сделать на /id? Замена происходит после определения всех символом на другие символы.
 

reversed

Известный
69
17
Lua:
function inputChat()
    while true do
        if(sampIsChatInputActive())then
            local getInput = sampGetChatInputText()
            if(oldText ~= getInput and #getInput > 0)then
                local firstChar = string.sub(getInput, 1, 1)
                if(firstChar == "." or firstChar == "/")then
                    local text = string.match(getInput, "^(.*)")
                    local nText = "/" .. translite(string.sub(text, 2))
                    local chatInfoPtr = sampGetInputInfoPtr()
                    local chatBoxInfo = getStructElement(chatInfoPtr, 0x8, 4)
                    local lastPos = mem.getint8(chatBoxInfo + 0x11E)
                    sampSetChatInputText(nText)
                    mem.setint8(chatBoxInfo + 0x11E, lastPos)
                    mem.setint8(chatBoxInfo + 0x119, lastPos)
                    oldText = nText
                end
            end
        end
        wait(0)
    end
end
держи, поменял только 8 и 9 строку
на 8 строке заменил регулярку, чтобы искало весь текст
 
  • Нравится
Реакции: F L I P S T A R

F L I P S T A R

Участник
Автор темы
62
1
Lua:
function inputChat()
    while true do
        if(sampIsChatInputActive())then
            local getInput = sampGetChatInputText()
            if(oldText ~= getInput and #getInput > 0)then
                local firstChar = string.sub(getInput, 1, 1)
                if(firstChar == "." or firstChar == "/")then
                    local text = string.match(getInput, "^(.*)")
                    local nText = "/" .. translite(string.sub(text, 2))
                    local chatInfoPtr = sampGetInputInfoPtr()
                    local chatBoxInfo = getStructElement(chatInfoPtr, 0x8, 4)
                    local lastPos = mem.getint8(chatBoxInfo + 0x11E)
                    sampSetChatInputText(nText)
                    mem.setint8(chatBoxInfo + 0x11E, lastPos)
                    mem.setint8(chatBoxInfo + 0x119, lastPos)
                    oldText = nText
                end
            end
        end
        wait(0)
    end
end
держи, поменял только 8 и 9 строку
на 8 строке заменил регулярку, чтобы искало весь текст
Не совсем так работает, теперь абсолютно весь текст, который следует за любой командой переводится на англ. символы, но мне нужно, чтобы переводился только текст после команды /id , а после всех остальных команд он не переводил текст, как это и было задумано оригинальным скриптом.
 
Последнее редактирование:

reversed

Известный
69
17
Не совсем так работает, теперь абсолютно весь текст, который следует за любой командой переводится на англ. символы, но мне нужно, чтобы переводился только текст после команды /id , а после всех остальных команд он не переводил текст, как это и было задумано оригинальным скриптом.
Lua:
function inputChat()
    while true do
        if (sampIsChatInputActive()) then
            local getInput = sampGetChatInputText()
            if (oldText ~= getInput and #getInput > 0) then
                local firstChar = string.sub(getInput, 1, 1)
                if (firstChar == "." or firstChar == "/") then
                    local cmd, text = string.match(getInput, "^([^ ]+)(.*)")
                    local nText = "/" .. translite(string.sub(cmd, 2)) .. text
                    if (string.sub(cmd, 2) == "id") then
                        nText = "/" .. translite(string.sub(cmd, 2)) .. translite(text)
                    end
                    local chatInfoPtr = sampGetInputInfoPtr()
                    local chatBoxInfo = getStructElement(chatInfoPtr, 0x8, 4)
                    local lastPos = mem.getint8(chatBoxInfo + 0x11E)
                    sampSetChatInputText(nText)
                    mem.setint8(chatBoxInfo + 0x11E, lastPos)
                    mem.setint8(chatBoxInfo + 0x119, lastPos)
                    oldText = nText
                end
            end
        end
        wait(0)
    end
end
 
  • Нравится
Реакции: F L I P S T A R

F L I P S T A R

Участник
Автор темы
62
1
Lua:
function inputChat()
    while true do
        if (sampIsChatInputActive()) then
            local getInput = sampGetChatInputText()
            if (oldText ~= getInput and #getInput > 0) then
                local firstChar = string.sub(getInput, 1, 1)
                if (firstChar == "." or firstChar == "/") then
                    local cmd, text = string.match(getInput, "^([^ ]+)(.*)")
                    local nText = "/" .. translite(string.sub(cmd, 2)) .. text
                    if (string.sub(cmd, 2) == "id") then
                        nText = "/" .. translite(string.sub(cmd, 2)) .. translite(text)
                    end
                    local chatInfoPtr = sampGetInputInfoPtr()
                    local chatBoxInfo = getStructElement(chatInfoPtr, 0x8, 4)
                    local lastPos = mem.getint8(chatBoxInfo + 0x11E)
                    sampSetChatInputText(nText)
                    mem.setint8(chatBoxInfo + 0x11E, lastPos)
                    mem.setint8(chatBoxInfo + 0x119, lastPos)
                    oldText = nText
                end
            end
        end
        wait(0)
    end
end
Спасибо, помог еще раз) Всё работает, как нужно.