Регистрация на mxINI New.pwn

Описание: Уроки по скриптингу
Модератор: SJplayer

Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1608
Зарегистрирован: 5 апреля 2013
С нами: 10 лет 11 месяцев

#1 Дим » 14 апреля 2013, 15:25

Первым делом удаляем лишний код из мода:


Лишний код

Код: Выделить всё

#if defined FILTERSCRIPT

public OnFilterScriptInit()
{
    print("\n--------------------------------------");
    print(" Blank Filterscript by your name here");
    print("--------------------------------------\n");
    return 1;
}

public OnFilterScriptExit()
{
    return 1;
}

#else

main()
{
    print("\n----------------------------------");
    print(" Blank Gamemode by your name here");
    print("----------------------------------\n");
}

#endif     

Потом подключаем инкуд mxini, для этого ко всем #include добавляем:

Код: Выделить всё

#include <mxini>                                        


Далее создаём переменные для игрока, для этого после всех инклудов вставляем;

Код: Выделить всё

enum pInfo { //если надо меняйте на свои
pMoney, // Сохраняет кол-во денег.
pHouse,// ID первого дома (переменные делайте свои)
pHouse1,// ID второго дома
pHouse2,// ID третьего дома
pNHouse // кол-во домов у игрока (Последняя строка без запятой)
};
new PlayerInfo[MAX_PLAYERS][pInfo];
forward SaveAccounts();// форвард для паблика который создадим позднее.        


Для вывода меню, в паблик - public OnPlayerConnect(playerid)

Код: Выделить всё

public OnPlayerConnect(playerid)
{
    new PlayerName[500];
    GetPlayerName(playerid,PlayerName,sizeof(PlayerName)); //узнаем ник 
    new account[128];
    format(account,sizeof(account),"Users/%s.ini",PlayerName); // ищем аккаунт
    // Если нашли, то выводим окно "Авторизация"
    if(fexist(account)) return ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT, "Авторизация", "Введите свой пароль", "Войти", "");
        else  // Если игрок найден, то авторизация
    {
        ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT, "Регистрация", "Введите пароль:", "Войти", "");
    }
    PlayerInfo[playerid][pMoney] = 0; // При регистрации 0 денег
    PlayerInfo[playerid][pHouse] = 0; // 0 домов...
    PlayerInfo[playerid][pHouse1] = 0;
    PlayerInfo[playerid][pHouse2] = 0;
    PlayerInfo[playerid][pNHouse] = 0;
    return true;
}


А теперь создаём действия для этих меню.
В паблик public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])

Код: Выделить всё

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    new PlayerName[MAX_PLAYER_NAME];
    GetPlayerName(playerid,PlayerName,sizeof(PlayerName));// Узнаем ник игрока
    new account[128];
    format(account,sizeof(account),"Users/%s.ini",PlayerName);// Создаем аккаунт
    if(dialogid == 1) // Регистрация
    {
        if(!strlen(inputtext)) return ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT, "Регистрация", "Придумайте себе пароль", "Войти", ""); 
        if
(response)
        {
            GetPlayerName(playerid,PlayerName,sizeof(PlayerName)); //узнаем ник
            format(account,sizeof(account),"Users/%s.ini",PlayerName);//ищем акк
            if(fexist(account)) return ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT, "Авторизация", "Введите свой пароль", "Войти", ""); 
            new iniFile 
= ini_createFile(account); // Создаем аккаунт
            if(iniFile < 0) ini_openFile (account); // Если файл пустой, то откроем и ...
            {
                ini_setString(iniFile,"Password",inputtext); // Запишем пароль для игрока
                ini_setInteger(iniFile, "Money", 0); // Запишем кол-во денег для игрока
                ini_setInteger(iniFile, "House", 0); //дома
                ini_setInteger(iniFile, "House1", 0);
                ini_setInteger(iniFile, "House2", 0);
                ini_setInteger(iniFile, "NHouse", 0);
                ini_closeFile(iniFile); // Закроем файл
            }
        }
        else //проверка Esc'ейпа
        {
            ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT, "Регистрация", "Придумайте себе пароль", "Войти", "");
        }
    }
    if(dialogid == 2)
    {
        if(!strlen(inputtext))return ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT, "Авторизация", "Введите свой пароль:", "Войти", ""); 
        if
