Форум Pawn.Wiki - Воплоти мечту в реальность!: Использование MxINI - Форум Pawn.Wiki - Воплоти мечту в реальность!

Перейти к содержимому

  • (2 Страниц) +
  • 1
  • 2
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

[ Урок ]
Использование MxINI Использование инклуда
Оценка: ***** 1 Голосов

#1
Пользователь офлайн   VistigoN4ik 

  • The Lost World Forever
  • Вставить ник
  • Раскрыть информацию
Инклуд MxINI

Что это такое? Для чего он требуется?
Это инклуд, содержащий функции для чтения/записи файлов.

Чем он вам пригодиться?
Оформление файла
Скрытый текст [Показать]


Скорость

Скрытый текст [Показать]



Функции инклуда
Создание файла:

ini_createFile("адрес/файла.ini", "Содержимое файла по умолчанию");  
//или  
ini_createFile("адрес/файла.ini");  
//создаст файл если его нету, иначе вернет код ошибки  

Открытие файла:

ini_openFile("путь/к/файлу.ini");//откроет файл если он сущ-ет, иначе вернет код ошибки  

Закрытие/сохранение файла:

ini_closeFile(ID_открытого_файла);  

Запись текста в файл:

ini_setString(ID_открытого_файла, "имя ключа", "текстовое значение");  

Запись числа в файл:

ini_setInteger(ID_открытого_файла, "имя ключа", 123456);   

Запись float значения в файл:

ini_setFloat(ID_открытого_файла, "имя ключа", 3.1416);  

Чтение текста из файла:

ini_getString(ID_открытого_файла, "имя ключа", returnValue);   


Чтение числа из файла:

ini_getInteger(ID_открытого_файла, "имя ключа", returnValue);  

Чтение float значения из файла:

ini_getFloat(ID_открытого_файла, "имя ключа", returnValue);  

Удаление ключа из файла:

ini_removeKey(ID_открытого_файла, "имя ключа");   

Вернуть код ошибки:

ini_removeKey(ID_открытого_файла, "имя ключа");   

Доп. Функции, потребующиеся для работы (DEFAULT):
Проверка на существование файла:

fexist("адрес/файла.ini");   

Удаление файла:

fremove("адрес/файла.ini");   

Также можно добавить пару дефайнов:

#define ini_existFile fexist  
#define ini_removeFile fremove   

для удобство использования, например:

ini_existFile("адрес/файла.ini");//Проверка на существование файла  
ini_removeFile("адрес/файла.ini");//Удаление файла   

Дополнительные нестандартные функции которые могут пригодиться (DEFAULT):

#define ini_setBool(%1,%2,%3) %3?ini_setInteger(%1,%2,1):ini_setInteger(%1,%2,0)  
stock ini_getBool(fileID,key[],&bool:Value)  
{  
new testint;  
ini_getInteger(fileID,key,testint);  
if(testint <= 0) Value = false;  
else Value = true;  
return 1;  
} 

C помощью этих функций вы сможете записать/прочитать из файла бинарные значения(true & false).

Пример:

  new file = ini_createFile("тест_инклуда.ini");  
    new returnString[32], returnNumber, Float: returnFloat;  

    ini_setString(file, "ключ со строкой", "текстовое значение");  
    ini_setInteger(file, "ключ с числом", 123456);  
    ini_setFloat(file, "ключ с дробью", 3.1416);  

    ini_getString(file, "ключ со строкой", returnString);  
    ini_getInteger(file, "ключ с числом",  returnNumber);  
    ini_getFloat(file, "ключ с дробью",  returnFloat);  

    ini_closeFile(file);  

    printf ( "\n `ключ_со_строкой` = `%s`,\n `ключ_с_числом` = `%d`,\n `ключ_с_дробью` = `%f` \n",  
        returnString, returnNumber, returnFloat);  

Регистрация с помощью mxINI:

