Ver Mensaje Individual
  #5 (permalink)  
Antiguo 30/07/2010, 12:20
Alfonsoft
 
Fecha de Ingreso: febrero-2008
Mensajes: 56
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: ¿Cómo se hace que el servidor trabaje sin estar tu pidiendoselo?

Cita:
Iniciado por Nemutagk Ver Mensaje
Vamos, pongamos un ejemplo de un juego de batallas en donde tienes que crear 'x' unidad, lo cual por unidad tardas 'y' tiempo, entonces 'x * y = Z', ahora tienes los 'Z' segundos que se supone van a tardar en crearse las 'x' unidades, en tu motor del juego tienes que tener una tabla donde le vas agregando las unidades que el usuario esta construllendo, por ejemplo la tabla unidades_usuarios y esta tendría por ejemplo 4 campos

Tabla: unidades_usuarios
id
idUser
idUnit
units

Aparte de esta abría que tener una tabla temporal para dar la sensación que el juego sigue trabajando aunque no estemos conectados

Tabla: unidades_temporal
id
idUser
idUnit
units
finalTime

Ahora, cuando el usuario manda a construir las unidades ingresas los campos en la tabla "unidades_temporal", ahora para saber a que hora/día terminan de "construir" las unidades tomamos la fecha actual en UNIX (en php con time()) y sumamos el resultado con la anterior ecuación (x * y = z) ahora tendriamos en UNIX TIME la fecha final de creación (time() + (x * y)) , ahora cada vez que el usuario ingrese a su cuenta o a la sección que tu creas conveniente checas la tabla "unidades_temporal" y verificas los registros que ya alla pasado el "x" tiempo necesario (where finalTime < time()) y obtienes las unidades que se van a crear (el campo units.unidades_temporal) y las agregas a la tabla final (units.unidades_usuarios)

Lo que te comento es una forma de las formas en que se puede hacer (así es como yo lo hago) pero seguro hay mas opciones y te evitas de darle mas trabajo del necesario al servidor, al menos no cuando el jugador no este jugando, no se si me entiendas
Nemutagk, muchísimas gracias!! Ahora lo entiendo mucho mejor.

No obstante, me surge una duda, si las unidades terminan de construirse, por ejemplo, a las 3 de la mañana y el jugador no ingresa o no realiza algún evento para que pase de la tabla temporal a la del usuario, esas unidades no estarán disponibles hasta que el jugador haga un evento o ingrese, no es así? o estoy dejándome algo?