Lua [JF] Translit - Не понятно зачем...

JustFedot

Известный
Автор темы
338
336
Версия SA-MP
  1. Любая
Приехал я домой, хотел посмотреть аниме, вместо этого сел и сделал вот это. Зачем? - Без понятия. Забирайте.

Замена русских букв на транслитерацию в обычном чате.

/translit - Вкл\Выкл

Samp Events
 

Вложения

  • [JF] Translit.lua
    2.2 KB · Просмотры: 36
Последнее редактирование:

chapo

чопа сребдс // @moujeek
Модератор
8,868
11,576
эту жесть
Lua:
function translit_rus_to_eng(text)
    local dict = {
      ['А'] = 'A', ['Б'] = 'B', ['В'] = 'V', ['Г'] = 'G', ['Д'] = 'D', ['Е'] = 'E', ['Ё'] = 'Yo',
      ['Ж'] = 'Zh', ['З'] = 'Z', ['И'] = 'I', ['Й'] = 'Y', ['К'] = 'K', ['Л'] = 'L', ['М'] = 'M',
      ['Н'] = 'N', ['О'] = 'O', ['П'] = 'P', ['Р'] = 'R', ['С'] = 'S', ['Т'] = 'T', ['У'] = 'U',
      ['Ф'] = 'F', ['Х'] = 'Kh', ['Ц'] = 'Ts', ['Ч'] = 'Ch', ['Ш'] = 'Sh', ['Щ'] = 'Sch', ['Ъ'] = '',
      ['Ы'] = 'Y', ['Ь'] = '', ['Э'] = 'E', ['Ю'] = 'Yu', ['Я'] = 'Ya',
      ['а'] = 'a', ['б'] = 'b', ['в'] = 'v', ['г'] = 'g', ['д'] = 'd', ['е'] = 'e', ['ё'] = 'yo',
      ['ж'] = 'zh', ['з'] = 'z', ['и'] = 'i', ['й'] = 'y', ['к'] = 'k', ['л'] = 'l', ['м'] = 'm',
      ['н'] = 'n', ['о'] = 'o', ['п'] = 'p', ['р'] = 'r', ['с'] = 's', ['т'] = 't', ['у'] = 'u',
      ['ф'] = 'f', ['х'] = 'kh', ['ц'] = 'ts', ['ч'] = 'ch', ['ш'] = 'sh', ['щ'] = 'sch', ['ъ'] = '',
      ['ы'] = 'y', ['ь'] = '', ['э'] = 'e', ['ю'] = 'yu', ['я'] = 'ya'
    }
 
    local result = ""
    for i = 1, #text do
      local c = text:sub(i, i)
      local r = dict[c]
      if r ~= nil then
        result = result .. r
      else
        result = result .. c
      end
    end
    return result
end
можно заменить на
Lua:
---@param text string Text
---@return string, number
function transnigger(text)
    return text:gsub('.', {
        ['А'] = 'A', ['Б'] = 'B', ['В'] = 'V', ['Г'] = 'G', ['Д'] = 'D', ['Е'] = 'E', ['Ё'] = 'Yo',
        ['Ж'] = 'Zh', ['З'] = 'Z', ['И'] = 'I', ['Й'] = 'Y', ['К'] = 'K', ['Л'] = 'L', ['М'] = 'M',
        ['Н'] = 'N', ['О'] = 'O', ['П'] = 'P', ['Р'] = 'R', ['С'] = 'S', ['Т'] = 'T', ['У'] = 'U',
        ['Ф'] = 'F', ['Х'] = 'Kh', ['Ц'] = 'Ts', ['Ч'] = 'Ch', ['Ш'] = 'Sh', ['Щ'] = 'Sch', ['Ъ'] = '',
        ['Ы'] = 'Y', ['Ь'] = '', ['Э'] = 'E', ['Ю'] = 'Yu', ['Я'] = 'Ya',
        ['а'] = 'a', ['б'] = 'b', ['в'] = 'v', ['г'] = 'g', ['д'] = 'd', ['е'] = 'e', ['ё'] = 'yo',
        ['ж'] = 'zh', ['з'] = 'z', ['и'] = 'i', ['й'] = 'y', ['к'] = 'k', ['л'] = 'l', ['м'] = 'm',
        ['н'] = 'n', ['о'] = 'o', ['п'] = 'p', ['р'] = 'r', ['с'] = 's', ['т'] = 't', ['у'] = 'u',
        ['ф'] = 'f', ['х'] = 'kh', ['ц'] = 'ts', ['ч'] = 'ch', ['ш'] = 'sh', ['щ'] = 'sch', ['ъ'] = '',
        ['ы'] = 'y', ['ь'] = '', ['э'] = 'e', ['ю'] = 'yu', ['я'] = 'ya'
    })
end
Результат:
1680985229626.png

