Buenas.
Estoy creando un juego online como Ogame y me he atascado en una cosilla que mas que de programación es de lógica.
El código que he puesto a continuación es del sistema de añadido de recursos: cada vez que actualizas la página, se te actualizan los recursos en función del tiempo que haya pasado. Esto hace que te vayan dando materiales en función del tiempo (¡no de las veces que actualices!).
Si alguien ve alguna cosa que no esté muy clara o algún fallo de lógica, que lo comente, todo será bienvenido... Ya ando desesperado.
El resultado de estas funciones, y que no debería ser así, es que al actualizar me dan unos recursos fijos (nunca en función del tiempo, sino en el número de veces que se actualiza).
Código PHP:
Ver original<?php
actualizar_resources();
function actualizar_resources(){
// Llamamos a la función "connect"
connect();
// Llamamos a la función "calcular_segundos"
$segundos = calcular_segundos();
// Sacamos de la base de datos la madera antes de realizar la actualización
$sql = "select * from resources, towns where towns.ID_User = ".$_SESSION['ID_User']." and towns.ID_Town = resources.ID_Town";
$wood_ini = $row['Res_Wood'];
// Sacamos de la base de datos el ratio de madera del usuario activo
$sql = "select * from rates, towns where towns.ID_User = ".$_SESSION['ID_User']." and towns.ID_Town = rates.ID_Town";
$wood_rate = $row['Rate_Wood'];
// Llamamos a la función "add_wood". En ella, $segundos son los segundos que pasaron desde
// la última actualización de recursos; $wood_ini, la madera antes de actualizar y
// $wood_rate, el ratio de madera.
add_wood($segundos, $wood_ini, $wood_rate);
}
function connect(){
// Se inicializan las sesiones para poder utilizar variables de sesión
// Datos a utilizar para conectar a la base de datos
$mysql_server = "****";
$mysql_user = "****";
$mysql_password = "****";
$mysql_database = "****";
// Conexión a la bbdd
$connection = mysql_connect("$mysql_server","$mysql_user","$mysql_password") or
die ("Unable to establish a DB connection"); }
function add_wood($segundos, $rec, $rate){
// Esta es la fórmula que creo que me está dando errores
// Supuestamente multiplica el ratio de recursos por los segundos que ha estado
// sin actualizar y dividirlo entre 3600, porque supongo que el ratio son recursos
// por hora. El resultado, lo suma a los recursos que ya teníamos
$wood_fin = $rec + (($segundos * $rate)/3600);
// Sustituimos los recursos anteriores por los nuevos
$sql = "update resources set Res_Wood = ".$wood_fin." where Res_Wood = ".$rec." and ID_Town = ".$_SESSION['ID_User']."";
}
function calcular_segundos(){
// Sacamos de la base de datos, la fecha desde la última actualización
$sql = "select * from date_resources";
// Lo guardamos en la variable $my_time
$my_time = $row['Date'];
// Guardamos la fecha actual en $new_time
// Cambiamos el valor de la ultima actualización por el de hoy
$sql = "update date_resources set Date = ".$new_time." where Date = ".$my_time." and ID_User = ".$_SESSION['ID_User']."";
// Realizamos la diferencia entre nuestra hora actual y la hora de la última actualización
$resta = $new_time - $my_time;
// Devolvemos el resultado
return $resta;
}
?>
Muchísimas gracias por todo de antemano.