(response)// Проверка на кнопку "ОК" и Enter
        { 
            new password
[64];
            GetPlayerName(playerid,PlayerName,sizeof(PlayerName));
            format(account,sizeof(account),"Users/%s.ini",PlayerName);
            new iniFile = ini_openFile(account);
            {
                ini_getString(iniFile, "Password",password); // Узнаём пароль аккаунта.
                if(!strcmp(inputtext, password, true))
                {
                    ini_getInteger(iniFile,"Money", PlayerInfo[playerid][pMoney]); // Запишем кол-во денег игроку
                    ini_getInteger(iniFile,"House",PlayerInfo[playerid][pHouse]); // дома
                    ini_getInteger(iniFile,"House1",PlayerInfo[playerid][pHouse1]);
                    ini_getInteger(iniFile,"House2",PlayerInfo[playerid][pHouse2]);
                    ini_getInteger(iniFile,"NHouse",PlayerInfo[playerid][pNHouse]);
                    GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]); // Количество денег у игрока
                    format(account, sizeof(account), "Вы вошли в свой аккаунт: "%s".",PlayerName);
                    SendClientMessage(playerid, 0xFFFF00FF,account);// Напишет в чат
                    ini_closeFile(iniFile);// закроем файл
                }
                else//проверка Esc'ейпа
                {
                ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT, "Авторизация", "Введите свой пароль:", "Войти", "");
                SendClientMessage(playerid, 0xF60000AA, "Неверный пароль. Попробуйте ещё раз.");
                }
            }
        }
        else//проверка Esc'ейпа
        {
            ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT, "Авторизация", "Введите свой пароль:", "Войти", "");
        }
    }
    return true;
}


Создаём новый паблик - public SaveAccounts(), ко всем пабликам добавим

Код: Выделить всё

public SaveAccounts()
{
    for(new f; f < GetMaxPlayers(); f++)
    {
        if(!IsPlayerConnected(f))continue;
        SaveAccount(f);
    }
}


В конце мода добавляем сток, который и будет выполнять все функции сохранения и записи данных

Код: Выделить всё

stock SaveAccount(playerid) // Сохраняет данные
{
    new PlayerName[MAX_PLAYER_NAME], account[128];
    GetPlayerName(playerid,PlayerName,sizeof(PlayerName));
    format(account,sizeof(account), "Users/%s.ini", PlayerName);
    new iniFile = ini_openFile(account);// откр. файл
    ini_setInteger(iniFile, "Money", GetPlayerMoney(playerid));// записываем
    ini_setInteger(iniFile, "House", PlayerInfo[playerid][pHouse]);
    ini_setInteger(iniFile, "House1", PlayerInfo[playerid][pHouse1]);
    ini_setInteger(iniFile, "House2", PlayerInfo[playerid][pHouse2]);
    ini_setInteger(iniFile, "NHouse", PlayerInfo[playerid][pNHouse]);
    ini_closeFile(iniFile);// закрываем
    return 1;
}


Для сохранения при выходе из игры, в паблик public OnPlayerDisconnect(playerid, reason)

Код: Выделить всё

public OnPlayerDisconnect(playerid, reason)
{
    SaveAccount(playerid); // Сохранение аккаунтов
    return true;
}


С модом работу мы закончили, теперь открываем папку с сервером и в папке scriptfiles создаём новую папку Users, в которой и будут сохраняться файлы игроков.


Всё! Заходим в игру регистрируемся, выходим из игры. Открываем папку scriptfiles --> Users и видим там файлик ваш ник.ini.

Код: Выделить всё

Password = 123
Money 
= 0
House 
= 0
House1 
= 0
House2 
= 0
NHouse 
= 0
[center]i love you [s]mxIni[/s] Mysql[/center]


андрюха
Аватара
андрюха
Сообщения: 1
Зарегистрирован: 13 августа 2014
С нами: 9 лет 7 месяцев

#2 андрюха » 13 августа 2014, 21:52

почему не доконца???аа)

Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1608
Зарегистрирован: 5 апреля 2013
С нами: 10 лет 11 месяцев

#3 Дим » 14 августа 2014, 8:53

андрюха писал(а):почему не доконца???аа)
Какой тебе конец то нужен?
[center]i love you [s]mxIni[/s] Mysql[/center]

Тошик118
Рядовой
Рядовой
Аватара
Тошик118
Рядовой
Рядовой
Сообщения: 5
Зарегистрирован: 2 марта 2016
С нами: 8 лет

проблема

#4 Тошик118 » 2 марта 2016, 21:37

