Buona sera e buona estate a tutti voi
Come sempre i titoli delle mie discussioni saltano agli occhi:hammer:
Allora, tento di spiegare nel miglior modo possibile.
Sto scrivendo un browsergame, e sono incappato in un problema che mai pensavo di avere.
In questo BG c'è un edificio, l'accademia.
All'interno dell'accademia posso inserire degli scienziati che mi diano un tot di punti ricerca l'ora, e fin qui tutto bello e perfetto.
Il problema arriva quando il solito giocatore furbo porta avanti l'orario del suo pc, ricarica la pagina, e i punti ricerca prendono il volo e salgono magicamente.
Direte voi: certo, devi usare l'orario del server. Embè, lo sto facendo
Sicuramente sbaglio io, ma dove?
Quando un giocatore inserisce dei scienziati, prendo il timestamp del momento, lo salvo nel db nel suo bel record.
Quando ricarica la pagina, prendo il timestamp attuale, faccio la differenza tra questo e quello precedente salvato nel db, e mi calcolo i punti ricerca da dare al giocatore.
Ecco il codice che mi aggiorna i punti ricerca:
Un grazie in anticipo:fonzie:
EDIT
Nel titolo ho scritto timestamp(), ma la funzione è mktime()
Come sempre i titoli delle mie discussioni saltano agli occhi:hammer:
Allora, tento di spiegare nel miglior modo possibile.
Sto scrivendo un browsergame, e sono incappato in un problema che mai pensavo di avere.
In questo BG c'è un edificio, l'accademia.
All'interno dell'accademia posso inserire degli scienziati che mi diano un tot di punti ricerca l'ora, e fin qui tutto bello e perfetto.
Il problema arriva quando il solito giocatore furbo porta avanti l'orario del suo pc, ricarica la pagina, e i punti ricerca prendono il volo e salgono magicamente.
Direte voi: certo, devi usare l'orario del server. Embè, lo sto facendo
Sicuramente sbaglio io, ma dove?
Quando un giocatore inserisce dei scienziati, prendo il timestamp del momento, lo salvo nel db nel suo bel record.
Quando ricarica la pagina, prendo il timestamp attuale, faccio la differenza tra questo e quello precedente salvato nel db, e mi calcolo i punti ricerca da dare al giocatore.
Ecco il codice che mi aggiorna i punti ricerca:
PHP:
function update_research_points() {
$playerid=$_SESSION['playerid'][prefix_s]; //prefix_s è in base al numero del server di gioco
$query="SELECT SUM(cittadini_acca), puntiscienza, ora FROM ".prefix_tb."ricerche, ".prefix_tb."citta WHERE id = idproprietario AND id = $playerid";
$esegui=mysql_query($query) or die(mysql_error());
$risultato=mysql_fetch_row($esegui);
$scienziati=$risultato[0];
$puntiscienza=$risultato[1];
$ora=$risultato[2]; //precedente timestamp
$mktime=mktime(); //timestamp attuale
$secondi_trascorsi = $mktime - $ora; //secondi trascorsi dal momento in cui il giocatore visita game.php al momento precedente
if ($ora != 0 and $scienziati != 0 and $secondi_trascorsi > 19 ) { //l'ultima condizione perchè non aggiorno i punti ad ogni secondo, ovviamente:)
$ore_trascorse = $secondi_trascorsi/3660; //ore trascorse... " "
$punti_nuovi = $scienziati * $ore_trascorse; //punti da aggiungere al giocatore
$query="UPDATE ".prefix_tb."ricerche SET ora = $mktime , puntiscienza=puntiscienza + $punti_nuovi WHERE id = ".$_SESSION["playerid"][prefix_s];
mysql_query($query);
}
}
Un grazie in anticipo:fonzie:
EDIT
Nel titolo ho scritto timestamp(), ma la funzione è mktime()