public OnPlayerCommandText(playerid, cmdtext[])  
{  
    if (strcmp("/mycommand", cmdtext, true, 10) == 0)  
    {  
        return 1;  
    }  
    if(strcmp( cmdtext, "/register", true, 9) == 0)// если игрок ввел в чате /register  
    {  
        new FileName[30];GetPlayerName(playerid, FileName, 30);// узнаем ник игрока  
        format(FileName, 30, "%s.ini", FileName);  

        if(fexist(FileName)) return SendClientMessage(playerid, 0xFF00000AA, " * Этот аккаунт уже зарегистрирован! Выбери другой ник.");// если файл для этого ника уже существует  
        if(cmdtext[9] == 0 || cmdtext[10] == 0) return SendClientMessage(playerid, 0xFF00000AA, " * Не указан пароль! Формат: /register пароль");// если не указан пароль  

        new File = ini_createFile(FileName);// создадим файл с именем игрока  

        if (File >= 0) // если файл создан  
        {  
            ini_setString(File, "Пароль", cmdtext[10]);  
            ini_closeFile(File);  
            SendClientMessage( playerid, 0x00FF00AA, " * Аккаунт успешно зарегистрирован! Используй /login, чтобы войти в него." );  
            return 1;  
        }else{  
            // если не удалось создать файл  
            SendClientMessage( playerid, 0xFF00000AA, " * Не удалось создать файл для аккаунта! Попробуй еще раз. " );  
            printf("%s", ini_getErrorInfo(File));//выведем описание ошибки в лог  
            return 1;  
        }  
    }  
    if(strcmp( cmdtext, "/login", true, 6) == 0)// если игрок ввел в чате /register  
    {  
        new FileName[30];GetPlayerName(playerid, FileName, 30);// узнаем ник игрока  
        format(FileName, 30, "%s.ini", FileName);  

        if(!fexist(FileName)) return SendClientMessage(playerid, 0xFF00000AA, " * Этот аккаунт не зарегистрирован! Введите /register пароль.");// если файл для этого ника не существует  
        if(cmdtext[6] == 0 || cmdtext[7] == 0) return SendClientMessage(playerid, 0xFF00000AA, " * Не указан пароль! Формат: /login пароль");// если не указан пароль  

        new File = ini_openFile(FileName);// откроем файл с именем игрока  
        ini_getString(File, "Пароль", FileName);  
        ini_closeFile(File);  
        if(strcmp(cmdtext[7], FileName, true, 10) == 0)  
        {  
            SendClientMessage( playerid, 0x00FF00AA, " * Вы успешно вошли.");  
        }else return SendClientMessage(playerid, 0xFF00000AA, " * Не верный пароль!");  
    }  
    return 0;  
}  
 

Тест скорости между инклудами (Dini VS Fini VS MxINI):
Как проходит тест:
Каждой библиотеке нужно будет создать и открыть INI файл, записать в него 100 ключей, прочесть значения этих ключей, закрыть файл. Для точных показаний, тест проходит 5 раз подряд.

Вот результаты:
Все показания в миллисекундах (1 секунда = 1000 миллисекунд (ms)

Скрытый текст [Показать]


Ссылки:
Исходник на PASTEBIN.COM
ZIP Архив (прямая ссылка)
FS для тестирования

Автор урока: Frog163
5

#2
Пользователь офлайн   Rock & Roll 

  • Эксперт
  • Вставить ник
  • Раскрыть информацию
Было.
0

#3
Пользователь офлайн   VistigoN4ik 

  • The Lost World Forever
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияRock & Roll (07 ноября 2013 - 03:03) писал:

Было.

Ссылочку в студию тогда, раз было
0

#4
Пользователь офлайн   Luppy 

  • Потерявшийся.
  • Вставить ник
  • Раскрыть информацию
Не увидел тут достаточно важной информации, что скрипты работают исключительно в папке scriptfiles.
0

#5
Пользователь офлайн   VistigoN4ik 

  • The Lost World Forever
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияLuppy (05 января 2014 - 13:47) писал:

Не увидел тут достаточно важной информации, что скрипты работают исключительно в папке scriptfiles.


Ну это можно использовать как памятку, например. Пишешь что-нибудь вдруг забыл как файл проверить... залез и вот оно :D
0

#6
Пользователь офлайн   Vibe 

  • Прохожий
  • Вставить ник
  • Раскрыть информацию
Спасибо большое за урок! Должен сказать урок один из лучших, понятен для новичков как я!
0

#7
Пользователь офлайн   FunnyArt 

  • Прохожий
  • Вставить ник
  • Раскрыть информацию
Спасибо за урок!
0

#8
Пользователь офлайн   komptip 

  • Пользователь
  • Вставить ник
  • Раскрыть информацию
Как создать на mxINI систему спавна, что-бы сервер понимал когда спавнить игрока в одном месте,а когда в другом.Просто на сервере который я сейчас делаю будет локация на которой игрок должен будет побывать лишь один раз,в самом начале.Я зделал так,что-бы когда игрок входил в чекпоинт который тепепортирует его из локации,ему в файле сменялось значение с 0 на 1,но этого не происходит,вот код

if(pickupid == BXOD[0])
{
SetPlayerPos(playerid,1059.7963,1280.9338,10.8203);
new PlayerName[MAX_PLAYER_NAME];
GetPlayerName(playerid,PlayerName,sizeof(PlayerName));
new account[128];
format(account,sizeof(account),"users/%s.ini",PlayerName);
if(fexist(account)) return ini_openFile("users/%s.ini");
new iniFile = ini_openFile(account);
ini_setInteger(iniFile, "Спавн", 1);
ini_closeFile(iniFile);
}
0

#9
Пользователь офлайн   M I S T E V 

  • Вставить ник
  • Раскрыть информацию
1. Используй нормально mxINI (Мой 3-й урок).
2. Покажу пример:
В enum'e об игроке создаёшь новую переменную
enum 
{
    bool:check_local,
}

Теперь, когда он становится на пикап делай проверку
if(pInfo[playerid][check_local] == false)
{
    //впускаешь его
}
else
{
    //не впускаешь
}

0

#10
Пользователь офлайн   a.kriklenko 

  • Прохожий
  • Вставить ник
  • Раскрыть информацию
ini_setInteger(ID_открытого_файла, "имя ключа", 123456);



А где брать ID_открытого_файла и "Имя ключа"?
0

Поделиться темой:


  • (2 Страниц) +
  • 1
  • 2
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей


Яндекс.Метрика