не сохраняет акк и нет авторизации :cry:

Код: Выделить всё

#include <a_samp>
#include <mxINI>
#include <dc_cmd>

/*================[ЦВЕТА]================*/
#define COLOR_GREY 0xAFAFAFAA
#define COLOR_PINK 0xFF66FFAA
#define COLOR_LIGHTBLUE 0x33CCFFAA
#define COLOR_BLUE 0x0000BBAA
#define COLOR_DARKBLUE 0x300FFAAB
#define COLOR_LIGHTRED 0xFF99AADD
#define COLOR_RED 0xAA3333AA
#define COLOR_DARKRED 0x660000AA
#define COLOR_ORANGE 0xFF9900AA
#define COLOR_LEMON 0xDDDD2357
#define COLOR_LIME 0x99FF00AA
#define COLOR_YELLOW 0xFFFF00AA
#define COLOR_LIGHTGREEN 0x24FF0AB9
#define COLOR_GREEN 0x33AA33AA
#define COLOR_DARKGREEN 0x12900BBF
#define COLOR_WHITE 0xFFFFFFAA

/*================[ДИАЛОГИ]================*/
#define DSL DIALOG_STYLE_LIST
#define DSM DIALOG_STYLE_MSGBOX
#define DSP DIALOG_STYLE_PASSWORD
#define DSI DIALOG_STYLE_INPUT
#define SPD ShowPlayerDialog

enum pInfo //если надо меняйте на свои
    
pMoney// Сохраняет кол-во денег.
    
pHouse,// ID первого дома (переменные делайте свои)
    
pHouse1,// ID второго дома
    
pHouse2,// ID третьего дома
    
pNHouse // кол-во домов у игрока (Последняя строка без запятой)
};
new 
PlayerInfo[MAX_PLAYERS][pInfo];
forward SaveAccounts();// форвард для паблика который создадим позднее.

public OnGameModeInit()
{
    
SetGameModeText("Blank Script");
    
AddPlayerClass(01958.37831343.157215.3746269.1425000000);
    return 
1;
}

public 
OnGameModeExit()
{
    return 
1;
}

public 
OnPlayerRequestClass(playeridclassid)
{
    
SetPlayerPos(playerid1958.37831343.157215.3746);
    
SetPlayerCameraPos(playerid1958.37831343.157215.3746);
    
SetPlayerCameraLookAt(playerid1958.37831343.157215.3746);
    return 
1;
}

public 
OnPlayerConnect(playerid)
{
    new 
PlayerName[500];
    
GetPlayerName(playerid,PlayerName,sizeof(PlayerName)); // Узнаем ник
    
new account[128];
    
format(account,sizeof(account),"Users/%s.ini",PlayerName); // ищем аккаунт,если нашли, то выводим окно "Авторизация"
    
if(fexist(account)) return ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT"Авторизация""Введите свой пароль""Войти""");
    else 
// Если игрок найден, то авторизация
    
{
        
ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT"Регистрация""Введите пароль:""Войти""");
    }
    
PlayerInfo[playerid][pMoney] = 118000// При регистрации 0 денег
    
PlayerInfo[playerid][pHouse] = 0// 0 домов...
    
PlayerInfo[playerid][pHouse1] = 0;
    
PlayerInfo[playerid][pHouse2] = 0;
    
PlayerInfo[playerid][pNHouse] = 0;
    return 
true;
}

public 
OnPlayerDisconnect(playeridreason)
{
    
SaveAccount(playerid); // сохранение аккаунтов
    
return true;
}

public 
OnPlayerSpawn(playerid)
{
    return 
1;
}

public 
OnPlayerDeath(playeridkilleridreason)
{
    return 
1;
}

public 
OnVehicleSpawn(vehicleid)
{
    return 
1;
}

public 
OnVehicleDeath(vehicleidkillerid)
{
    return 
1;
}

public 
OnPlayerText(playeridtext[])
{
    return 
1;
}

public 
OnPlayerCommandText(playeridcmdtext[])
{
    if (
strcmp("/mycommand"cmdtexttrue10) == 0)
    {
        
// Do something here
        
return 1;
    }
    return 
0;
}

public 
OnPlayerEnterVehicle(playeridvehicleidispassenger)
{
    return 
1;
}

public 
OnPlayerExitVehicle(playeridvehicleid)
{
    return 
1;
}

