Объясните пожалуйста как добавлять новые переменные для сохранения и загрузки? -
MakkO - 30.10.2012
Добрый Вечер...
Решил попробовать сделать регистрацию по уроку
Snoowker"а<<Кликабельно.
У меня возник вопрос. Как добавлять новые переменные для сохранения и загрузки? Например денег и очков.(aMoney , aScore)
Загрузка аккаунта:
PHP код:
LoadAccount(playerid, password[]) {
new
query[128],
sqlpass[32],
result[5+24+64],
dialog[128];
mysql_real_escape_string(password, sqlpass); // Защита от SQL Inject, шифрует кодировку.
format(query, sizeof(query), "SELECT * FROM `Accounts` WHERE `Password` = '%s' AND `ID` = '%i'", sqlpass, playerVariable[playerid][aID]);
// SELECT * - выбрать, FROM - с таблицы, WHERE - где, пароль равен введенному паролю и ID равен иду ника человека.
mysql_query(query); // Отправляем запрос.
mysql_store_result(); // Смотрим записи, которые мы выбрали запросом выше.
if(mysql_num_rows() == 1) { // Если выбрало только 1 аккаунт с таким паролем и ИД - успех, пароль введен верно, загружаем данные в массив.
mysql_fetch_row_format(result, "|"); // split, данные в результате записываются типо "1|Snoowker|parol"
sscanf(result, "p<|>is[24]s[32]", // i - ид (int), s[размер] - string, ник и пароль.
playerVariable[playerid][aID],
playerVariable[playerid][aName],
playerVariable[playerid][aPassword]);
playerVariable[playerid][aLogged] = true;
mysql_free_result(); // Очищаем память.
return 1;
}
else { // Мы ввели неверный пароль.
if(playerVariable[playerid][aWrongPassword] == 4) {
SendClientMessage(playerid, COLOR_LIGHTRED, "Вы 3 раза ввели неверный пароль и были отключены от сервера.");
Kick(playerid);
return 1;
}
playerVariable[playerid][aWrongPassword] ++;
format(dialog, sizeof(dialog),
"Вы ввели неверный пароль.\n\
У Вас осталось %i/3 попыток ввода.", 3 - playerVariable[playerid][aWrongPassword]);
ShowPlayerDialog(playerid, DIALOG_WRONGPAS, DIALOG_STYLE_MSGBOX, "Ошибка.", dialog, "Повтор", "Отмена");
}
return 1;
}
Сохранение аккаунта:
PHP код:
SaveAccount(playerid) { // Сохранение аккаунта.
if(playerVariable[playerid][aLogged] == true) { // Проверка, если аккаунт авторизован.
CheckMySQLConnection(); // Проверяем, подключена ли БД.
new
query[186],
sqlname[MAX_PLAYER_NAME],
sqlpass[64];
mysql_real_escape_string(playerVariable[playerid][aName], sqlname);
mysql_real_escape_string(playerVariable[playerid][aPassword], sqlpass);
format(query, sizeof(query), "UPDATE `Accounts` SET `Nickname` = '%s', `Password` = '%s' WHERE `ID` = '%i'", sqlname, sqlpass, playerVariable[playerid][aID]);
mysql_query(query); // Отправляем запрос
}
return 1;
}
Re: Объясните пожалуйста.. -
Kai_Rodriges - 06.11.2013
Добавлять в объявлении ассоциативного массива, потом добавляешь переменные в базу, далее добавляешь их в sscanf
PHP код:
sscanf(result, "p<|>is[24]s[32]i", // i - ид (int), s[размер] - string, ник и пароль.
playerVariable[playerid][aID],
playerVariable[playerid][aName],
playerVariable[playerid][aPassword],
playerVariable[playerid][aMoney]);
И не забывай в список типа данных добавлять свои;
Советую почитать это
https://sampforum.blast.hk/showthread.php?tid=120356 и это
https://sampwiki.blast.hk/wiki/Keywords:Initialisers#enum
ЗЫ: Какой плагин MySQL используешь?