20.01.2019, 14:35
Sorry i don't understand what did you mean, can u write an example? saving the string and a number, maybe i can learn it
https://pastebin.com/3fwFqprQ
https://pastebin.com/3fwFqprQ
pPassTmp[128],
format(PlayerInfo[playerid][pPassTmp], 128, "");
if(dialogid == DIALOG_REGISTER) { //Se il giocatore seleziona Annulla/Esci if(!response) return Kick(playerid); //In tal caso l'utente inserisci una password troppo breve o non inserisce niente ritorna sullo stesso dialogo if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registrazione", "{FF0000}ERRORE:\n{000000}Hai inserito una password troppo corta\n{00FF00}Consiglio: Usa almeno 3 caratteri ed una password sicura!", "Continua", "Annulla"); //Se va tutto bene inizierа a creare il giocatore nel database //MD5 и il protocollo di criptografia per la password (puoi anche rimuoverlo dalla stringa lasciandolo: ('%e', '%e') new infopass[145]; format(infopass, sizeof(infopass), "{f8ff33}[INFO:]{00FF00} La tua password sarа: %s - puoi cambiarla con /cambiapassword", inputtext); SendClientMessage(playerid, 0xFFFFFF, infopass); format(PlayerInfo[playerid][pPassTmp], 128, inputtext); //Dopo di chи la query viene inviata e passa al dialogo successivo // email ShowPlayerDialog(playerid, DIALOG_REGISTER_EMAIL, DIALOG_STYLE_INPUT, "Registrazione", "{00FF00}Non manca molto:\n{000000}Inserisci una email per continuare\n{00FF00}INFO: Serve per proteggere il tuo account!", "Continua", "Annulla"); return 1; } if(dialogid == DIALOG_REGISTER_EMAIL) { //Se il giocatore seleziona Annulla/Esci if(!response) return Kick(playerid); //In tal caso l'utente inserisci una password troppo breve o non inserisce niente ritorna sullo stesso dialogo if(strlen(inputtext) < 5) return ShowPlayerDialog(playerid, DIALOG_REGISTER_EMAIL, DIALOG_STYLE_PASSWORD, "Registrazione", "{FF0000}ERRORE:\n{000000}Devi inserire una mail valide\n{00FF00}INFO: Servirа per proteggere meglio il tuo account!", "Continua", "Annulla"); format(PlayerInfo[playerid][pEmail], 64, inputtext); //Dopo di chи la query viene inviata e passa al dialogo successivo // etа new query[256]; mysql_format(handle, query, sizeof(query), "INSERT INTO users (name, password, email) VALUES ('%e', MD5('%e'), '%e')", PlayerInfo[playerid][pName], PlayerInfo[playerid][pPassTmp], inputtext); mysql_pquery(handle, query, "OnUserRegister", "d", playerid); format(PlayerInfo[playerid][pPassTmp], 128, ""); return 1; }
You do the saving in SaveUserStats, by using the MySQL UPDATE Query. %d is for numbers, %s is for strings.
You messed up the code a little bit, it will not work like this anymore. Do the following: Add to the enum: Code:
pPassTmp[128], Code:
format(PlayerInfo[playerid][pPassTmp], 128, ""); Code:
if(dialogid == DIALOG_REGISTER) { //Se il giocatore seleziona Annulla/Esci if(!response) return Kick(playerid); //In tal caso l'utente inserisci una password troppo breve o non inserisce niente ritorna sullo stesso dialogo if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registrazione", "{FF0000}ERRORE:\n{000000}Hai inserito una password troppo corta\n{00FF00}Consiglio: Usa almeno 3 caratteri ed una password sicura!", "Continua", "Annulla"); //Se va tutto bene inizierа a creare il giocatore nel database //MD5 и il protocollo di criptografia per la password (puoi anche rimuoverlo dalla stringa lasciandolo: ('%e', '%e') new infopass[145]; format(infopass, sizeof(infopass), "{f8ff33}[INFO:]{00FF00} La tua password sarа: %s - puoi cambiarla con /cambiapassword", inputtext); SendClientMessage(playerid, 0xFFFFFF, infopass); format(PlayerInfo[playerid][pPassTmp], 128, inputtext); //Dopo di chи la query viene inviata e passa al dialogo successivo // email ShowPlayerDialog(playerid, DIALOG_REGISTER_EMAIL, DIALOG_STYLE_INPUT, "Registrazione", "{00FF00}Non manca molto:\n{000000}Inserisci una email per continuare\n{00FF00}INFO: Serve per proteggere il tuo account!", "Continua", "Annulla"); return 1; } if(dialogid == DIALOG_REGISTER_EMAIL) { //Se il giocatore seleziona Annulla/Esci if(!response) return Kick(playerid); //In tal caso l'utente inserisci una password troppo breve o non inserisce niente ritorna sullo stesso dialogo if(strlen(inputtext) < 5) return ShowPlayerDialog(playerid, DIALOG_REGISTER_EMAIL, DIALOG_STYLE_PASSWORD, "Registrazione", "{FF0000}ERRORE:\n{000000}Devi inserire una mail valide\n{00FF00}INFO: Servirа per proteggere meglio il tuo account!", "Continua", "Annulla"); format(PlayerInfo[playerid][pEmail], 64, inputtext); //Dopo di chи la query viene inviata e passa al dialogo successivo // etа new query[256]; mysql_format(handle, query, sizeof(query), "INSERT INTO users (name, password, email) VALUES ('%e', MD5('%e'), '%e')", PlayerInfo[playerid][pName], PlayerInfo[playerid][pPassTmp], inputtext); mysql_pquery(handle, query, "OnUserRegister", "d", playerid); format(PlayerInfo[playerid][pPassTmp], 128, ""); return 1; } |
stock SaveUserStats(playerid)
{
//Se non ha effettuato l'accesso il giocatore, non salva le statistiche
if(!PlayerInfo[playerid][pLoggedIn]) return 0;
//Se ha giа effettuato l'accesso salva le statistiche
new query[256];
mysql_format(handle, query, sizeof(query),
"UPDATE users SET age = '%d', email = '%s', level = '%d', money = '%d', kills = '%d', deaths = '%d' WHERE id = '%d'",
PlayerInfo[playerid][pAge], PlayerInfo[playerid][pEmail], PlayerInfo[playerid][pLevel], GetPlayerMoney(playerid), PlayerInfo[playerid][pKills], PlayerInfo[playerid][pDeaths], PlayerInfo[playerid][p_id);
//Query inviata
mysql_pquery(handle, query);
return 1;
}
La stock SaveUserStats non va fatta cosi. Non c'и bisogno di fare un new per ogni statistica da salvare.
Puoi prendere le info direttamente dall'enum che hai creato e salvarle direttamente nel db. E per salvare i soldi usa GetPlayerMoney, quando logga invece usa GivePlayerMoney: pawn Code:
E per il check prima di salvare le stats (quello in cui vedi che un player и loggato o meno, ci va il return 0 per bloccare l'esecuzione, non 1. |
So che non ci vuole ogni volta un new, l'ho messo per tenere piщ pulito il file, ed evitare che se inserisco playerinfo esca una stringa lunghissima, quello che sto cercando di fare и di salvare un int un numero, sai quando in un server rp ti dice di mettere l'etа
|
stock SalvaStats(playerid)
{
new query[500], p = playerid;
mysql_format(g_SQL, query,sizeof(query), "UPDATE `players` SET `LastLogin` = '%e', `Kills` = %d, `Deaths` = %d, `Score` = %i, `Money` = %i, `AccountLevel` = %d, `WantedLevel` = %d, `PlayerGender` = %d WHERE `ID`= %d",
ReturnDate(), Player[p][Kills], Player[p][Deaths], GetPlayerScore(p), GetPlayerMoney(p), Player[p][AccountLevel], GetPlayerWantedLevel(p) ,Player[p][PlayerGender], Player[p][ID]);
mysql_query(g_SQL, query);
format(query,sizeof(query),"UPDATE `players` SET `PlayingHours` = %d, `PlayingMinutes` = %d, `FirstSpawn` = %d, `Job` = %d, `Bank` = %d, `NoPm` = %d WHERE `ID`= %d",
Player[p][PlayingHours], Player[p][PlayingMinutes], Player[p][FirstSpawn], Player[p][Job], Player[p][Bank], Player[p][NoPm], Player[p][ID]);
mysql_query(g_SQL, query);
return 1;
}
Per evitare di far uscire una stringa lunghssima, nel caso tu abbia molte cose da salvare, puoi fare cosi:
pawn Code:
|