Fr33doM | Дата: Пятница, 23.03.2012, 02:40 | Сообщение # 1 |
.::Offline::.
Новичок
Сообщений: 7
[ 5 ]
Награды: 1
Статус
отсутствует
| Здравствуйте, думаю еще кто-то ищет регистрацию на Диалоговых окнах, думаю полезный урок будет
Для начала качаем инклюд Mxini Скачать Mxini.ini
Отлично, теперь в начале мода приписываем: Код [color=orange]#include[/color] [color=green]<mxINI>[/color]
Теперь ко всем массивам добавляем
Код enum pInfo { pMoney, // Сохраняет кол-во денег. Float:pHeal, // Сохраняет кол-во жизней. Float:pArmour, // Сохраняет кол-во брони. Kills,//сохраняет убийства Deaths//сохраняет смерти }; new PlayerInfo[MAX_PLAYERS][pInfo];// создадим массив со статистикой
Потом в public OnPlayerConnect(playerid): Код logged[playerid] = 0; new PlayerName[MAX_PLAYER_NAME]; GetPlayerName(playerid,PlayerName,sizeof(PlayerName)); // Получаем имя игрока new account[128]; format(account,sizeof(account),"users/%s.ini",PlayerName); //Создадим аккаунт { if(!fexist(account)) //Если такого аккаунта нет,то... { ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT, "Регистрация", "Зарегистрируйся \nПароль ниже:", "Регистр", ""); //Выдаем диалог с регой } else { ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT, "Авторизация", "Авторизуйся \nПароль нижу:", "Логин", ""); //Если аккаунт существует, то выдаем авторизацию } }
Идем в паблик public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]): Код if(dialogid == 1) //Регистрация { if(!strlen(inputtext)) return ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Регистрация", "Ну зарегистрируйся ты уже! \nПароль ниже:", "Ок", ""); if(response) { new PlayerName[MAX_PLAYER_NAME]; GetPlayerName(playerid,PlayerName,sizeof(PlayerName)); //Узнаем имя игрока new account[128]; format(account,sizeof(account),"users/%s.ini",PlayerName);//проверяем. Есть ли этот акк в папке users if(fexist(account)) return ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT, "Авторизация", "Авторизуйся! \n Пароль ниже:", "Логин", ""); //авторизуем его, если есть акк new iniFile = ini_createFile(account); //создаем акк if(iniFile < 0) ini_openFile (account); //если файл пустой, то { ini_setString(iniFile,"Пароль",inputtext); //Пароль ini_setInteger(iniFile, "Money", 5000); // Создаем файл аккаунта с кол-вом денег 5000 ini_setFloat(iniFile, "Heal", 100.0); // Создаем файл аккаунта с кол-вом Здоровья ini_setFloat(iniFile, "Armour", 100.0); // Создаем файл аккаунта с кол-вом Брони ini_setInteger(iniFile, "Kills", 0); // Ну тут убийства ini_setInteger(iniFile, "Deaths", 0); // Смерти ini_closeFile(iniFile); //закроем файл ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT, "Авторизация", "Авторизуйся:", "Логин", ""); } } else //Если этот вася захочет обойти регу и нажмет на Esc, то даем ему опять диалог { ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Регистрация", "Регистрируйся, червь:", "Ок", ""); } } if(dialogid == 2) { if(!strlen(inputtext)) return ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT, "Авторизация", "Авторизуйся! \nПароль ниже:", "Логин", ""); if(response) { new PlayerName[MAX_PLAYER_NAME], password[64]; GetPlayerName(playerid,PlayerName,sizeof(PlayerName)); new account[128]; format(account,sizeof(account),"users/%s.ini",PlayerName); if(IsPlayerNPC(playerid))return 1; new iniFile = ini_openFile(account); ini_getString(iniFile, "Пароль",password); // Узнаём пароль аккаунта. if(!strcmp(inputtext, password, true)) { ini_getInteger(iniFile, "Money", PlayerInfo[playerid][pMoney]); // Записываем данные в переменную ini_getFloat(iniFile, "Heal", PlayerInfo[playerid][pHeal]); ini_getFloat(iniFile, "Armour", PlayerInfo[playerid][pArmour]); ini_getInteger(iniFile,"Kills", PlayerInfo[playerid][Kills]); ini_getInteger(iniFile,"Deaths", PlayerInfo[playerid][Deaths]); SetPlayerHealth(playerid, PlayerInfo[playerid][pHeal]); SetPlayerArmour(playerid, PlayerInfo[playerid][pArmour]); GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]); ini_closeFile(iniFile); SpawnPlayer(playerid); return 1; } else { SendClientMessage(playerid, COLOR_RED, "Сервер: Пароль неверный"); ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "Авторизация", "Авторизуйся ты наконец:", "Ок", ""); return 1; } } else //Клавиша Esc { ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "Авторизация", "Авторизовывайся,рачок:", "Ок", ""); // выдаем диалог, если нажмет на кнопку Esc } }
Теперь идем в public OnPlayerDeath(playerid, killerid, reason): Код PlayerInfo[killerid][Kills]++;// добавляем килл убийце PlayerInfo[playerid][Deaths]++; //добавляем смерть убитому
Идем в начало мода вашего: Код forward SaveAccounts(playerid);//ко всем форвардам, сохранение акков new saveacctimer;// ко всем массивам, созздадим таймер для сохранения акков
В public OnGameModeInit(): Код saveacctimer = SetTimer("SaveAccounts", 200000, 1);// делаем таймер для сохранения акков
В public OnGameModeExit(): Код KillTimer(saveacctimer);
Ну и теперь создаем раздел для сохранения акков: Код public SaveAccounts(playerid) { for(new i=0; i<MAX_PLAYERS; i++) { new PlayerName[MAX_PLAYER_NAME], account[128]; GetPlayerName(i,PlayerName,sizeof(PlayerName)); format(account,sizeof(account), "users/%s.ini", PlayerName); new iniFile = ini_openFile(account); ini_setInteger(iniFile, "Money", GetPlayerMoney(i)); ini_setInteger(iniFile,"Kills", PlayerInfo[i][Kills]); ini_setInteger(iniFile,"Deaths", PlayerInfo[i][Deaths]); GetPlayerHealth(i,PlayerInfo[i][pHeal]); ini_setFloat(iniFile, "Heal", PlayerInfo[i][pHeal]); GetPlayerArmour(i,PlayerInfo[i][pArmour]); ini_setFloat(iniFile, "Armour", PlayerInfo[i][pArmour]); ini_closeFile(iniFile); SendClientMessage(i, COLOR_WHITE, "Аккаунт сохранен");// для теста добавим } return 1; }
Теперь создадим проверку на логин, чтобы игрок не смог писать в чат. В начало мода Код new logged[MAX_PLAYERS];// массив залогинности игрока=)
Далее вставляем в public OnPlayerText Код if(logged[playerid] == 0) { SendClientMessage(playerid, COLOR_GREY, "Сервер: Чтобы писать в чат, пожалуйста авторизуйтесь"); return 0; }
Объяснения: logged[playerid] = 0 - когда игрок не залогинен logged[playerid] = 1 - когда игрок залогинен
Вот и конец, урока, надеюсь помог
Автор урока: HaWk69
Скачать готовый скрипт :) -> (Автор: Fr33doM)
Сообщение отредактировал
[S]ilverbac[k] - Понедельник, 14.07.2014, 00:56 |
|
| |