Да и весь код выглядит как то ужасно, можно написать гораздо проще:
Lua:
require('lib.samp.events').onSendChat = function(text)
    return { active and text or translit(text) }
end

function main()
    while not isSampAvailable() do wait(0) end
    sampRegisterChatCommand('translit', function()
        active = not active
        sampAddChatMessage(active and 'on' or 'off', -1)
    end)
    wait(-1)
end

---@param text string
---@return string
function translit(text)
    return select(1, text:gsub('.', {
        ['А'] = 'A', ['Б'] = 'B', ['В'] = 'V', ['Г'] = 'G', ['Д'] = 'D', ['Е'] = 'E', ['Ё'] = 'Yo',
        ['Ж'] = 'Zh', ['З'] = 'Z', ['И'] = 'I', ['Й'] = 'Y', ['К'] = 'K', ['Л'] = 'L', ['М'] = 'M',
        ['Н'] = 'N', ['О'] = 'O', ['П'] = 'P', ['Р'] = 'R', ['С'] = 'S', ['Т'] = 'T', ['У'] = 'U',
        ['Ф'] = 'F', ['Х'] = 'Kh', ['Ц'] = 'Ts', ['Ч'] = 'Ch', ['Ш'] = 'Sh', ['Щ'] = 'Sch', ['Ъ'] = '',
        ['Ы'] = 'Y', ['Ь'] = '', ['Э'] = 'E', ['Ю'] = 'Yu', ['Я'] = 'Ya',
        ['а'] = 'a', ['б'] = 'b', ['в'] = 'v', ['г'] = 'g', ['д'] = 'd', ['е'] = 'e', ['ё'] = 'yo',
        ['ж'] = 'zh', ['з'] = 'z', ['и'] = 'i', ['й'] = 'y', ['к'] = 'k', ['л'] = 'l', ['м'] = 'm',
        ['н'] = 'n', ['о'] = 'o', ['п'] = 'p', ['р'] = 'r', ['с'] = 's', ['т'] = 't', ['у'] = 'u',
        ['ф'] = 'f', ['х'] = 'kh', ['ц'] = 'ts', ['ч'] = 'ch', ['ш'] = 'sh', ['щ'] = 'sch', ['ъ'] = '',
        ['ы'] = 'y', ['ь'] = '', ['э'] = 'e', ['ю'] = 'yu', ['я'] = 'ya'
    }))
end
 
  • Нравится
Реакции: Sadow

JustFedot

Известный
Автор темы
338
336
эту жесть
Lua:
function translit_rus_to_eng(text)
    local dict = {
      ['А'] = 'A', ['Б'] = 'B', ['В'] = 'V', ['Г'] = 'G', ['Д'] = 'D', ['Е'] = 'E', ['Ё'] = 'Yo',
      ['Ж'] = 'Zh', ['З'] = 'Z', ['И'] = 'I', ['Й'] = 'Y', ['К'] = 'K', ['Л'] = 'L', ['М'] = 'M',
      ['Н'] = 'N', ['О'] = 'O', ['П'] = 'P', ['Р'] = 'R', ['С'] = 'S', ['Т'] = 'T', ['У'] = 'U',
      ['Ф'] = 'F', ['Х'] = 'Kh', ['Ц'] = 'Ts', ['Ч'] = 'Ch', ['Ш'] = 'Sh', ['Щ'] = 'Sch', ['Ъ'] = '',
      ['Ы'] = 'Y', ['Ь'] = '', ['Э'] = 'E', ['Ю'] = 'Yu', ['Я'] = 'Ya',
      ['а'] = 'a', ['б'] = 'b', ['в'] = 'v', ['г'] = 'g', ['д'] = 'd', ['е'] = 'e', ['ё'] = 'yo',
      ['ж'] = 'zh', ['з'] = 'z', ['и'] = 'i', ['й'] = 'y', ['к'] = 'k', ['л'] = 'l', ['м'] = 'm',
      ['н'] = 'n', ['о'] = 'o', ['п'] = 'p', ['р'] = 'r', ['с'] = 's', ['т'] = 't', ['у'] = 'u',
      ['ф'] = 'f', ['х'] = 'kh', ['ц'] = 'ts', ['ч'] = 'ch', ['ш'] = 'sh', ['щ'] = 'sch', ['ъ'] = '',
      ['ы'] = 'y', ['ь'] = '', ['э'] = 'e', ['ю'] = 'yu', ['я'] = 'ya'
    }
 
    local result = ""
    for i = 1, #text do
      local c = text:sub(i, i)
      local r = dict[c]
      if r ~= nil then
        result = result .. r
      else
        result = result .. c
      end
    end
    return result
