Salve a tutti stò progettando un browser game è per gestire le "risorse" che un giocatore gudagna nel tempo utilizzo queste due funzioni:
Codice PHP:
function check_last_login($id)
{
$info = mysql_query("SELECT * FROM gemu_ninja WHERE id_utente = '$id'") or die('Errore query check: ' . mysql_error());
$info_fetch = mysql_fetch_array($info);
$data = $info_fetch[last_login];
$diff_p = mysql_query("SELECT DATEDIFF(NOW(),'$data') as DateDiff") or die('Errore query check: ' . mysql_error());;
$result = mysql_fetch_array($diff_p);
//Converto i giorni di differenza in secondi
$gg_sec = $result[DateDiff]*86400;
//prendi ore minuti e secondi dal Db (Vengono memorizzati in precedenza con NOW()
$ore = (integer) substr($data, 11, 2);
$minuti = (integer) substr($data, 14, 2);
$secondi = (integer) substr($data, 17, 2);
$tot_last = ($ore*3600) + ($minuti*60) + $secondi;
$ore_att = (integer) date("H");
$minuti_att = (integer) date("i");
$secondi_att = (integer) date("s");
$tot_att = ($ore_att*3600) + ($minuti_att*60) + $secondi_att;
$tot_int = $gg_sec - ($tot_last - $tot_att);
$isit = $tot_int;
//Numero di 5 min (e quindi di incremento risorse) avvenuti
for($i=0;$isit>=0;$i++)
{
$isit = $isit - 300;
}
$isit = -$isit;
$totale = array($tot_int,$isit);
return $totale;
}
function update_stats($id,$info)
{
//Info zero sono appunto i secondi totali restituiti dalla funzione precedente
$sec_guad = (integer) $info[0];
//L'errore credo sia qui
$num_refresh = round($sec_guad/300);
if($num_refresh != 0)
{
$info = mysql_query("SELECT * FROM gemu_ninja WHERE id_utente = '$id' LIMIT 1") or die('Errore query check:'. mysql_error());
$tab_utenti = mysql_fetch_array($info);
//So che questo codice potrebbe apparire inutile ma è solo per un mio ordine mentale
$salute = $tab_utenti[salute];
$salute_tot = $tab_utenti[salute_tot];
$chakra = $tab_utenti[chakra];
$chakra_tot = $tab_utenti[chakra_tot];
$resistenza = $tab_utenti[resistenza];
$resistenza_tot = $tab_utenti[resistenza_tot];
$soldi = $tab_utenti[soldi];
$guadagno_soldi = round((property_sum($tab_utenti[id_ninja]) - tot_manutenzione($tab_utenti[id_ninja]))/12);
$salut_guad = $salute + ($num_refresh * 10);
$chakra_guad = $chakra + ($num_refresh * 1);
$resistenza_guad = $resistenza + ($num_refresh * 1);
$soldi_guad = $soldi + ($num_refresh * $guadagno_soldi);
if($salut_guad > $salute_tot) { $salut_guad = $salute_tot; }
if($chakra_guad > $chakra_tot) { $chakra_guad = $chakra_tot; }
if($resistenza_guad > $resistenza_tot) { $resistenza_guad = $resistenza_tot; }
$update = mysql_query("UPDATE `gemu_ninja` SET
`chakra` = '$chakra_guad',
`resistenza` = '$resistenza_guad',
`salute` = '$salut_guad',
`soldi` = '$soldi_guad',
`last_login` = NOW()
WHERE `id_utente` = '$id' LIMIT 1") or die('Errore query update:'. mysql_error());
return true;
}else
{
return false;
}
}
Le due funzioni sembrano funzionare bene il problema è che se per esempio apro la pagina (quindi il contatore dei secondi per il refresh parte) e poi ne apro un'altra il tempo rimanente della seconda pagina è diverso dalla prima. Questo vale anche per le "risorse" incrementate infatti ho notato che se mancano tipo >20 le risorse sono già aumentate al refresh suggessivo.
In sostanza l'errore sembra essere che il tempo per il refresh in realtà non è di 5 minuti è credo che questo sia dovuto alla aprte di codice seguente:
Codice PHP:
$num_refresh = round($sec_guad/300);
Come posso correggerlo ?
Un grazie in anticipo