Код RemovePlayerInfo покажи и все места, где используешь её
Код RemovePlayerInfo покажи и все места, где используешь её
PHP код:
stock RemovePlayerInfo(playerid)
{
s_player[playerid][pID] = 0;
s_player[playerid][pName][0] = EOS;
s_player[playerid][pPassword][0] = EOS;
s_player[playerid][pKills][0] = 0;
s_player[playerid][pDollar][0] = 0;
s_player[playerid][pDead][0] = 0;
return 1;
}
PHP код:
enum e_PLAYER_INFO
{
pID,
pName[MAX_PLAYER_NAME],
pPassword[31],
pKiller,
pDollar,
pDead
};
PHP код:
public UploadPlayerAccount(playerid)
{
s_player[playerid][pID] = cache_get_field_content_int(0, "id", mysql_connect_ID);
s_player[playerid][pKiller] = cache_get_field_content_int(0, "kills", mysql_connect_ID);
s_player[playerid][pDollar] = cache_get_field_content_int(0, "dollar", mysql_connect_ID);
s_player[playerid][pDead] = cache_get_field_content_int(0, "dead", mysql_connect_ID); //если что убирать надо
GameTextForPlayer(playerid,"~g~GO ~y~SPAWN", 5000, 5);
scm(playerid,-1,"Ваш аккаунт загружен");
scm(playerid,-1,"Ручное сохранение аккаунта - {FF6200}/saveacc");
player_no_connect{playerid} = 1;
TogglePlayerSpectating(playerid, false);
SpawnPlayer(playerid);
return 1;
}
PHP код:
stock CreateNewAccount(playerid, password[])
{
new query_string[66+MAX_PLAYER_NAME-4+30+(30+11)+(48+11)];
format(query_string, sizeof(query_string), "INSERT INTO `accounts` (`player_name`, `password`, `kills`, `dollar`, `dead`) VALUES ('%s', '%s', '%d', '%d', '%d')",
s_player[playerid][pName], password, s_player[pKiller], s_player[pDollar], s_player[playerid][pDead]);
mysql_function_query(mysql_connect_ID, query_string, true, "UploadPlayerAccountNumber", "i", playerid);
format(query_string, sizeof(query_string), "Вы зарегистрировали аккаунт.", s_player[playerid][pName]);
scm(playerid,-1,query_string);
player_no_connect{playerid} = 0;
format(query_string, sizeof(query_string),"\t{8D8D8D}Аккаунт успешно занесен в базу данных \n\n\t{FFFFFF}Имя аккаунта: {8CEB59}%s \n\t{FFFFFF}Пароль доступа: {8CEB59}%s\n\t{FFFFFF}Сделайте screenshot - {0EE68C}[F8] \n\n\t{8D8D8D}Просьба перезайти на сервер (в целях безопасности)", s_player[playerid][pName], s_player[playerid][pPassword]);
spd(playerid, dGuard,dsm,"{00FF0D}Guard HG", query_string,"Перезайти","");
TogglePlayerSpectating(playerid, false);
SpawnPlayer(playerid);
return 1;
}
PHP код:
stock SaveAccount(playerid)
{
new query_string[(21)+(16+11)+(20+MAX_PLAYER_NAME)+(16+30)+(13+11)+(15+10)] = "UPDATE `accounts` SET";
format(query_string, sizeof(query_string), "%s `player_name` = '%s',", query_string, s_player[playerid][pName]);
format(query_string, sizeof(query_string), "%s `password` = '%s',", query_string, s_player[playerid][pPassword]);
format(query_string, sizeof(query_string), "%s `kills` = '%d',", query_string, s_player[playerid][pKiller]);
format(query_string, sizeof(query_string), "%s `dollar` = '%d',", query_string, s_player[playerid][pDollar]);
format(query_string, sizeof(query_string), "%s `dead` = '%d'", query_string, s_player[playerid][pDead]);
format(query_string, sizeof(query_string), "%s WHERE `id` = '%d'", query_string, s_player[playerid][pID]);
mysql_function_query(mysql_connect_ID, query_string, false, "", "");
return 1;
}
Так а где ты RemovePlayerInfo вызываешь?
В смысле, я нигде её при дисконекте ни в гамемоде эксит не прописал, а где вобще надо
- - - Добавлено - - -
PHP код:
public OnGameModeExit()
{
mysql_close(mysql_connect_ID);
return 1;
}
- - - Добавлено - - -PHP код:
public OnPlayerDisconnect(playerid, reason)
{
player_no_connect{playerid} = 0;
SaveAccount(playerid);
return 1;
}
Я дебил, я незнаю как я мог такие важные дела пропустить. я Исправил да 0 при регистрации. Но мне так и не стало понятно кое что.
Почему когда этого стока я не прописывал в дисконекте, тогда работало на деньгах и киллах тоже там при регистрации после занятия слота прежнего игрока, 0 было, лишь в dead копировалось.
И это не всё я настолько криворукий что я ошибку в removeplayerinfo допустил, я к переменным добавил [0] = 0; крч.. мало ли что ещё появится. А так пока что спасибо всё заебок)
И да я хотел спросить, можно ли там где new query где прописаны по типа 21+(MAX_PLAYERS)+(21+231)+(232) и т.д (это пример)
Укоротить к примеру написав лишь new query[256] ну что бы не сложить всё это в длинную строчку
PHP код:
stock SaveAccount(playerid)
{
new query_string[[COLOR="#FF0000"](21)+(16+11)+(20+MAX_PLAYER_NAME)+(16+30)+(13+11)+(15+10)[/COLOR]] = "UPDATE `accounts` SET"; (укоротить по типу [256])
format(query_string, sizeof(query_string), "%s `player_name` = '%s',", query_string, s_player[playerid][pName]);
format(query_string, sizeof(query_string), "%s `password` = '%s',", query_string, s_player[playerid][pPassword]);
format(query_string, sizeof(query_string), "%s `kills` = '%d',", query_string, s_player[playerid][pKiller]);
format(query_string, sizeof(query_string), "%s `dollar` = '%d',", query_string, s_player[playerid][pDollar]);
format(query_string, sizeof(query_string), "%s `dead` = '%d'", query_string, s_player[playerid][pDead]);
format(query_string, sizeof(query_string), "%s WHERE `id` = '%d'", query_string, s_player[playerid][pID]);
mysql_function_query(mysql_connect_ID, query_string, false, "", "");
return 1;
}
А в указанных строках, памяти хватает? или я не правильно расчитал? сверху
- - - Добавлено - - -
тут надо выделять память? если надо, то как расчитать здесьPHP код:
stock CreateNewAccount(playerid, password[])
{
new query_string[66+MAX_PLAYER_NAME-4+30+(30+11)+(48+11)];
format(query_string, sizeof(query_string), "INSERT INTO `accounts` (`player_name`,`password`,`kills`,`dollar`,`dead`) VALUES ('%s','%s','%d','%d','%d')",
s_player[playerid][pName], password, s_player[pKiller], s_player[pDollar], s_player[playerid][pDead]);
mysql_function_query(mysql_connect_ID, query_string, true, "UploadPlayerAccountNumber", "i", playerid);
format(query_string, sizeof(query_string), "Вы зарегистрировали аккаунт.", s_player[playerid][pName]);
scm(playerid,-1,query_string);
player_no_connect{playerid} = 0;
format(query_string, sizeof(query_string),"\t{8D8D8D}Аккаунт успешно занесен в базу данных \n\n\t{FFFFFF}Имя аккаунта: {8CEB59}%s \n\t{FFFFFF}Пароль доступа: {8CEB59}%s\n\t{FFFFFF}Сделайте screenshot - {0EE68C}[F8] \n\n\t{8D8D8D}Просьба перезайти на сервер (в целях безопасности)", s_player[playerid][pName], s_player[playerid][pPassword]);
spd(playerid, dGuard,dsm,"{00FF0D}Guard HG", query_string,"Перезайти","");
TogglePlayerSpectating(playerid, false);
SpawnPlayer(playerid);
return 1;
}
Я в статье объяснял как нужно рассчитывать и составлять формулу.
Здравствуйте, у меня есть несколько вопросов, как я уже сказал, вашей системе регистрации. Сразу предупреждаю, что я новичок в pawn и вообще программировании. Вообщем, я так и не понял почему не стоит делать сохранение имени и пароля при дисконнекте игрока. Потом, я хотел добавить свой массив в enum pInfo, в который будет содержать либо "да" либо "нет"(1/0 соответственно), выделил для него размер один символ и в итоге выдает ошибку(warning 215: expression has no effect), в коде, мне кажется, все в порядке, хотя может быть вот эти фунции pInfo[playerid][pNation][0] = EOS и strins(pInfo[playerid][pNation][0], "1", 0) виноваты. Я так и не понял, что означает [0] после [pNation], может быть проблема в нем? Когда выделяю побольше размер массивуработает все без проблем, но это же вроде как не правильно. И последний вопрос, я понапихал кучу массивов с данными в pIfnfo, стоит ли так делать? Может стоит как то оптимизировать все это?