PDA

Просмотр полной версии : [Вопрос] MySQL R39-2



bla
25.03.2015, 21:24
Суть проблемы, в основу мода взял регистрацию от Deimos'a, разбирал её, делал по примеру.
Игрок заходит на сервер .... регистрирует аккаунт .... ему выводят сообщение "Мы рады вам ....", а после этого я хочу показать ему номер его аккаунта, то бишь ID в таблице accounts. У меня выбивает 0, но после перезахода: О чудо! Номер аккаунта верный(Проверяю через команду). Я так понял, что не обновлялись данные в используемой переменной и решил написать свой паблик, дабы обновлять все переменные при регистрации разом. Ниже весь код, у меня ничерта не получилось, эффект тот же. Не могли бы вы мне помочь, а точнее объяснить, что я делаю не так.




stock CreateNewAccount(playerid, password[])
{
new query_string[70+MAX_PLAYER_NAME+30];
UpdateAccountInfoRightNow(playerid);
format(query_string, sizeof(query_string), "INSERT INTO `accounts` (`player_name`, `password`) VALUES ('%s', '%s')", pInfo[playerid][pName], password);
mysql_function_query(mysql_connect_ID, query_string, false, "", "");
format(query_string, sizeof(query_string), "№ %d | Аккаунт %s успешно зарегистрирован. Администрация желает Вам приятной игры!", pInfo[playerid][pID], pInfo[playerid][pName]);
SendClientMessage(playerid, 0xFFFFFF00, query_string);
pInfo[playerid][pID] = cache_get_field_content_int(0, "ID", mysql_connect_ID);
new str[128];
format(str, sizeof(str), "№ акк: %d", pInfo[playerid][pID]);
SendClientMessage(playerid, -1, str);
SpawnPlayer(playerid);
return true;
}






forward UpdateAccountInfoRightNow(playerid);
public UpdateAccountInfoRightNow(playerid) {
pInfo[playerid][pID] = cache_get_field_content_int(0, "ID", mysql_connect_ID);
pInfo[playerid][pAdminLevel] = cache_get_field_content_int(0, "AdminLevel", mysql_connect_ID);
pInfo[playerid][pKill] = cache_get_field_content_int(0, "Kill", mysql_connect_ID);
pInfo[playerid][pDeath] = cache_get_field_content_int(0, "Death", mysql_connect_ID);
pInfo[playerid][pDMScore] = cache_get_field_content_int(0, "DMScore", mysql_connect_ID);
new str[128];
for(new i = 0; i < MAX_PLAYERS; i++) {
if(pInfo[playerid][pAdminLevel] > 0 && pInfo[playerid][pNotification] == true) {
format(str, sizeof(str), "[CODE 001] Информация игрока %s | ID: %d | #%d | ADlv: %d : Обновлена.", pInfo[playerid][pName], playerid, pInfo[playerid][pID], pInfo[playerid][pAdminLevel]);
SCM(playerid, -1, str);
}
}
return true;
}




forward UploadPlayerAccount(playerid);
public UploadPlayerAccount(playerid)
{
pInfo[playerid][pID] = cache_get_field_content_int(0, "ID", mysql_connect_ID);
pInfo[playerid][pAdminLevel] = cache_get_field_content_int(0, "AdminLevel", mysql_connect_ID);
pInfo[playerid][pKill] = cache_get_field_content_int(0, "Kill", mysql_connect_ID);
pInfo[playerid][pDeath] = cache_get_field_content_int(0, "Death", mysql_connect_ID);
pInfo[playerid][pDMScore] = cache_get_field_content_int(0, "DMScore", mysql_connect_ID);
SendClientMessage(playerid, 0xFFFFFF00, "Вы успешно авторизировались!");
SpawnPlayer(playerid);
return true;
}

Nazarik
25.03.2015, 21:57
stock CreateNewAccount(playerid, password[])
{
new query[70+MAX_PLAYER_NAME+30];

mysql_format(query, sizeof(query), "INSERT INTO `accounts` (`player_name`, `password`) VALUES ('%e', '%e')", pInfo[playerid][pName], password);
mysql_tquery(mysql_connect_ID, query, "OnAccountRegistered", "i", playerid);
return true;
}

forward OnAccountRegistered(playerid);
public OnAccountRegistered(playerid)
{
pInfo[playerid][pID] = cache_insert_id();

new fmt_msg[128];

format(fmt_msg, sizeof(fmt_msg), "№ акк: %d | Аккаунт %s успешно зарегистрирован. Администрация желает Вам приятной игры!", pInfo[playerid][pID], pInfo[playerid][pName]);
SendClientMessage(playerid, 0xFFFFFF00, fmt_msg);

SpawnPlayer(playerid);
return 1;
}

$continue$
26.03.2015, 11:57
stock CreateNewAccount(playerid, password[])
{
new query[70+MAX_PLAYER_NAME+30];

mysql_format(query, sizeof(query), "INSERT INTO `accounts` (`player_name`, `password`) VALUES ('%e', '%e')", pInfo[playerid][pName], password);
mysql_tquery(mysql_connect_ID, query, "OnAccountRegistered", "i", playerid);
return true;
}

forward OnAccountRegistered(playerid);
public OnAccountRegistered(playerid)
{
pInfo[playerid][pID] = cache_insert_id();

new fmt_msg[128];

format(fmt_msg, sizeof(fmt_msg), "№ акк: %d | Аккаунт %s успешно зарегистрирован. Администрация желает Вам приятной игры!", pInfo[playerid][pID], pInfo[playerid][pName]);
SendClientMessage(playerid, 0xFFFFFF00, fmt_msg);

SpawnPlayer(playerid);
return 1;
}

Если не секрет зачем при INSERT'e в колэбек кидать ?

Mazzilla
27.03.2015, 15:13
Если для столбца ID (название может быть другое) установлено значение AUTO_INCREMENT на положительное, то каллбэк вернёт значение данного столбца в переменную pInfo[playerid][pID]