public 
OnPlayerStateChange(playeridnewstateoldstate)
{
    return 
1;
}

public 
OnPlayerEnterCheckpoint(playerid)
{
    return 
1;
}

public 
OnPlayerLeaveCheckpoint(playerid)
{
    return 
1;
}

public 
OnPlayerEnterRaceCheckpoint(playerid)
{
    return 
1;
}

public 
OnPlayerLeaveRaceCheckpoint(playerid)
{
    return 
1;
}

public 
OnRconCommand(cmd[])
{
    return 
1;
}

public 
OnPlayerRequestSpawn(playerid)
{
    return 
1;
}

public 
OnObjectMoved(objectid)
{
    return 
1;
}

public 
OnPlayerObjectMoved(playeridobjectid)
{
    return 
1;
}

public 
OnPlayerPickUpPickup(playeridpickupid)
{
    return 
1;
}

public 
OnVehicleMod(playeridvehicleidcomponentid)
{
    return 
1;
}

public 
OnVehiclePaintjob(playeridvehicleidpaintjobid)
{
    return 
1;
}

public 
OnVehicleRespray(playeridvehicleidcolor1color2)
{
    return 
1;
}

public 
OnPlayerSelectedMenuRow(playeridrow)
{
    return 
1;
}

public 
OnPlayerExitedMenu(playerid)
{
    return 
1;
}

public 
OnPlayerInteriorChange(playeridnewinterioridoldinteriorid)
{
    return 
1;
}

public 
OnPlayerKeyStateChange(playeridnewkeysoldkeys)
{
    return 
1;
}

public 
OnRconLoginAttempt(ip[], password[], success)
{
    return 
1;
}

public 
OnPlayerUpdate(playerid)
{
    return 
1;
}

public 
OnPlayerStreamIn(playeridforplayerid)
{
    return 
1;
}

public 
OnPlayerStreamOut(playeridforplayerid)
{
    return 
1;
}

public 
OnVehicleStreamIn(vehicleidforplayerid)
{
    return 
1;
}

public 
OnVehicleStreamOut(vehicleidforplayerid)
{
    return 
1;
}

public 
OnDialogResponse(playeriddialogidresponselistiteminputtext[])
{
    new 
PlayerName[MAX_PLAYER_NAME];
    
GetPlayerName(playerid,PlayerName,sizeof(PlayerName));// Узнаем ник игрока
    
new account[128];
    
format(account,sizeof(account),"Users/%s.ini",PlayerName);// Создаем аккаунт
    
if(dialogid == 1// Регистрация
    
{
        if(!
strlen(inputtext)) return ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT"Регистрация""Придумайте себе пароль""Войти""");
        if(
response)
        {
            
GetPlayerName(playerid,PlayerName,sizeof(PlayerName)); //узнаем ник
            
format(account,sizeof(account),"Users/%s.ini",PlayerName);//ищем акк
            
if(fexist(account)) return ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT"Авторизация""Введите свой пароль""Войти""");
            new 
iniFile ini_createFile(account); // Создаем аккаунт
            
if(iniFile 0ini_openFile (account); // Если файл пустой, то откроем и ...
            
{
                
ini_setString(iniFile,"Password",inputtext); // Запишем пароль для игрока
                
ini_setInteger(iniFile"Money"0); // Запишем кол-во денег для игрока
                
ini_setInteger(iniFile"House"0); //дома
                
ini_setInteger(iniFile"House1"0);
                
ini_setInteger(iniFile"House2"0);
                
ini_setInteger(iniFile"NHouse"0);
                
ini_closeFile(iniFile); // Закроем файл
            
}
        }
        else 
//проверка Esc'ейпа
        
{
            
ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT"Регистрация""Придумайте себе пароль""Войти""");
        }
    }
    if(
dialogid == 2)
    {
        if(!
strlen(inputtext))return ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT"Авторизация""Введите свой пароль:""Войти""");
        if(
response)// Проверка на кнопку "ОК" и Enter
        
