парсинг

W1ll04eison

Участник
Автор темы
328
19
Версия MoonLoader
.026-beta
При вводе /sgps [id игрока] [название gps] и жму enter в чат должен вставляться тот gps которого я написал название.
вот массив gps:
lua:
local gps = {
[0] = 'Мэрия | /gps 0 0',
[1] = 'Автошкола | /gps 0 1',
[2] = 'Авиашкола LV | /gps 0 2',
[3] = 'Автовокзал LS | /gps 0 3',
[4] = 'ЖД вокзал LS | /gps 0 4',
[5] = 'Авто/ЖД вокзал SF | /gps 0 5',
[6] = 'Авто/ЖД вокзал LV | /gps 0 6',
[7] = 'Fort Carson | /gps 0 7',
[8] = 'Прием металла | /gps 0 8',
[9] = 'Наркопритон | /gps 0 9',
[10] = 'Аэропорт LS | /gps 0 10',
[11] = 'Аэропорт SF | /gps 0 11',
[12] = 'Аэропорт LV | /gps 0 12',
[13] = 'Причал | /gps 0 13',
[14] = 'Vinewood | /gps 0 14',
[15] = 'Пляж Santa Maria | /gps 0 15',
[16] = 'Стадион SF | /gps 0 16',
[17] = 'Спортзал LS | /gps 0 17',
[18] = 'Спортзал SF | /gps 0 18',
[19] = 'Спортзал LV | /gps 0 19',
[20] = 'Пейнтбол | /gps 0 20',
[21] = 'Церковь | /gps 0 21',
[22] = 'Военкомат | /gps 0 22',
[23] = 'Перегон машин.Получение | /gps 23',
[24] = 'Перегон машин.Сдача | /gps 0 24',
[25] = 'Торговая площадка | /gps 0 25',
[26] = 'Черный рынок | /gps 0 26',
[27] = 'Кладбище | /gps 0 27',
[28] = 'Тренинг центр | /gps 0 28',
[29] = 'Военный музей | /gps 0 29',
[30] = 'LS Bank Pershing Square | /gps 0 30',
[31] = 'SF Bank Kings | /gps 0 31',
[32] = 'LV Bank Roca Escalante | /gps 0 32',
[33] = 'LS Bank Market | /gps 0 33',
[34] = 'SF Bank Juniper Hill | /gps 0 34',
[35] = 'LV Bank Come A Lot | /gps 0 35',
[36] = 'Bayside Bank | /gps 0 36',
[37] = 'Fort Carson Bank | /gps 0 37',
[38] = 'Palomino Creek Bank | /gps 0 38',
[39] = 'Las Barrancas Bank | /gps 0 39',
[40] = 'Игра в Кальмара | /gps 0 40',
[41] = 'Склад с алкоголем | /gps 1 0',
[42] = 'Нефтезавод | /gps 1 1',
[43] = 'Склад продуктов | /gps 1 2',
[44] = 'Склад урожая с ферм | /gps 1 3',
[45] = 'Автобусный парк | /gps 1 4',
[46] = 'Стоянка машин Ход догов | /gps 1 5',
[47] = 'Стоянка Инкассаторов | /gps 1 6',
[48] = 'Работа грузчика | /gps 1 7',
[49] = 'Склад с наркотиками | /gps 1 8',
[50] = 'Автоугонщики | /gps 1 10',
[51] = 'Стоянка грабителей ЛЭП | /gps 1 11',
[52] = 'Стоянка электриков | /gps 1 12',
[53] = 'Ограбление домов | /gps 1 13',
[54] = 'Оружейный завод | /gps 1 14',
[55] = 'Клуб Alhambra | /gps 2 0',
[56] = 'Клуб Jizzy | /gps 2 1',
[57] = 'Клуб Pig Pen | /gps 2 2',
[58] = 'Бар Grove Street | /gps 2 3',
[59] = 'Бар Misty | /gps 2 4',
[60] = 'Клуб Amnesia | /gps 2 5',
[61] = 'Бар Big Spread Ranch | /gps 2 6',
[62] = 'Бар Lil Probe Inn | /gps 2 7',
[63] = 'Бар Tierra Robada | /gps 2 8',
[64] = 'Comedy Club | /gps 2 9',
[65] = 'Казино 4 Дракона | /gps 2 10',
[66] = 'Казино Калигула | /gps 2 11',
[67] = 'Склад бара 4 Драконов | /gps 2 12',
[68] = 'Склад бара Калигулы | /gps 2 13',
[69] = 'Belagio | /gps 2 14',
[70] = 'Sobrino de Botin | /gps 2 15',
[71] = 'Автосалон Nope | /gps 3 0',
[72] = 'Автосалон D and C | /gps 3 1',
[73] = 'Автосалон B and A | /gps 3 2',
[74] = 'Автосалон S | /gps 3 3',
[75] = 'Автосалон LV B and A | /gps 3 4',
[76] = 'Магазин одежды LS | /gps 3 5',
[77] = 'Магазин одежды SF | /gps 3 6',
[78] = 'Магазин одежды LV | /gps 3 7',
[79] = 'Оружейный магазин LS | /gps 3 8',
[80] = 'Оружейный магаз SF | /gps 3 9',
[81] = 'Оружейный магазин LV | /gps 3 10',
[82] = 'Аренда вертолета LS | /gps 3 11',
[83] = 'Аренда вертолета SF | /gps 3 12',
[84] = 'Аренда вертолета LV | /gps 3 13',
[85] = 'Аренда вертолета LV | /gps 3 14',
[86] = 'Фермы | /gps 5',
[87] = 'Дальнобойщики | /gps 6',
[88] = 'Гаражи | /gps 12',
[89] = 'СТО LS | /gps 11 0',
[90] = 'СТО LV | /gps 11 2',
[91] = 'СТО SF | /gps 11 1',
}

