No name
Дебютант
Всем привет, многие новички ломают голову с системой регистрации, сохранением и так далее
Чтобы облегчить вам жизнь выкладываю мануал
Используется файловая система mxINI
в начало мода вставляем:
ко всем new добавим
эта переменная будет отвечать за вторые деньги, т.е. за банковские
ко всем define добавляем
Здесь у нас все нужные цвета, и диалоги
Ко всем forward добавим
Ну я думаю вы уже поняли что она отвечает за сохранение аккаунта
Создадим массив в котором будут храниться все нужные для игрока переменные
После new добавим
Идем в OnGameModeInit
добавляем
Если у вас стоит стример то меняйте функцию на свою
В OnPlayerRequestClass добавим
эта строка будет убирать текст с банковскими деньгами при выборе скина
В OnPlayerConnect в самое начало поставим
сдесь у нас создается текст и высвечивается при конекте диалог с регистрацией
В OnPlayerDisconnect добавим
Как вы догадались это созраняет аккаунт и удаляет текстдрав у отключившегося игрока
В OnPlayerSpawn
Это высветит текст при спавне
в OnPlayerDeath
Здесь мы добавляем +1 очко для убившего и добавляем +1 смерть для убитого
Теперь добавим 2 команды
в OnPlayerCommandText добавляем
Если будет ругаться
то в начало этого паблика добавьте
Далее в OnPlayerKeyStateChange добавим
Т.е. если вы будете стоять на 3d тексте в любой из этих координат и нажмете на альт то у вас высветится диалог с банком
В OnPlayerUpdate добавим обновление денег
Дальше идем в OnDialogResponce
И туда добавляем все диалоги используемые регистрацией/банком
И теперь в самый конец мода поставим
Здесь все то, без чего ничего работать не будет, а именно диалоги и функции банка и сохранение аккаунтов
Все на этом урок закончен
Все вопросы и коментария пишите)
By Seregamil(это я и есть)
Чтобы облегчить вам жизнь выкладываю мануал
Используется файловая система mxINI
в начало мода вставляем:
PHP:
#include <mxINI>
PHP:
new Text:Bankirr[MAX_PLAYERS];//Textdraw for two money
ко всем define добавляем
PHP:
#define COLOR_BANK 0x80FF80AA//color
#define DIALOG_BANK 12343//dialog
#define DIALOG_BANKPUT 12344//dialog
#define DIALOG_BANKWITH 12345//dialog
#define DIALOG_BBALANCE 12346//dialog
#define COLOR_WHITE 0xFFFFFFAA//color
#define registerdialog 1//dialog
#define logindialog 2//dialog
Ко всем forward добавим
PHP:
forward SaveAccounts();//save player
Создадим массив в котором будут храниться все нужные для игрока переменные
После new добавим
PHP:
enum pInfo
{
pMoney,//money
Kills,//score
pAdmin,//admin level
pVip,//vip level
Deaths,///dead
Bank//bankmoney
};
new PlayerInfo[MAX_PLAYERS][pInfo];
добавляем
PHP:
Create3DTextLabel("Здесь вы можете вызвать меню банка\nВведите /bank", 0x008080FF, 2023.3757324219,1017.5886230469,10.463212013245, 40.0, 0, 0);
Create3DTextLabel("Здесь вы можете вызвать меню банка\nВведите /bank", 0x008080FF, 2173.9328613281,1402.9155273438,10.705399513245, 40.0, 0, 0);
Create3DTextLabel("Здесь вы можете вызвать меню банка\nВведите /bank", 0x008080FF, 2173.8796386719,1404.4167480469,10.766201972961, 40.0, 0, 0);
Create3DTextLabel("Здесь вы можете вызвать меню банка\nВведите /bank", 0x008080FF, 2085.6525878906,2047.5118408203,10.700798988342, 40.0, 0, 0);
Create3DTextLabel("Здесь вы можете вызвать меню банка\nВведите /bank", 0x008080FF, -281.01922607422,2603.9475097656,62.501052856445, 40.0, 0, 0);
Create3DTextLabel("Здесь вы можете вызвать меню банка\nВведите /bank", 0x008080FF, 1186.8385,-1382.0344,13.5633, 40.0, 0, 0);
Create3DTextLabel("Здесь вы можете вызвать меню банка\nВведите /bank", 0x008080FF, 241.2990,-1461.2467,13.6501, 40.0, 0, 0);
Create3DTextLabel("Здесь вы можете вызвать меню банка\nВведите /bank", 0x008080FF, 1829.9319,-1828.6980,13.5781, 40.0, 0, 0);
Create3DTextLabel("Здесь вы можете вызвать меню банка\nВведите /bank", 0x008080FF, 2307.8562,-1638.6473,14.8270, 40.0, 0, 0);
В OnPlayerRequestClass добавим
PHP:
TextDrawHideForPlayer(playerid, Bankirr[playerid]);
В OnPlayerConnect в самое начало поставим
PHP:
new PlayerName[MAX_PLAYER_NAME];
GetPlayerName(playerid,PlayerName,sizeof(PlayerName));
new account[128];
format(account,sizeof(account),"%s.ini",PlayerName);
if(!fexist(account))
{
ShowPlayerDialog(playerid,registerdialog,DIALOG_STYLE_INPUT, "Регистрация", "Вы должны зарегистрироваться! \nВведите ваш пароль:", "REGISTER", "");
}
else
{
ShowPlayerDialog(playerid,logindialog,DIALOG_STYLE_INPUT, "Авторизация", "Вы должны авторизоваться! \nВведите ваш пароль:", "LOGIN", "");
}
Bankirr[playerid] = TextDrawCreate(500,99,"_______");//500,99 - координаты размещения текстдрава.
TextDrawAlignment(Bankirr[playerid],0);//положение
TextDrawFont(Bankirr[playerid],3);//шрифт
TextDrawLetterSize(Bankirr[playerid],0.55,2.0);//0.55,2.0 - размеры текстдрава
TextDrawColor(Bankirr[playerid],0xFFA500AA);//цвет текстдрава - оражневый
TextDrawSetOutline(Bankirr[playerid],2);
TextDrawSetShadow(Bankirr[playerid],1);
В OnPlayerDisconnect добавим
PHP:
SaveAccount(playerid);//save player
TextDrawDestroy(Bankirr[playerid]);//destroy text bank
В OnPlayerSpawn
PHP:
TextDrawShowForPlayer(playerid, Bankirr[playerid]);
в OnPlayerDeath
PHP:
PlayerInfo[killerid][Kills]++;//+score
PlayerInfo[playerid][Deaths]++;//+dead
Теперь добавим 2 команды
в OnPlayerCommandText добавляем
PHP:
if(strcmp(cmd, "/sberbank", true) == 0)
{
if(GetPlayerMoney(playerid)<500)
{
return SendClientMessage(playerid,COLOR_WHITE,"У вас нету 500 рублей! Вы не можете оплатить использование услуги Сбербанк OnLine");
}
GivePlayerMoney(playerid,-500);
ShowBankMenuDialog(playerid);
return 1;
}
if(strcmp(cmd, "/bank", true) == 0)
{
if(IsPlayerInRangeOfPoint(2, playerid,2023.3757324219,1017.5886230469,10.463212013245) || IsPlayerInRangeOfPoint(2, playerid,2173.9328613281,1402.9155273438,10.705399513245)
|| IsPlayerInRangeOfPoint(2, playerid,2173.8796386719,1404.4167480469,10.766201972961) || IsPlayerInRangeOfPoint(2, playerid,2085.6525878906,2047.5118408203,10.700798988342)
|| IsPlayerInRangeOfPoint(2, playerid,-281.01922607422,2603.9475097656,62.501052856445) || IsPlayerInRangeOfPoint(2, playerid,1186.8385,-1382.0344,13.5633)
|| IsPlayerInRangeOfPoint(2, playerid,241.2990,-1461.2467,13.6501) || IsPlayerInRangeOfPoint(2, playerid,1829.9319,-1828.6980,13.5781)
|| IsPlayerInRangeOfPoint(2, playerid,2307.8562,-1638.6473,14.8270))
{
ShowBankMenuDialog(playerid);
}
return 1;
}
PHP:
undefined symbol "cmd"
PHP:
new cmd[256];
PHP:
if(newkeys == KEY_WALK)//bank
{
if(IsPlayerConnected(playerid))
{
if(IsPlayerInRangeOfPoint(2, playerid,2023.3757324219,1017.5886230469,10.463212013245) || IsPlayerInRangeOfPoint(2, playerid,2173.9328613281,1402.9155273438,10.705399513245)
|| IsPlayerInRangeOfPoint(2, playerid,2173.8796386719,1404.4167480469,10.766201972961) || IsPlayerInRangeOfPoint(2, playerid,2085.6525878906,2047.5118408203,10.700798988342)
|| IsPlayerInRangeOfPoint(2, playerid,-281.01922607422,2603.9475097656,62.501052856445) || IsPlayerInRangeOfPoint(2, playerid,1186.8385,-1382.0344,13.5633)
|| IsPlayerInRangeOfPoint(2, playerid,241.2990,-1461.2467,13.6501) || IsPlayerInRangeOfPoint(2, playerid,1829.9319,-1828.6980,13.5781)
|| IsPlayerInRangeOfPoint(2, playerid,2307.8562,-1638.6473,14.8270))
{
ShowBankMenuDialog(playerid);
}
}
}
В OnPlayerUpdate добавим обновление денег
PHP:
new bank[20];
format(bank, sizeof(bank), "$%08d", PlayerInfo[playerid][Bank]);
TextDrawSetString(Bankirr[playerid], bank);
И туда добавляем все диалоги используемые регистрацией/банком
PHP:
/*[Register & Login]*/
if(dialogid == registerdialog)
{
if(!strlen(inputtext)) return ShowPlayerDialog(playerid, registerdialog, DIALOG_STYLE_INPUT, "Регистрация", "Вы должны зарегистрироваться! \nВведите ваш пароль:", "Ок", "");
if(response)
{
new PlayerName[MAX_PLAYER_NAME];
GetPlayerName(playerid,PlayerName,sizeof(PlayerName));
new account[128];
format(account,sizeof(account),"%s.ini",PlayerName);
if(fexist(account)) return ShowPlayerDialog(playerid,logindialog,DIALOG_STYLE_INPUT, "Авторизация", "Вы должны авторизоваться! \nВведите ваш пароль:", "LOGIN", "");
new iniFile = ini_createFile(account);
if(iniFile < 0) ini_openFile (account);
{
ini_setString(iniFile,"Пароль",inputtext);
ini_setInteger(iniFile, "Money", 0);
ini_setInteger(iniFile, "Admin", 0);
ini_setInteger(iniFile, "Vip", 0);
ini_setInteger(iniFile, "Score", 0);
ini_setInteger(iniFile, "Deaths", 0);
ini_setInteger(iniFile,"BankM",0);
ini_closeFile(iniFile);
SetPVarInt(playerid, "Logged", 0);
ShowPlayerDialog(playerid,logindialog,DIALOG_STYLE_INPUT, "Авторизация", "Вы должны авторизоваться! \nВведите ваш пароль:", "LOGIN", "");
}
}
else
{
ShowPlayerDialog(playerid, registerdialog, DIALOG_STYLE_INPUT, "Регистрация", "Вы должны зарегистрироваться! \nВведите ваш пароль:", "Ок", "");
}
}
if(dialogid == logindialog)
{
if(!strlen(inputtext)) return ShowPlayerDialog(playerid,logindialog,DIALOG_STYLE_INPUT, "Авторизация", "Вы должны авторизоваться! \nВведите ваш пароль:", "LOGIN", "");
if(response)
{
new PlayerName[MAX_PLAYER_NAME], password[64];
GetPlayerName(playerid,PlayerName,sizeof(PlayerName));
new account[128];
format(account,sizeof(account),"%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]);
GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]);
ini_getInteger(iniFile, "Score", PlayerInfo[playerid][Kills]);
SetPlayerScore(playerid, PlayerInfo[playerid][Kills]);
ini_getInteger(iniFile, "Deaths", PlayerInfo[playerid][Deaths]);
ini_getInteger(iniFile, "Admin", PlayerInfo[playerid][pAdmin]);
ini_getInteger(iniFile, "Vip", PlayerInfo[playerid][pVip]);
ini_getInteger(iniFile, "BankM",PlayerInfo[playerid][Bank]);
ini_closeFile(iniFile);
return 1;
}
else
{
SendClientMessage(playerid, COLOR_WHITE, "Cервер: Неверный пароль! Повторите попытку!");
ShowPlayerDialog(playerid, logindialog, DIALOG_STYLE_INPUT, "Авторизация", "Вы должны авторизоваться! \nВведите ваш пароль:", "Ок", "");
return 1;
}
}
else
{
ShowPlayerDialog(playerid, logindialog, DIALOG_STYLE_INPUT, "Авторизация", "Вы должны авторизоваться! \nВведите ваш пароль:", "Ок", "");
}
}
if(dialogid == DIALOG_BANK)
{
if(response)
{
if(listitem == 0)
{
ShowPutInBankDialog(playerid);
}
if(listitem == 1)
{
ShowWithdrawBankDialog(playerid);
}
if(listitem == 2)
{
new string[256];
format(string, sizeof(string), "Ваш счет состовляет $%d", PlayerInfo[playerid][Bank]);
ShowPlayerDialog(playerid, DIALOG_BBALANCE, DIALOG_STYLE_MSGBOX, "Баланс в банке", string, "ОК", "Назад");
}
}
return 1;
}
if(dialogid == DIALOG_BANKPUT)
{
if(!response) return ShowBankMenuDialog(playerid);
for (new i; i < strlen(inputtext); i++)
{
if (inputtext[i] >= '0' && inputtext[i] <= '9')
{
return PutInBank(playerid,inputtext);
}
else
{
ShowBankMenuDialog(playerid);
return SendClientMessage(playerid, COLOR_WHITE,"' Вводите только цифры '");
}
}
return 1;
}
if(dialogid == DIALOG_BANKWITH)
{
if(!response) return ShowBankMenuDialog(playerid);
for (new i; i < strlen(inputtext); i++)
{
if (inputtext[i] >= '0' && inputtext[i] <= '9')
{
return Withdrawoutofbank(playerid, inputtext);
}
else
{
ShowBankMenuDialog(playerid);
return SendClientMessage(playerid, COLOR_WHITE,"' Вводите только цифры '");
}
}
return 1;
}
if(dialogid == DIALOG_BBALANCE)
{
if(!response) return ShowBankMenuDialog(playerid);
return 1;
}
PHP:
stock ShowBankMenuDialog(playerid)
{
return ShowPlayerDialog(playerid,DIALOG_BANK,DIALOG_STYLE_LIST,"Сбербанк Online","{10F441}Положить на счет\n{10F441}Снять со счета\n{10F441}Узнать свой баланс","Выбрать","Выход");
}
stock ShowPutInBankDialog(playerid)
{
return ShowPlayerDialog(playerid, DIALOG_BANKPUT, DIALOG_STYLE_INPUT, "Положить деньги в Сбербанк", "Введите в поле ниже сумму которую\nхотите положить к себе на счет", "Положить", "Назад");
}
stock ShowWithdrawBankDialog(playerid)
{
return ShowPlayerDialog(playerid, DIALOG_BANKWITH, DIALOG_STYLE_INPUT, "Снять деньги со счета", "Введите в поле ниже сумму которую\nхотите снять со своего счета", "Снять", "Назад");
}
stock PutInBank(playerid,money[])
{
new moneys,string[256];
if(!strlen(money))
{
ShowPutInBankDialog(playerid);
return 1;
}
moneys = strval(money);
if(moneys < 1)
{
SendClientMessage(playerid, COLOR_BANK, "Ты столько не закинеш");
return ShowPutInBankDialog(playerid);
}
if(GetPlayerMoney(playerid) < moneys)
{
return SendClientMessage(playerid,COLOR_WHITE,"Денег нет");
}
GivePlayerMoney(playerid, 0-moneys);
PlayerInfo[playerid][Bank]+=moneys;
format(string, sizeof(string), "Вы положили $%d на свой счет. У вас на счету $%d.", moneys, PlayerInfo[playerid][Bank]);
SendClientMessage(playerid, COLOR_BANK, string);
return 1;
}
stock Withdrawoutofbank(playerid,money[])
{
new moneys,string[256];
if(!strlen(money))
{
ShowWithdrawBankDialog(playerid);
return 1;
}
moneys = strval(money);
if(moneys < 1)
{
SendClientMessage(playerid, COLOR_BANK, "Ты столько не снимиш");
return ShowWithdrawBankDialog(playerid);
}
else
{
if(moneys > PlayerInfo[playerid][Bank])
moneys = PlayerInfo[playerid][Bank];
}
GivePlayerMoney(playerid, moneys);
PlayerInfo[playerid][Bank] -= moneys;
format(string, sizeof(string), "Вы сняли $%d с своего счета. У вас на счету осталось $%d", moneys, PlayerInfo[playerid][Bank]);
SendClientMessage(playerid, COLOR_BANK, string);
return 1;
}
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), "%s.ini", PlayerName);
new iniFile = ini_openFile(account);
ini_setInteger(iniFile, "Money", GetPlayerMoney(playerid));
ini_setInteger(iniFile, "Score", GetPlayerScore(playerid));
ini_setInteger(iniFile,"Admin",PlayerInfo[playerid][pAdmin]);
ini_setInteger(iniFile,"Deaths",PlayerInfo[playerid][Deaths]);
ini_setInteger(iniFile,"Vip",PlayerInfo[playerid][pVip]);
ini_setInteger(iniFile,"BankM",PlayerInfo[playerid][Bank]);
ini_closeFile(iniFile);
return 1;
}
Все на этом урок закончен
Все вопросы и коментария пишите)
By Seregamil(это я и есть)
