Как сделать сохранение денег pawno

Урок №2: Сохранение акков(Регистрация)

Как сделать сохранение денег pawnoАвторСообщение Leonardo_Gun
Администратор
Как сделать сохранение денег pawno

Сообщения : 18
Репутация : 0
Дата регистрации : 2012-12-26

Как сделать сохранение денег pawno

Все кто не читал 1-ый урок прошу прочитать, он очень важен и является основой. (читать) https://pawno-pro.mirbb.com/t12-topic

Вот и настало время 2 урока, сохранение аккаунтов и данных, это выражение можно заменить 1 простым: регистрация. Сегодня я покажу вам и расскажу как сделать простую регистрацию на сервер в диалоговых окнах.

Ну. собрались духом и начинаем
*Ко всем #define добавляем:
Код:

В public OnPlayerDisconnect(playerid, reason)

А теперь ка добавим команду /stats для просмотра статистики.
Шукаем public OnPlayerCommandText(playerid, cmdtext[]) и пихаем туды гэты брэд)))

if(dialogid == player_RegLog_DialogID)
<
new filename[MAX_STRING];
format(filename, sizeof(filename), «%s%s.zg»,AccountsDB,oGetPlayerName(playerid));
if(response) // вход
<
if(PlayerInfo[playerid][pIsLogin] == true) return SendClientMessage(playerid, COLOR_GREY, » Вы уже вошли!»);
new len = strlen(inputtext);
if(len MAX_PASS_LEN)
<
SendClientMessage(playerid,COLOR_RED,»Длина пароля должна быть больше «#MIN_PASS_LEN» и меньше «#MAX_PASS_LEN» символов»);
return show_RegLogDialog(playerid);
>
if(!fexist(filename))
<
SendClientMessage(playerid,COLOR_RED,»Этот аккаунт не зарегистрирован!»);
return show_RegLogDialog(playerid);
>

switch( load_Player(playerid,inputtext,filename) )
<
case 0:
<
SendClientMessage(playerid,COLOR_RED,»Неправильный пароль.»);
show_RegLogDialog(playerid);
>
case 1:
<
SendClientMessage(playerid,COLOR_RED,»Вы успешно вошли!»);
PlayerInfo[playerid][pIsLogin] = true;
>
>
return 1;
>
else // рега
<
if(PlayerInfo[playerid][pIsLogin] == true) return SendClientMessage(playerid, COLOR_GREY, » Вы уже вошли!»);
new len = strlen(inputtext);
if(len MAX_PASS_LEN)
<
SendClientMessage(playerid,COLOR_RED,»Длина пароля должна быть больше «#MIN_PASS_LEN» и меньше «#MAX_PASS_LEN» символов»);
return show_RegLogDialog(playerid);
>
if(fexist(filename))
<
SendClientMessage(playerid,COLOR_RED,»Этот аккаунт уже зарегистрирован!»);
return show_RegLogDialog(playerid);
>
create_Player(playerid,inputtext);
SendClientMessage(playerid,COLOR_RED,»Регистрация прошла успешно!»);
return show_RegLogDialog(playerid);
>
>

А теперь в любое место между пабликами вставляем.

stock show_RegLogDialog(playerid)
<
return ShowPlayerDialog(playerid,player_RegLog_DialogID,DIALOG_STYLE_INPUT,
«Вход в аккаунт»,
«Введите пароль чтобы войти или зарегистрировать аккаунт.»,
«Войти»,»Зарегать»
);
>

stock load_Player(playerid,password[],filename[])
<
new valtmp[MAX_STRING],
File:accountf = fopen(filename,io_read);
fread(accountf, valtmp);
set(PlayerInfo[playerid][pPass],ini_GetValue(valtmp));
if(strcmp(PlayerInfo[playerid][pPass], password, false))
<
fclose(accountf);
return 0;
>

new key[MAX_STRING];
while( fread(accountf,valtmp,sizeof(valtmp)) )
<
key = ini_GetKey(valtmp);
load_param_int(«Money»,PlayerInfo[playerid][pMoney]);
oSetPlayerMoney(playerid,PlayerInfo[playerid][pMoney]);
load_param_int(«Kills»,PlayerInfo[playerid][pKills]);
load_param_int(«Deaths»,PlayerInfo[playerid][pDeaths]);
>
fclose(accountf);
return 1;
>

stock create_Player(playerid,password[])
<
set(PlayerInfo[playerid][pPass],password);
PlayerInfo[playerid][pKills] = 0;
PlayerInfo[playerid][pDeaths] = 0;
PlayerInfo[playerid][pMoney] = START_MONEYS;
save_Player(playerid);
return 1;
>

stock save_Player(playerid)
<
new string[MAX_STRING];
format(string, sizeof(string), «%s%s.zg»,AccountsDB,oGetPlayerName(playerid));
if(fexist(string)) fremove(string);
new File:accountf = fopen(string,io_append);
save_param_string(«Pass»,PlayerInfo[playerid][pPass]);
save_param_int(«Money»,PlayerInfo[playerid][pMoney]);
save_param_int(«Kills»,PlayerInfo[playerid][pKills]);
save_param_int(«Deaths»,PlayerInfo[playerid][pDeaths]);
fclose(accountf);
return 1;
>

stock oGetPlayerName(playerid)
<
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof(name));
return name;
>

stock oSetPlayerMoney(playerid, money)
<
PlayerInfo[playerid][pMoney] = money;
ResetPlayerMoney(playerid);
GivePlayerMoney(playerid, money);
return 1;
>

Теперь расскажу немного о добавлении переменных.
Для примера я добавлю переменную level:
в enum pInfo вставляем ещё 1 строку:

В stock load_Player находим столбик с переменными, последняя: load_param_int(«Deaths»,PlayerInfo[playerid][pDeaths]);
Копируем её, вставляем на новой строчке и изменяем переменные на:

В create_Player добавляем новую строчку, её значение: при создании нового аккаунта данные считываются от сюдо, тоесть в этом стоке вы можете установить скин игроку, лвл, деньги и т.д. выдаваемые при регистрации.

Ну и последнее что надо добавить это в stock save_Player(playerid) новую строку с переменной.
Функция save_Player отвечает за сохранение данных в уже созданном аккаунте.

Вот и всё! Мы добавили новую переменную. Так можете добавлять всё что угодно.

Примечание: мы не будем использовать никакие инклуды.
Примечание’: Рега 100% рабочая, вписывал её себе в СТАЛКЕР мод.

ВАЖНО: Для сохранения аккаунтов вам необходимо создать папку accounts в scriptfiles, иначе аки сохраняться не будут.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Как сделать сохранение денег pawnoТема: Урок №2: Сохранение акков(Регистрация) Как сделать сохранение денег pawnoСр Дек 26, 2012 2:04 pm