Гайд #2 | Пишем парсер ников samp

Статус
В этой теме нельзя размещать новые ответы.

ufdhbi

Известный
Автор темы
Проверенный
1,456
861
Парсим ники samp на LUA
Привет, в первом уроке мы делали биндер, теперь скакнем вперед.
Напишем парсер ников samp
Ники будет парсить из списка в табе.
Приступим.

Создаем скрипт с любым названием, но обязательно с расширением .lua
Я создам getnicks.lua

Вставляем в скрипт шаблон:

Lua:
require "lib.moonloader"

function main()
    if not isSampfuncsLoaded() or not isSampLoaded() then return end
    while not isSampAvailable() do wait(100) end
    while true do
    wait(0)

    end
end

Теперь подумаем над активацией, с клавишами мы уже работали, давайте рассмотрим акцивацию по команде.
команда регистрируется следующей функцией:
Lua:
sampRegisterChatCommand('команда', функция)
в строку команда нужно ввести команду без "/" на которую вы хотели бы активировать.
фунция - функция которая вызовется после ввода команды
зарегистрируем нашу команду, я сделаю /parsnicks
Lua:
sampRegisterChatCommand('parsnicks', parsnicks)
Регистрировать команды нужно после инициализации сампа и до бесконечного цикла в main:
Lua:
require "lib.moonloader"

function main()
    if not isSampfuncsLoaded() or not isSampLoaded() then return end
    while not isSampAvailable() do wait(100) end
    sampRegisterChatCommand('parsnicks', parsnicks)
    while true do
    wait(0)

    end
end

Команда зарегистрирована, осталось написать функцию записи ников в файл.
Я ее написал заранее, поэтому оставлю здесь только прокомментированный код:
Lua:
function parsnicks(filename) -- название функции а в скобках то что она принимает, я сделал чтобы принимало имя файла в который будем записывать
    if filename ~= nil then -- проверяем что юзер ввел имя файла
        if not doesFileExist(filename..'.txt') then -- проверяем что такого файла не существует
            local f = io.open(filename..'.txt', 'a+') -- создаем файл с именем который ввел юзер, только добавляем расширение
            local count = 0 -- делаем переменную в которой будем считать сколько ников записано | local - значит будет действовать только в этой функции
            for i = 0, 1004 do -- начинаем перебор чиклом for, от нулевого ида до 1004
                if sampIsPlayerConnected(i) then -- проверяем подключен ли игрок с таким идом
                    playername = sampGetPlayerNickname(i) -- если подключен получаем его ник
                    f:write(playername..'\n') -- записываем ник в файл
                    count = count + 1 -- добавляем в переменную 1, ибо записали ник
                end
            end
            sampAddChatMessage('Записано ников в файл: '..count, -1) -- после цикла for нам выведет сколько ников записано
            f:close() -- закрываем файл
        else
            sampAddChatMessage(string.format("Файл %s уже существует, введите другое имя.", filename..'.txt'), -1) -- если файл который указал юзер существует то уведомим его об этом
        end
    else
        sampAddChatMessage('/parsnicks filname | вводим команду и имя файла в который ники сохранятся', -1) -- выводим если команда введена без названия файла
    end
end

Теперь вставим эту функцию в наш скрипт

Получится так:

Lua:
require "lib.moonloader"

function main()
    if not isSampfuncsLoaded() or not isSampLoaded() then return end
    while not isSampAvailable() do wait(100) end
    sampRegisterChatCommand('parsnicks', parsnicks)
    while true do
    wait(0)

    end
end

function parsnicks(filename) -- название функции а в скобках то что она принимает, я сделал чтобы принимало имя файла в который будем записывать
    if filename ~= nil then -- проверяем что юзер ввел имя файла
        if not doesFileExist(filename..'.txt') then -- проверяем что такого файла не существует
            local f = io.open(filename..'.txt', 'a+') -- создаем файл с именем который ввел юзер, только добавляем расширение
            local count = 0 -- делаем переменную в которой будем считать сколько ников записано | local - значит будет действовать только в этой функции
            for i = 0, 1004 do -- начинаем перебор чиклом for, от нулевого ида до 1004
                if sampIsPlayerConnected(i) then -- проверяем подключен ли игрок с таким идом
                    playername = sampGetPlayerNickname(i) -- если подключен получаем его ник
                    f:write(playername..'\n') -- записываем ник в файл
                    count = count + 1 -- добавляем в переменную 1, ибо записали ник
                end
            end
            sampAddChatMessage('Записано ников в файл: '..count, -1) -- после цикла for нам выведет сколько ников записано
            f:close() -- закрываем файл
        else
            sampAddChatMessage(string.format("Файл %s уже существует, введите другое имя.", filename..'.txt'), -1) -- если файл который указал юзер существует то уведомим его об этом
        end
    else
        sampAddChatMessage('/parsnicks filname | вводим команду и имя файла в который ники сохранятся', -1) -- выводим если команда введена без названия файла
    end
end

Можем сохранить и пойти протестить в игру, прописав там команду в чате /parsnicks berlin
дальше свернем в игру, зайдем в папку с ГТА и увидим файл berlin.txt с таким содержанием
nPdIEpg.png


Вот и все, парсер готов
csqAzut.png
 
  • Нравится
Реакции: Rei и HubbaBubbkin

ufdhbi

Известный
Автор темы
Проверенный
1,456
861
Прикол, передал в parsnicks цифру/число и скрипт лег, кекеке.
Файл создастся в корне игры, а стандарт слегка против
Имя файла не может быть цифрами обозначено?
где создастся файл решит тот кто будет это копипастить, ему не сложно же будет дописать ''moonloader\\"..filename..".txt"
 
  • Нравится
Реакции: Patrickkk

AnWu

Guardian of Order
Всефорумный модератор
4,683
5,129
Имя файла не может быть цифрами обозначено?
где создастся файл решит тот кто будет это копипастить, ему не сложно же будет дописать ''moonloader\\"..filename..".txt"
"Не сложно" понятие растяжимое, если это гайд, то тут всё должно быть прямо и без "сам допишет". Буквально по строкам расписать что да как! Да и в теории зачем это не совсем понимаю
 
  • Нравится
Реакции: applethecandy

Matthew3321AS

Новичок
19
0
Имя файла не может быть цифрами обозначено?
где создастся файл решит тот кто будет это копипастить, ему не сложно же будет дописать ''moonloader\\"..filename..".txt"
Вообще никуда не идет сохранение файла с никами, с чем мб связано?
 
Статус
В этой теме нельзя размещать новые ответы.