перевод команд

Fasz fiatal

Известный
Автор темы
325
66
Версия MoonLoader
Другое
объясните в чем проблема
вариант 1:
Lua:
require("samp.events").onSendCommand = function(command)
    if not sampIsChatCommandDefined(command) then
        
        cmd = "/"..translite(string.sub(command, 2, #command))
        return {cmd}
    end
end
вариант 2:
Lua:
require("samp.events").onSendCommand = function(command)
    if not sampIsChatCommandDefined(command) then
        
        local cmd = string.sub(command, 2, #command)
        command = "/" .. string.gsub(command, cmd, translite(cmd))
        
        return { command }
    end
end
функция translite:
Lua:
chars = {
    ["й"] = "q", ["ц"] = "w", ["у"] = "e", ["к"] = "r", ["е"] = "t", ["н"] = "y", ["г"] = "u", ["ш"] = "i", ["щ"] = "o", ["з"] = "p", ["х"] = "[", ["ъ"] = "]", ["ф"] = "a",
    ["ы"] = "s", ["в"] = "d", ["а"] = "f", ["п"] = "g", ["р"] = "h", ["о"] = "j", ["л"] = "k", ["д"] = "l", ["ж"] = ";", ["э"] = "'", ["я"] = "z", ["ч"] = "x", ["с"] = "c",
    ["м"] = "v", ["и"] = "b", ["т"] = "n", ["ь"] = "m", ["б"] = ",", ["ю"] = ".", ["Й"] = "Q", ["Ц"] = "W", ["У"] = "E", ["К"] = "R", ["Е"] = "T", ["Н"] = "Y", ["Г"] = "U",   
    ["Ш"] = "I", ["Щ"] = "O", ["З"] = "P", ["Х"] = "{", ["Ъ"] = "}", ["Ф"] = "A", ["Ы"] = "S", ["В"] = "D", ["А"] = "F", ["П"] = "G", ["Р"] = "H", ["О"] = "J", ["Л"] = "K",
    ["Д"] = "L", ["Ж"] = ":", ["Э"] = "\"", ["Я"] = "Z", ["Ч"] = "X", ["С"] = "C", ["М"] = "V", ["И"] = "B", ["Т"] = "N", ["Ь"] = "M", ["Б"] = "<", ["Ю"] = ">"
}

function translite(command)
    for k, v in pairs(chars) do
        command = string.gsub(command, k, v)
    end
    return command
end
 
Решение
теперь можно чтобы он только первое слово переводил)
Lua:
local translite = setmetatable({
  ["й"] = "q", ["ц"] = "w", ["у"] = "e", ["к"] = "r", ["е"] = "t", ["н"] = "y", ["г"] = "u", ["ш"] = "i", ["щ"] = "o", ["з"] = "p", ["х"] = "[", ["ъ"] = "]", ["ф"] = "a",
  ["ы"] = "s", ["в"] = "d", ["а"] = "f", ["п"] = "g", ["р"] = "h", ["о"] = "j", ["л"] = "k", ["д"] = "l", ["ж"] = ";", ["э"] = "'", ["я"] = "z", ["ч"] = "x", ["с"] = "c",
  ["м"] = "v", ["и"] = "b", ["т"] = "n", ["ь"] = "m", ["б"] = ",", ["ю"] = ".", ["Й"] = "Q", ["Ц"] = "W", ["У"] = "E", ["К"] = "R", ["Е"] = "T", ["Н"] = "Y", ["Г"] = "U",   
  ["Ш"] = "I", ["Щ"] = "O", ["З"] = "P", ["Х"] = "{", ["Ъ"] = "}", ["Ф"] = "A", ["Ы"] = "S", ["В"] = "D", ["А"] = "F", ["П"] = "G"...

MrDorlik

Известный
953
384
у меня почему то не работает, ввожу "/ьь" - отправляется "/ьь"
кинь скрин что в чат пишет
Lua:
chars = {
    ["й"] = "q", ["ц"] = "w", ["у"] = "e", ["к"] = "r", ["е"] = "t", ["н"] = "y", ["г"] = "u", ["ш"] = "i", ["щ"] = "o", ["з"] = "p", ["х"] = "[", ["ъ"] = "]", ["ф"] = "a",
    ["ы"] = "s", ["в"] = "d", ["а"] = "f", ["п"] = "g", ["р"] = "h", ["о"] = "j", ["л"] = "k", ["д"] = "l", ["ж"] = ";", ["э"] = "'", ["я"] = "z", ["ч"] = "x", ["с"] = "c",
    ["м"] = "v", ["и"] = "b", ["т"] = "n", ["ь"] = "m", ["б"] = ",", ["ю"] = ".", ["Й"] = "Q", ["Ц"] = "W", ["У"] = "E", ["К"] = "R", ["Е"] = "T", ["Н"] = "Y", ["Г"] = "U",   
    ["Ш"] = "I", ["Щ"] = "O", ["З"] = "P", ["Х"] = "{", ["Ъ"] = "}", ["Ф"] = "A", ["Ы"] = "S", ["В"] = "D", ["А"] = "F", ["П"] = "G", ["Р"] = "H", ["О"] = "J", ["Л"] = "K",
    ["Д"] = "L", ["Ж"] = ":", ["Э"] = "\"", ["Я"] = "Z", ["Ч"] = "X", ["С"] = "C", ["М"] = "V", ["И"] = "B", ["Т"] = "N", ["Ь"] = "M", ["Б"] = "<", ["Ю"] = ">"
}

function translite(command)
    for k, v in pairs(chars) do
        command = string.gsub(command, k, v)
    end
    return command
end

require("samp.events").onSendCommand = function(command)
    if not sampIsChatCommandDefined(command) then
        sampAddChatMessage('начальная команда: ' .. command, -1)
        cmd = "/"..translite(string.sub(command, 2, #command))
        sampAddChatMessage('конечная команда: ' .. cmd, -1)
        return {cmd}
    end
end
 

Fasz fiatal

Известный
Автор темы
325
66
я нашел в чем была ошибка, я кодировку поменять забыл)

кинь скрин что в чат пишет
Lua:
chars = {
    ["й"] = "q", ["ц"] = "w", ["у"] = "e", ["к"] = "r", ["е"] = "t", ["н"] = "y", ["г"] = "u", ["ш"] = "i", ["щ"] = "o", ["з"] = "p", ["х"] = "[", ["ъ"] = "]", ["ф"] = "a",
    ["ы"] = "s", ["в"] = "d", ["а"] = "f", ["п"] = "g", ["р"] = "h", ["о"] = "j", ["л"] = "k", ["д"] = "l", ["ж"] = ";", ["э"] = "'", ["я"] = "z", ["ч"] = "x", ["с"] = "c",
    ["м"] = "v", ["и"] = "b", ["т"] = "n", ["ь"] = "m", ["б"] = ",", ["ю"] = ".", ["Й"] = "Q", ["Ц"] = "W", ["У"] = "E", ["К"] = "R", ["Е"] = "T", ["Н"] = "Y", ["Г"] = "U",  
    ["Ш"] = "I", ["Щ"] = "O", ["З"] = "P", ["Х"] = "{", ["Ъ"] = "}", ["Ф"] = "A", ["Ы"] = "S", ["В"] = "D", ["А"] = "F", ["П"] = "G", ["Р"] = "H", ["О"] = "J", ["Л"] = "K",
    ["Д"] = "L", ["Ж"] = ":", ["Э"] = "\"", ["Я"] = "Z", ["Ч"] = "X", ["С"] = "C", ["М"] = "V", ["И"] = "B", ["Т"] = "N", ["Ь"] = "M", ["Б"] = "<", ["Ю"] = ">"
}

function translite(command)
    for k, v in pairs(chars) do
        command = string.gsub(command, k, v)
    end
    return command
end

require("samp.events").onSendCommand = function(command)
    if not sampIsChatCommandDefined(command) then
        sampAddChatMessage('начальная команда: ' .. command, -1)
        cmd = "/"..translite(string.sub(command, 2, #command))
        sampAddChatMessage('конечная команда: ' .. cmd, -1)
        return {cmd}
    end
end
теперь можно чтобы он только первое слово переводил)
 
Последнее редактирование:
  • Bug
Реакции: MrDorlik

wojciech?

Известный
Проверенный
406
360
теперь можно чтобы он только первое слово переводил)
Lua:
local translite = setmetatable({
  ["й"] = "q", ["ц"] = "w", ["у"] = "e", ["к"] = "r", ["е"] = "t", ["н"] = "y", ["г"] = "u", ["ш"] = "i", ["щ"] = "o", ["з"] = "p", ["х"] = "[", ["ъ"] = "]", ["ф"] = "a",
  ["ы"] = "s", ["в"] = "d", ["а"] = "f", ["п"] = "g", ["р"] = "h", ["о"] = "j", ["л"] = "k", ["д"] = "l", ["ж"] = ";", ["э"] = "'", ["я"] = "z", ["ч"] = "x", ["с"] = "c",
  ["м"] = "v", ["и"] = "b", ["т"] = "n", ["ь"] = "m", ["б"] = ",", ["ю"] = ".", ["Й"] = "Q", ["Ц"] = "W", ["У"] = "E", ["К"] = "R", ["Е"] = "T", ["Н"] = "Y", ["Г"] = "U",   
  ["Ш"] = "I", ["Щ"] = "O", ["З"] = "P", ["Х"] = "{", ["Ъ"] = "}", ["Ф"] = "A", ["Ы"] = "S", ["В"] = "D", ["А"] = "F", ["П"] = "G", ["Р"] = "H", ["О"] = "J", ["Л"] = "K",
  ["Д"] = "L", ["Ж"] = ":", ["Э"] = "\"", ["Я"] = "Z", ["Ч"] = "X", ["С"] = "C", ["М"] = "V", ["И"] = "B", ["Т"] = "N", ["Ь"] = "M", ["Б"] = "<", ["Ю"] = ">"
}, {
  __call = function(t, s)
    local l = s:len()
    for i = 1, l do
      local c = s:sub(i, i)
      if t[c] then
        s = s:sub(1, i - 1) .. t[c] .. s:sub(i + 1, l)
      end
    end
    return s
  end
})

require("samp.events").onSendCommand = function(text)
  local command, arguments = string.match(text, "/(%S+)%s?(.*)")
  return { string.format("/%s%s%s", translite(command), arguments ~= "" and " " or "", arguments) }
end
 
  • Нравится
Реакции: MLycoris и Fasz fiatal