Вот сам код который это делает:
lua:
function sampev.onSendCommand(cmd)
    local command, params = string.match(cmd:lower(), "^%/([^ ]*)(.*)")
if command == "sgps" then
        local param = getCommandParams(params)
        sCarID, sCarName = param[1], param[2]
        if sCarID ~= nil and sCarName ~= nil then
            lua_thread.create(function()
                local text = ""
                sCarName = sCarName:gsub("%-", '%%-')
                    for k, v in pairs(gps) do
                        if string.find(v:lower():gsub(" ", ' '), sCarName:lower()) then
                            text = v
                        end
                    end
                if #text > 0 then
                    local name, class = string.match(text, "(.+) | (.+)")
                    local str = string.format("/pm %s%s | [%s]", sCarID, name, class)
                    wait(50)
                    sampSetChatInputText(str)
                    sampSetChatInputEnabled(true)
                else
                    sampAddChatMessage(" GPS '"..sCarName.."' не найден. Проверьте правильность написания!", -1 )
                end
            end)
        else
            sampAddChatMessage(" /sgps [ID] [Название]", -1 )
        end
        return false
    end
end

--функция param
function getCommandParams(params)
    local param = {}
    for p in string.gmatch(params, "[^ ]+ ?") do
        table.insert(param, p)
    end
    return param
end

Подскажите как сделать так что-бы, если я к примеру напишу: «/sgps СТО LS», то, в чат вставится gps СТО LS (СТО LS | /gps 11 0). Сейчас же если я пишу: «/sgps [id игрока] СТО LS», то, в чат почему-то вставляется gps СТО SF (СТО SF | /gps 11 1).
Подскажите пожалуйста как это исправить.
И, как сделать так что-бы можно было бы писать маленькими буквами, к пример, если я напишу: «/sgps [id игрока] мэрия», то оно не находит gps мэрии, а если я напишу слово "Мэрия" с большой буквы, то, находит («/sgps [id игрока] Мэрия)
 

chapo

