Вход

Просмотр полной версии : [Вопрос] Сохранение регистрационного IP.



kala4iks
11.02.2016, 14:49
Добрый день, скажите пожалуйста из за чего такая проблема?

Вообщем я при зарегался и IP регистрационный сохранился в базу данных если выйти и войти он сохранен.
А если выключить сервер, и включить, и игроки заходят на сервер то у всех регистрационные IP слетают на 0.

DeimoS
11.02.2016, 15:22
Эмм, а зачем вообще перезаписывать IP, который был у игрока при регистрации?
Покажи код того, как загружаешь и как сохраняешь

kala4iks
11.02.2016, 15:35
Эмм, а зачем вообще перезаписывать IP, который был у игрока при регистрации?
Покажи код того, как загружаешь и как сохраняешь

Ток я не перезаписываю его он слетает когда сервер выключить и заного включить если игрок зайдет на сервер.
Это в enum pInfo


pIpReg[16]

Сохранение аккаунта.


stock SaveAccount(playerid)
{
if(Player[playerid][pLogged] == true)
{
CheckMySQLConnection();
new str[1500];
new sqlname[MAX_PLAYER_NAME];
mysql_real_escape_string(Player[playerid][pName], sqlname);
format(str, sizeof(str), "UPDATE `Accounts` SET `Nickname`= '%s',`Level`= '%i', `Admin`= '%i', `Reg`= '%i', `Sex`= '%i', `Spawn`= '%i', `Exp`= '%i', `BankPass`= '%i', `Money` = '%i', `Bank` = '%i', `MuteTime` = '%i', `Job`= '%i',",
sqlname,
Player[playerid][pLevel],
Player[playerid][pAdmin],
Player[playerid][pReg],
Player[playerid][pSex],
Player[playerid][pSpawn],
Player[playerid][pExp],
Player[playerid][pBankPass],
Player[playerid][pMoney],
Player[playerid][pBank],
Player[playerid][pMuteTime],
Player[playerid][pJob]);
format(str, sizeof(str), "%s `PayCheck` = '%i',`Jailed` = '%i',`JailTime`= '%i',`MedicTime` = '%i',`Mats` = '%i',`Drugs`= '%i',`JobTime`= '%i',`Member` = '%i',`Leader` = '%i',`Zam` = '%i',`Rank` = '%i',`Model` = '%i',`Char` = '%i',`Phousekey` = '%i',`Carkey1` = '%i',",
str,
Player[playerid][pPayCheck],
Player[playerid][pJailed],
Player[playerid][pJailTime],
Player[playerid][pMedicTime],
Player[playerid][pMats],
Player[playerid][pDrugs],
Player[playerid][pJobTime],
Player[playerid][pMember],
Player[playerid][pLeader],
Player[playerid][pZam],
Player[playerid][pRank],
Player[playerid][pModel],
Player[playerid][pChar],
Player[playerid][pPhousekey],
Player[playerid][pCarkey1]);
format(str, sizeof(str), "%s `Carkey2` = '%i',`Pbiskey` = '%i',`TWarns` = '%i',`CarLic` = '%i',`MotoLic` = '%i',`TruckLic` = '%i',`TruckELic` = '%i',`FlyLic` = '%i',`BoatLic` = '%i',`SD` = '%i',",
str,
Player[playerid][pCarkey2],
Player[playerid][pPbiskey],
Player[playerid][pTWarns],
Player[playerid][pCarLic],
Player[playerid][pMotoLic],
Player[playerid][pTruckLic],
Player[playerid][pTruckELic],
Player[playerid][pFlyLic],
Player[playerid][pBoatLic],
Player[playerid][pSD]);
format(str, sizeof(str), "%s `GunLic` = '%i',`TaxiLic`= '%i',`GruzSkill` = '%i',`DrugSkill` = '%i',`GunSkill` = '%i',`CarSkill` = '%i',`JackSkill` = '%i',`RobSkill` = '%i',`RobHouseSkill` = '%i',`TimePizdanul` = '%i',`RobHouseTime` = '%i',`MechSkill` = '%i',`TruckSkill` = '%i',`DetSkill` = '%i',`HeadValue` = '%i',`HunterValue` = '%i',`TruckTime` = '%i',`TruckETime` = '%i',",
str,
Player[playerid][pGunLic],
Player[playerid][pTaxiLic],
Player[playerid][pGruzSkill],
Player[playerid][pDrugSkill],
Player[playerid][pGunSkill],
Player[playerid][pCarSkill],
Player[playerid][pJackSkill],
Player[playerid][pRobSkill],
Player[playerid][pRobHouseSkill],
Player[playerid][pTimePizdanul],
Player[playerid][pRobHouseTime],
Player[playerid][pMechSkill],
Player[playerid][pTruckSkill],
Player[playerid][pDetSkill],
Player[playerid][pHeadValue],
Player[playerid][pHunterValue],
Player[playerid][pTruckTime],
Player[playerid][pTruckETime]);
format(str, sizeof(str), "%s `PayDay` = '%i',`Warns`= '%i',`Boxing` = '%i',`Kunfu` = '%i',`Kneehead` = '%i',`Grabkick` = '%i',`FStyle` = '%i',`Rope` = '%i',`CheatPassword` = '%i',`GPS` = '%i',`Sigs` = '%i',`Pivo` = '%i',`Wanted` = '%i',`RobTime` = '%i',`JackTime` = '%i',`Vipe` = '%i',`AdminOnline` = '%i',`Vip` = '%i', `MissionKeis` = '%i', `Donate` = '%i',",
str,
Player[playerid][pPayDay],
Player[playerid][pWarns],
Player[playerid][pBoxing],
Player[playerid][pKunfu],
Player[playerid][pKneehead],
Player[playerid][pGrabkick],
Player[playerid][pFStyle],
Player[playerid][pRope],
Player[playerid][pCheatPassword],
Player[playerid][pGPS],
Player[playerid][pSigs],
Player[playerid][pPivo],
Player[playerid][pWanted],
Player[playerid][pRobTime],
Player[playerid][pJackTime],
Player[playerid][pVipe],
Player[playerid][pAdminOnline],
Player[playerid][pVip],
Player[playerid][pMissionKeis],
Player[playerid][pDonate]);
format(str,sizeof(str),"%s `IpReg` = '%s' WHERE `ID` = '%i'",
str,
Player[playerid][pIpReg],
Player[playerid][pID]);
mysql_query(str);
}
return 1;
}