end
можно заменить на
Lua:
---@param text string Text
---@return string, number
function transnigger(text)
    return text:gsub('.', {
        ['А'] = 'A', ['Б'] = 'B', ['В'] = 'V', ['Г'] = 'G', ['Д'] = 'D', ['Е'] = 'E', ['Ё'] = 'Yo',
        ['Ж'] = 'Zh', ['З'] = 'Z', ['И'] = 'I', ['Й'] = 'Y', ['К'] = 'K', ['Л'] = 'L', ['М'] = 'M',
        ['Н'] = 'N', ['О'] = 'O', ['П'] = 'P', ['Р'] = 'R', ['С'] = 'S', ['Т'] = 'T', ['У'] = 'U',
        ['Ф'] = 'F', ['Х'] = 'Kh', ['Ц'] = 'Ts', ['Ч'] = 'Ch', ['Ш'] = 'Sh', ['Щ'] = 'Sch', ['Ъ'] = '',
        ['Ы'] = 'Y', ['Ь'] = '', ['Э'] = 'E', ['Ю'] = 'Yu', ['Я'] = 'Ya',
        ['а'] = 'a', ['б'] = 'b', ['в'] = 'v', ['г'] = 'g', ['д'] = 'd', ['е'] = 'e', ['ё'] = 'yo',
        ['ж'] = 'zh', ['з'] = 'z', ['и'] = 'i', ['й'] = 'y', ['к'] = 'k', ['л'] = 'l', ['м'] = 'm',
        ['н'] = 'n', ['о'] = 'o', ['п'] = 'p', ['р'] = 'r', ['с'] = 's', ['т'] = 't', ['у'] = 'u',
        ['ф'] = 'f', ['х'] = 'kh', ['ц'] = 'ts', ['ч'] = 'ch', ['ш'] = 'sh', ['щ'] = 'sch', ['ъ'] = '',
        ['ы'] = 'y', ['ь'] = '', ['э'] = 'e', ['ю'] = 'yu', ['я'] = 'ya'
    })
end
Результат:
Посмотреть вложение 196999
Да и весь код выглядит как то ужасно, можно написать гораздо проще:
Lua:
require('lib.samp.events').onSendChat = function(text)
    return { active and text or translit(text) }
end

function main()
    while not isSampAvailable() do wait(0) end
    sampRegisterChatCommand('translit', function()
        active = not active
        sampAddChatMessage(active and 'on' or 'off', -1)
    end)
    wait(-1)
end

---@param text string
---@return string
function translit(text)
    return select(1, text:gsub('.', {
        ['А'] = 'A', ['Б'] = 'B', ['В'] = 'V', ['Г'] = 'G', ['Д'] = 'D', ['Е'] = 'E', ['Ё'] = 'Yo',
        ['Ж'] = 'Zh', ['З'] = 'Z', ['И'] = 'I', ['Й'] = 'Y', ['К'] = 'K', ['Л'] = 'L', ['М'] = 'M',
        ['Н'] = 'N', ['О'] = 'O', ['П'] = 'P', ['Р'] = 'R', ['С'] = 'S', ['Т'] = 'T', ['У'] = 'U',
        ['Ф'] = 'F', ['Х'] = 'Kh', ['Ц'] = 'Ts', ['Ч'] = 'Ch', ['Ш'] = 'Sh', ['Щ'] = 'Sch', ['Ъ'] = '',
        ['Ы'] = 'Y', ['Ь'] = '', ['Э'] = 'E', ['Ю'] = 'Yu', ['Я'] = 'Ya',
        ['а'] = 'a', ['б'] = 'b', ['в'] = 'v', ['г'] = 'g', ['д'] = 'd', ['е'] = 'e', ['ё'] = 'yo',
        ['ж'] = 'zh', ['з'] = 'z', ['и'] = 'i', ['й'] = 'y', ['к'] = 'k', ['л'] = 'l', ['м'] = 'm',
        ['н'] = 'n', ['о'] = 'o', ['п'] = 'p', ['р'] = 'r', ['с'] = 's', ['т'] = 't', ['у'] = 'u',
        ['ф'] = 'f', ['х'] = 'kh', ['ц'] = 'ts', ['ч'] = 'ch', ['ш'] = 'sh', ['щ'] = 'sch', ['ъ'] = '',
        ['ы'] = 'y', ['ь'] = '', ['э'] = 'e', ['ю'] = 'yu', ['я'] = 'ya'
    }))
end
Знаю, я его писал давая команды chatGPT. Мне говорили типа это круто и удобно, вот решил чёт сделать не помогая ему практически, хотя постоянно что-то поправлять приходилось самому, если у меня не хватало нервов ему по несколько раз одно и тоже говорить.

Особенно смешно было когда он мне родил функцию отправки текста в чат. Ещё и цвета попутал, решил что оранжевый это фиолетовый. Но один фиг штука прикольная.
 
  • Ха-ха
Реакции: whyega52