🫡 В армии с 17.10.2023. В ЛС НЕ ОТВЕЧАЮ
Друг
8,770
11,213
Lua:
local gps = {
    [0] = 'Мэрия | /gps 0 0',
    [1] = 'Автошкола | /gps 0 1',
    [2] = 'Авиашкола LV | /gps 0 2',
    [3] = 'Автовокзал LS | /gps 0 3',
    [4] = 'ЖД вокзал LS | /gps 0 4',
    [5] = 'Авто/ЖД вокзал SF | /gps 0 5',
    [6] = 'Авто/ЖД вокзал LV | /gps 0 6',
    [7] = 'Fort Carson | /gps 0 7',
    [8] = 'Прием металла | /gps 0 8',
    [9] = 'Наркопритон | /gps 0 9',
    [10] = 'Аэропорт LS | /gps 0 10',
    [11] = 'Аэропорт SF | /gps 0 11',
    [12] = 'Аэропорт LV | /gps 0 12',
    [13] = 'Причал | /gps 0 13',
    [14] = 'Vinewood | /gps 0 14',
    [15] = 'Пляж Santa Maria | /gps 0 15',
    [16] = 'Стадион SF | /gps 0 16',
    [17] = 'Спортзал LS | /gps 0 17',
    [18] = 'Спортзал SF | /gps 0 18',
    [19] = 'Спортзал LV | /gps 0 19',
    [20] = 'Пейнтбол | /gps 0 20',
    [21] = 'Церковь | /gps 0 21',
    [22] = 'Военкомат | /gps 0 22',
    [23] = 'Перегон машин.Получение | /gps 23',
    [24] = 'Перегон машин.Сдача | /gps 0 24',
    [25] = 'Торговая площадка | /gps 0 25',
    [26] = 'Черный рынок | /gps 0 26',
    [27] = 'Кладбище | /gps 0 27',
    [28] = 'Тренинг центр | /gps 0 28',
    [29] = 'Военный музей | /gps 0 29',
    [30] = 'LS Bank Pershing Square | /gps 0 30',
    [31] = 'SF Bank Kings | /gps 0 31',
    [32] = 'LV Bank Roca Escalante | /gps 0 32',
    [33] = 'LS Bank Market | /gps 0 33',
    [34] = 'SF Bank Juniper Hill | /gps 0 34',
    [35] = 'LV Bank Come A Lot | /gps 0 35',
    [36] = 'Bayside Bank | /gps 0 36',
    [37] = 'Fort Carson Bank | /gps 0 37',
    [38] = 'Palomino Creek Bank | /gps 0 38',
    [39] = 'Las Barrancas Bank | /gps 0 39',
    [40] = 'Игра в Кальмара | /gps 0 40',
    [41] = 'Склад с алкоголем | /gps 1 0',
    [42] = 'Нефтезавод | /gps 1 1',
    [43] = 'Склад продуктов | /gps 1 2',
    [44] = 'Склад урожая с ферм | /gps 1 3',
    [45] = 'Автобусный парк | /gps 1 4',
    [46] = 'Стоянка машин Ход догов | /gps 1 5',
    [47] = 'Стоянка Инкассаторов | /gps 1 6',
    [48] = 'Работа грузчика | /gps 1 7',
    [49] = 'Склад с наркотиками | /gps 1 8',
    [50] = 'Автоугонщики | /gps 1 10',
    [51] = 'Стоянка грабителей ЛЭП | /gps 1 11',
    [52] = 'Стоянка электриков | /gps 1 12',
    [53] = 'Ограбление домов | /gps 1 13',
    [54] = 'Оружейный завод | /gps 1 14',
    [55] = 'Клуб Alhambra | /gps 2 0',
    [56] = 'Клуб Jizzy | /gps 2 1',
    [57] = 'Клуб Pig Pen | /gps 2 2',
    [58] = 'Бар Grove Street | /gps 2 3',
    [59] = 'Бар Misty | /gps 2 4',
    [60] = 'Клуб Amnesia | /gps 2 5',
    [61] = 'Бар Big Spread Ranch | /gps 2 6',
    [62] = 'Бар Lil Probe Inn | /gps 2 7',
    [63] = 'Бар Tierra Robada | /gps 2 8',
    [64] = 'Comedy Club | /gps 2 9',
    [65] = 'Казино 4 Дракона | /gps 2 10',
    [66] = 'Казино Калигула | /gps 2 11',
    [67] = 'Склад бара 4 Драконов | /gps 2 12',
    [68] = 'Склад бара Калигулы | /gps 2 13',
    [69] = 'Belagio | /gps 2 14',
    [70] = 'Sobrino de Botin | /gps 2 15',
    [71] = 'Автосалон Nope | /gps 3 0',
    [72] = 'Автосалон D and C | /gps 3 1',
    [73] = 'Автосалон B and A | /gps 3 2',
    [74] = 'Автосалон S | /gps 3 3',
    [75] = 'Автосалон LV B and A | /gps 3 4',
    [76] = 'Магазин одежды LS | /gps 3 5',
    [77] = 'Магазин одежды SF | /gps 3 6',
    [78] = 'Магазин одежды LV | /gps 3 7',
    [79] = 'Оружейный магазин LS | /gps 3 8',
    [80] = 'Оружейный магаз SF | /gps 3 9',
    [81] = 'Оружейный магазин LV | /gps 3 10',
    [82] = 'Аренда вертолета LS | /gps 3 11',
    [83] = 'Аренда вертолета SF | /gps 3 12',
    [84] = 'Аренда вертолета LV | /gps 3 13',
    [85] = 'Аренда вертолета LV | /gps 3 14',
    [86] = 'Фермы | /gps 5',
    [87] = 'Дальнобойщики | /gps 6',
    [88] = 'Гаражи | /gps 12',
    [89] = 'СТО LS | /gps 11 0',
    [90] = 'СТО LV | /gps 11 2',
    [91] = 'СТО SF | /gps 11 1',
}

