Парсим ники 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)
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 с таким содержанием
Вот и все, парсер готов