Вот при регистрации сохраняю рег ip.


stock CreateAccount(playerid,password[])
{
new query[128],sqlname[MAX_PLAYER_NAME],sqlpassword[32],ipreg[16];
GetPlayerIp(playerid,ipreg,sizeof(ipreg));
mysql_real_escape_string(Player[playerid][pName], sqlname);
mysql_real_escape_string(password, sqlpassword);
format(query, sizeof(query), "INSERT INTO `Accounts` (`Nickname`, `Password`) VALUE ('%s', '%s')", sqlname, sqlpassword);
mysql_query(query);
Player[playerid][pID] = GetAccountID(playerid);
strmid(Player[playerid][pKey],sqlpassword, 0, 64, 255);
strmid(Player[playerid][pIpReg],ipreg,0,64,255);
Player[playerid][pLogged] = true;
new string[120];
SetPlayerColor(playerid,0xFFFFFF80);
format(string,sizeof(string),"(( %s[%d] подключился к серверу. IP {FFFFFF}%s ))",sqlname,playerid,ipreg);
ABroadCast(COLOR_GREY,string,1);
return 1;
}

Вот собственно загружаю из бд.


stock LoadAccount(playerid, password[])
{
if(strfind(password,"|") != -1)return Kick(playerid);
new query[500],sqlpass[32],result[512],string[120];
mysql_real_escape_string(password,sqlpass);
format(query,sizeof(query),"SELECT * FROM `Accounts` WHERE `Password` = '%s' AND `ID` = '%i'",sqlpass,Player[playerid][pID]);
mysql_query(query);
mysql_store_result();
if(mysql_num_rows() == 1)
{
mysql_fetch_row_format(result, "|");
sscanf(result,"p<|>is[64]s[64]iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii", Player[playerid][pID],Player[playerid][pName],Player[playerid][pKey],Player[playerid][pLevel],
Player[playerid][pAdmin],Player[playerid][pReg],Player[playerid][pSex],Player[playerid][pSpawn],Player[playerid][pExp],Player[playerid][pBankPass],Player[playerid][pMoney],Player[playerid][pBank],Player[playerid][pMuteTime],Player[playerid][pJob],
Player[playerid][pPayCheck],Player[playerid][pJailed],Player[playerid][pJailTime],Player[playerid][pMedicTime],Player[playerid][pMats],Player[playerid][pDrugs],Player[playerid][pJobTime],Player[playerid][pMember],Player[playerid][pLeader],
Player[playerid][pZam],Player[playerid][pRank],Player[playerid][pModel],Player[playerid][pChar],Player[playerid][pPhousekey],Player[playerid][pCarkey1],Player[playerid][pCarkey2],Player[playerid][pPbiskey],Player[playerid][pTWarns],
Player[playerid][pCarLic],Player[playerid][pMotoLic],Player[playerid][pTruckLic],Player[playerid][pTruckELic],Player[playerid][pFlyLic],Player[playerid][pBoatLic],Player[playerid][pSD],Player[playerid][pGunLic],Player[playerid][pTaxiLic],
Player[playerid][pGruzSkill],Player[playerid][pDrugSkill],Player[playerid][pGunSkill],Player[playerid][pCarSkill],Player[playerid][pJackSkill],Player[playerid][pRobSkill],Player[playerid][pRobHouseSkill],Player[playerid][pTimePizdanul],
Player[playerid][pRobHouseTime],Player[playerid][pMechSkill],Player[playerid][pTruckSkill],Player[playerid][pDetSkill],Player[playerid][pHeadValue],Player[playerid][pHunterValue],Player[playerid][pTruckTime],Player[playerid][pTruckETime],
Player[playerid][pPayDay],Player[playerid][pWarns],Player[playerid][pBoxing],Player[playerid][pKunfu],Player[playerid][pKneehead],Player[playerid][pGrabkick],Player[playerid][pFStyle],Player[playerid][pRope],Player[playerid][pCheatPassword],
Player[playerid][pGPS],Player[playerid][pSigs],Player[playerid][pPivo],Player[playerid][pWanted],Player[playerid][pRobTime],Player[playerid][pJackTime],Player[playerid][pVipe],Player[playerid][pAdminOnline],Player[playerid][pVip],
Player[playerid][pMissionKeis],Player[playerid][pDonate],Player[playerid][pIpReg]);
Player[playerid][pLogged] = true;
Logged[playerid] = 1;
DisablePlayerCheckpoint(playerid);

DeimoS
11.02.2016, 15:54
А зачем его вообще сохранять после выхода с сервера? Это IP, который получен при регистрации. Как он может в дальнейшем измениться? (это, кстати, сохранение из той же оперы, что и сохранение ника/пароля. Зачем? Разве игрок может изменить свой пароль во время игры так, что ты об этом не узнаешь? Он его может сохранить только если ты напишешь для этого функцию. Так почему бы не сохранить его сразу, если вдруг игрок решил сменить свой пароль и не захламлять этим сохранением запрос, который отправляется при выходе?).

Ну а слетает он, вероятнее всего, просто из-за того, что при выключении MySQL не успевает обработать запрос на сохранение. Такое случится и при краше сервера. Это, как я знаю, не лечится ничем. Можно лишь сделать обновление данных в БД прямо во время изменения их на сервере, но это нужно делать с умом (придумывать какие-то ограничения на изменение этих данных и т.п.), иначе БД загнётся от большого кол-ва запросов. Ну и обновлять только действительно важные данные.

Wise
12.02.2016, 12:52
В твоём коде я разбираться не стал. Удали сохранение регистрационного IP при выходе с сервера.
И когда создаёшь аккаунт (CreateAccount) записывай IP следующим образом:

new query[128], ip[16];
GetPlayerIp(playerid, ip, sizeof(ip));
format(query, sizeof(query), "INSERT INTO `Accounts` (`Nickname`, `Password`, `IpReg`) VALUES ('%s', '%s', '%s')", sqlname, sqlpassword, ip);
mysql_function_query(переменная_подключения_к_базе_данных, query, false, "", "");

kala4iks
12.02.2016, 17:38
В твоём коде я разбираться не стал. Удали сохранение регистрационного IP при выходе с сервера.
И когда создаёшь аккаунт (CreateAccount) записывай IP следующим образом:

new query[128], ip[16];
GetPlayerIp(playerid, ip, sizeof(ip));
format(query, sizeof(query), "INSERT INTO `Accounts` (`Nickname`, `Password`, `IpReg`) VALUES ('%s', '%s', '%s')", sqlname, sqlpassword, ip);
mysql_function_query(переменная_подключения_к_базе_данных, query, false, "", "");

Спасибо теперь вроде не сбрасывается на 0.