Уроки Pawno: инклуды Dini и mxINI

Данный урок расскажет вам о функциях инклудов Dini и mxINI. Так-же вы научитесь пользоваться данными инклудами.
Приветствую дорогих читателей.
Задался вопросом, что почему-то долго не писал статейки сюда. Посмотрев категорию "Учебники" в файловом архиве GTA SA, я подумал - там что-то очень мало хороших качественных учебников, и я решил написать свой, как говорится продолжить начатую работу. Так как связь с BadMan'ом держать в скайпе не могу, пишу лично от себя.
Начну со слова Инклуд.
Include (Инклуд) - это система функций для скрипта. Основным инклудом является "a_samp" - он всегда должен быть в скриптах.
Сегодня мы изучим два простых инклуда - Dini и mxINI. Для тех, кто не знает, что это за инклуды - это простые файловые инклуды для SAMP сервера. То есть файловая система для SAMP. Данная файловая система не служит для связки сайта и сервера - этим занимается MySQL или даже SQLite, о которых я напишу чуть позже (в следующих уроках).
Как записать include?
# - подключение
include - обозначение подключения инклуда
IncName - как уже понятно - название инклуда.
В основном люди пишут название инклуда без формата файла (например #include a_samp), но и с форматом тоже правильно, и ошибкой не считается (например #include a_samp.inc). Мы будем подключать один из двух инклудов - Dini и mxINI (если они имеются в папке "Ваш_Сервер/pawno/includes")
#include Dini
Итак - чем же всё-таки различаются данные системы?
Dini - Более функциональная файловая система в плане названий функций, но она медленно передаёт и получает значения.
mxINI - Менее функциональная файловая система в плане названий функций, но быстрей получает значения.
В прошлых уроках мы изучали функции вызова сообщений в чат или на экран (Send...Message, GameText...). Так вот тут они могут нам понадобится. Мы не проходили форматирование текста. Чтобы продолжить, нам понадобится функция форматирования.
format - название функции форматирования
name - название форматированного текста (должен быть определённый массив "New")
sizeof(name) - переменная от массива name
"Text" - текст внутри форматирования
Что он из себя представляет? Обычный текст, в который можно вставить определённые заданные значения/названия.
Собственно какие значения/названия:
%d - интегрированное числовое значение (например playerid)
%i - интегрированное значение (заданное определённым массивом "New")
%c - символ
%f - десятичное числовое значение (например расстояние до определённой точки)
%x - номер
%% - процент значения
И, наконец, Text Strings - значение текста (приведённого в CODE (%s, %d и т.д.))
Создадим простой текст:
new name[24]; // Создаём массив в 24 символа - максимальное количество символов в имени игрока (вместо name может быть любое другое слово, только если вы собрались менять его - меняйте все name массивы в коде)
GetPlayerName(playerid, name, 24); //Узнаём имя игрока (можно использовать ещё так: GetPlayerName(playerid, name, sizeof(name)); - sizeof(name) само определит, какое значение переменной у массива name)
format(code, 30, "Ваш ник %s, ваш ID - %d", name, playerid);//Проверяем ник игрока и его ID
SendClientMessage(playerid, -1, code);// Отправим отформатирование сообщение "code" в чат белым цветом (-1)
Довольно простенькая функция.
Итак. Теперь начнём изучение данных файловых систем. Начнём с проверки на имеющийся файл.
Dini:
filename.fmt - название файла в кавычках (можно использовать отформатированный текст). В конце filename должен быть формат файла (например .txt, или .ini, или .cfg и т.д.)
mxINI:
Данной функции не имеется, но можно использовать стандартную файловую систему:
filename.ini - такой-же как на Dini, но для mxINI читается только .ini формат
Например сделаем проверку на существующий файл main.txt (сохраняется всё и читается всегда с папки scriptfiles) на Dini
Или же на FSAMP (Стандартная файловая система, так как mxINI не имеет такой функции)
Следующей функцией будет создание файла.
Dini:
filename.fmt - как обычно
mxINI:
new file - Создаём файл
filename.ini - как обычно, но формат .ini
Например создадим простой файл на Dini
if(dini_Exists(Main.txt)) SendClientMessage(playerid, 0xFF00FFFF, "Файл Main.txt создан");
И на mxINI:
if(fexist(Main.ini)) SendClientMessage(playerid, 0xFF0000FF, "Файл Main.ini создан");
Следующей функцией будет открытие файла.
Dini:
Данной функции не имеется, но она и не нужна, так как dini_Exists("filename") сразу открывает файл.
mxINI:
Например откроем файл на mxINI (так как пример с Dini - dini_Exists уже разобран)
Следующей функцией будет закрытие файла.
Dini:
В Dini не понадобится данная функция, так как файл не открывается, а проверяется и сразу читается при установке значений (функции ниже)
mxINI:
file - это созданный массив с переменной файла
Например откроем и закроем файл на mxINI:
ini_closeFile(FileName);
Следующей функцией будет удаление файла.
Dini:
mxINI:
Данной функции не имеется, но можно использовать стандартную файловую систему:
Например создадим и удалим файл на Dini:
dini_Remove("Main.ini");
и на mxINI
fremove("Main.ini");
Следующими функциями будут записи в файл.
Dini:
dini_IntSet("filename.fmt", "Line", value); //Установка числового значения
dini_FloatSet("filename.fmt", "Line", floatvalue); //Установка числового десятичного значения
dini_BoolSet("filename.fmt", "Line", boolsmb);//Установка правдивого/лживого значения
filename.fmt - Название файла с форматом
Line - Строка (название)
Text - Текст в строке
value - числовое значение
floatvalue - десятичное числовое значение
boolsmb - значения правдивое/лживое (тут только true или false)
mxINI:
ini_SetInteger(File, "Line", value); //Установка числового или правдивого/лживого (1 или 0) значения
ini_setFloat(File, "Line", floatvalue); //Установка числового десятичного значения
File - созданный файл (new File = ini_...File("filename.ini")
Line - строка
Text - текст
value - числовое значение (для лживого/правдивого используются 1 или 0)
floatvalue - десятичное значение
Например создадим файл с тестовыми (TEST) данными на Dini:
dini_Set("main.txt", "Тест", "Это строка обозначает тестовое значение"); // Допустим в строку Тест напишется текст "Это строка обозначает тестовое значение"
dini_IntSet("main.txt", "Значение", 5); //Допустим значение = 5
dini_FloatSet("main.txt", "Десятичное значение", 10.261); //Допустим запишем значение 10 целых, 261 тысячная.
dini_BoolSet("main.txt", "Этот файл есть в папке scriptfiles?", true); // Записано значение true к обычному, ничего не делающему тексту
dini_Remove("main.txt");
Дальше mxINI:
ini_setString(Test, "Строка", "Это действительно строка"); //Создадим строку "Строка", и запишем в неё текст "Это действительно строка"
ini_setInteger(Test, "Сейчас какой год?", 2013); //Создадим строку про год, и запишем в неё информацию о данном году.
ini_setFloat(Test, "Максимально допустимое значение", 12.5); //В строку со значением запишем десятичное число
fremove("Main.ini");
Следующими функциями будут чтения файлов
Dini:
dini_Int("filename.fmt", "Line"); // Чтение числового значения со строки
dini_Float("filename.fmt", "Line"); // Чтение десятичного значения со строки. Проверка записывается через "new Float:NAME" (пример ниже)
dini_Bool("filename.fmt", "Line"); // Чтение булового (true/false) значения со строки. Проверка записывается через "new bool:NAME" (пример ниже)
mxINI:
ini_getInteger(File, "Line", returnSave); //Чтение числового/булового (true/false) значения строки, и сохранение этого значения
ini_getFloat(File, "Line", returnSave); //Чтение десятичного значения строки, и сохранение этого значения
File - созданный файл (new File = ini_...File("filename.ini")
Line - Строка
returnSave - сохранение (объявлять через new)
Например прочитаем созданные выше значения через Dini:
{
SendClientMessage(playerid, 0xFF0000FF, dini_Get("Main.txt", "Тест")); //Определим строку с текстом, прочитаем, и сразу же выведем
SendClientMessage(playerid, 0x00FF00FF, dini_Int("Main.txt", "Значение")); //Определим строку со значением, прочитаем, и сразу же выведем
SendClientMessage(playerid, 0x0000FFFF, dini_Float("Main.txt", "Десятичное значение")); //Определим строку с десятичным значением, прочитаем, и сразу же выведем
SendClientMessage(playerid, 0xFFFF00FF, dini_Bool("Main.txt", "Этот файл есть в папке scriptfiles?")); //Определим строку с буловым (true/false) значением, прочитаем, и сразу же выведем
}
И сделаем такое же действие на mxINI:
{
new Req = ini_openFile("Main.ini"); //То откроем его
new returnStr[18], returnInt, returnFloat;
ini_getString(Req, "Строка", returnStr); //Определим строку, и запишем её данные в returnStr
ini_getInteger(Req, "Сейчас какой год?", returnInt); //Определим строку, и запишем её данные в returnInt
ini_getFloat(Req, "Максимально допустимое значение", returnFloat); //Определим строку, и запишем её данные в returnFloat
SendClientMessage(playerid, 0xFF0000FF, returnStr); //Выведем полученное из строки с текстом
SendClientMessage(playerid, 0x00FF00FF, returnInt); //Выведем полученное из строки со значение
SendClientMessage(playerid, 0x0000FFFF, returnFloat); //Выведем полученное из строки с десятичным значением
ini_closeFile(Req); //А потом закроем открытый файл
}
Следующими функциями будут специальные файловых систем
Dini:
dini_Unset("filename.fmt", "Line"); // Удаления значения одной любой строки (Srt, Float, Bool, Int)
mxINI:
ini_getErrorInfo("Error"); //Информация об ошибке в текстовом виде (про данную функцию ничего не известно, так как в инклуде нет stock'a с данной функцией)
Например сделаем простенькую функцию на Dini:
{
if(!dini_Isset("Main.txt", "Тест")) //То проверяем, свободна ли строчка "Тест"
{
dini_Unset("Main.txt", "Тест"); //Если занята, то очищаем её
}
else if(dini_Isset("Main.txt", "Тест")) //Но если свободна
{
dini_Set("Main.txt", "Тест", "Просто строка с этими 9ю словами и одной цифрой"); //То устанавливаем ей значение
}
}
На этом мой урок по функциям файловой системы закончен, удачи в скриптинге.
Рекомендуемые файлы

GTA-SA Crazy IMG Editor

Русификатор Smarter's Localization v2.0

GTA SA 2.00 +ANDROID 11 FIX + FLM 6.0

CLEO 4

Вид от первого лица v3.0 (by BoPoH)

TXD Workshop 5.0

Сохранение gta sa на 100%

Gta_sa.exe v 1.0 us

GTA Garage Mod Manager 2.3C

CLEO GTA SA 2.0 без Root прав

Mod Loader

Magic.TXD 1.0 (Редактор TXD-архивов RenderWare)

Библиотека CLEO 4 (4.3.16)

Универсальный биндер 2.3 by Квас