{
            new 
password[64];
            
GetPlayerName(playerid,PlayerName,sizeof(PlayerName));
            
format(account,sizeof(account),"Users/%s.ini",PlayerName);
            new 
iniFile ini_openFile(account);
            {
                
ini_getString(iniFile"Password",password); // Узнаём пароль аккаунта.
                
if(!strcmp(inputtextpasswordtrue))
                {
                    
ini_getInteger(iniFile,"Money"PlayerInfo[playerid][pMoney]); // Запишем кол-во денег игроку
                    
ini_getInteger(iniFile,"House",PlayerInfo[playerid][pHouse]); // дома
                    
ini_getInteger(iniFile,"House1",PlayerInfo[playerid][pHouse1]);
                    
ini_getInteger(iniFile,"House2",PlayerInfo[playerid][pHouse2]);
                    
ini_getInteger(iniFile,"NHouse",PlayerInfo[playerid][pNHouse]);
                    
GivePlayerMoney(playeridPlayerInfo[playerid][pMoney]); // Количество денег у игрока
                    
format(accountsizeof(account), "Вы вошли в свой аккаунт: "%s".",PlayerName);
                    
SendClientMessage(playerid0xFFFF00FF,account);// Напишет в чат
                    
ini_closeFile(iniFile);// закроем файл
                
}
                else
//проверка Esc'ейпа
                
{
                
ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT"Авторизация""Введите свой пароль:""Войти""");
                
SendClientMessage(playerid0xF60000AA"Неверный пароль. Попробуйте ещё раз.");
                }
            }
         }
        else
//проверка Esc'ейпа
        
{
            
ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT"Авторизация""Введите свой пароль:""Войти""");
        }
    }
    return 
true;
}

public 
OnPlayerClickPlayer(playeridclickedplayeridsource)
{
    return 
1;
}

public 
SaveAccounts()
{
    for(new 
fGetMaxPlayers(); f++)
    {
        if(!
IsPlayerConnected(f))continue;
        
SaveAccount(f);
    }
}

stock SaveAccount(playerid// Сохраняет данные
{
    new 
PlayerName[MAX_PLAYER_NAME], account[128];
    
GetPlayerName(playerid,PlayerName,sizeof(PlayerName));
    
format(account,sizeof(account), "Users/%s.ini"PlayerName);
    new 
iniFile ini_openFile(account);// откр. файл
    
ini_setInteger(iniFile"Money"GetPlayerMoney(playerid));// записываем
    
ini_setInteger(iniFile"House"PlayerInfo[playerid][pHouse]);
    
ini_setInteger(iniFile"House1"PlayerInfo[playerid][pHouse1]);
    
ini_setInteger(iniFile"House2"PlayerInfo[playerid][pHouse2]);
    
ini_setInteger(iniFile"NHouse"PlayerInfo[playerid][pNHouse]);
    
ini_closeFile(iniFile);// закрываем
    
return 1;
}
 

LILU M
Подполковник
Подполковник
Аватара
LILU M
Подполковник
Подполковник
Сообщения: 468
Зарегистрирован: 5 апреля 2013
С нами: 10 лет 11 месяцев

#5 LILU » 2 марта 2016, 22:26

Тошик118, что ты этим хотел сказать?
P.S код оберни в PHP (кнопочка рядом с spoiler)

Тошик118
Рядовой
Рядовой
Аватара
Тошик118
Рядовой
Рядовой
Сообщения: 5
Зарегистрирован: 2 марта 2016
С нами: 8 лет

#6 Тошик118 » 3 марта 2016, 18:46

LILU писал(а):Тошик118, что ты этим хотел сказать?
P.S код оберни в PHP (кнопочка рядом с spoiler)
изменил,теперь видно проблему?
или помоги ты мне с регистрацией,в вк есть?

АртурKip
Аватара
АртурKip
Сообщения: 3
Зарегистрирован: 26 июня 2017
С нами: 6 лет 9 месяцев

#7 АртурKip » 27 июня 2017, 12:34

Извините , а продолжение будет?

Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1608
Зарегистрирован: 5 апреля 2013
С нами: 10 лет 11 месяцев

#8 Дим » 27 июня 2017, 12:48

продолжение чего?
[center]i love you [s]mxIni[/s] Mysql[/center]

АртурKip
Аватара
АртурKip
Сообщения: 3
Зарегистрирован: 26 июня 2017
С нами: 6 лет 9 месяцев

#9 АртурKip » 27 июня 2017, 16:29

Ну продолжение регистрации (кто пригласил, выбор пола и т.д)

Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1608
Зарегистрирован: 5 апреля 2013
С нами: 10 лет 11 месяцев

#10 Дим » 27 июня 2017, 16:35

По вышеизложенному уроку, все это можно сделать самому.
[center]i love you [s]mxIni[/s] Mysql[/center]


Вернуться в «Уроки»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 2 гостя