local sampev = require 'lib.samp.events'

function sampev.onSendCommand(text)
    if text:find('/sgps (.+)') then
        local arg = text:match('/sgps (.+)')
        if #arg > 0 then
            for k, v in pairs(gps) do
                if string.rlower(v):find(string.rlower(arg)) then
                    sampSendChat(arg..' = '..v)
                end
            end
        else
            sampAddChatMessage('Долбаеб, введи что нибудь', -1)
        end
        return false
    end
end

local russian_characters = {
    [168] = 'Ё', [184] = 'ё', [192] = 'А', [193] = 'Б', [194] = 'В', [195] = 'Г', [196] = 'Д', [197] = 'Е', [198] = 'Ж', [199] = 'З', [200] = 'И', [201] = 'Й', [202] = 'К', [203] = 'Л', [204] = 'М', [205] = 'Н', [206] = 'О', [207] = 'П', [208] = 'Р', [209] = 'С', [210] = 'Т', [211] = 'У', [212] = 'Ф', [213] = 'Х', [214] = 'Ц', [215] = 'Ч', [216] = 'Ш', [217] = 'Щ', [218] = 'Ъ', [219] = 'Ы', [220] = 'Ь', [221] = 'Э', [222] = 'Ю', [223] = 'Я', [224] = 'а', [225] = 'б', [226] = 'в', [227] = 'г', [228] = 'д', [229] = 'е', [230] = 'ж', [231] = 'з', [232] = 'и', [233] = 'й', [234] = 'к', [235] = 'л', [236] = 'м', [237] = 'н', [238] = 'о', [239] = 'п', [240] = 'р', [241] = 'с', [242] = 'т', [243] = 'у', [244] = 'ф', [245] = 'х', [246] = 'ц', [247] = 'ч', [248] = 'ш', [249] = 'щ', [250] = 'ъ', [251] = 'ы', [252] = 'ь', [253] = 'э', [254] = 'ю', [255] = 'я',
}
function string.rlower(s)
    s = s:lower()
    local strlen = s:len()
    if strlen == 0 then return s end
    s = s:lower()
    local output = ''
    for i = 1, strlen do
        local ch = s:byte(i)
        if ch >= 192 and ch <= 223 then -- upper russian characters
            output = output .. russian_characters[ch + 32]
        elseif ch == 168 then -- Ё
            output = output .. russian_characters[184]
        else
            output = output .. string.char(ch)
        end
    end
    return output
end
function string.rupper(s)
    s = s:upper()
    local strlen = s:len()
    if strlen == 0 then return s end
    s = s:upper()
    local output = ''
    for i = 1, strlen do
        local ch = s:byte(i)
        if ch >= 224 and ch <= 255 then -- lower russian characters
            output = output .. russian_characters[ch - 32]
        elseif ch == 184 then -- ё
            output = output .. russian_characters[168]
        else
            output = output .. string.char(ch)
        end
    end
    return output
end
1645464850831.png