Hola a todos ...

Voy a intentar resumir de una forma facil como funciona el proceso de MOVIMIENTOS y ACCIONES para evitar posteos de BUGS que no son bugs ... y asi podais comprender como va el tema.

PUNTO 1: ENVIAR LA ACCION

Cuando nosotros damos a ENVIAR, activamos la acción. El reloj se pone en marcha, y comienza a contar el tiempo (por eso en lista de movimientos, lo vemos en el acto). Pero solo ocurre eso, no se envian mensajes, se descuentan recursos ni nada por el estilo.

Problemas en este punto: Ninguno, ya que la acción es instantanea.
Diferencia con el viejo sistema: Antes solo se daba la petición de movimiento, no se iniciaba la acción lo que hacia que si se demoraba el robot, nuestras unidades se quedaban en casa y podia llegar antes un ataque y matarnoslas. Ahora no, porque salen al acto.
Ventajas del cambio: A parte de eliminar el problema anteriormente mencionado, conseguimos lanzar los ataques con precisión. Sabiendo que si dura 2h 5min y 30s se ejecutara justo ese tiempo despues de darle a ENVIAR y no dependemos de que el robot vaya a su hora o no.

PUNTO 2: EL ROBOT VALIDA LA ACCIÓN

El robot cuando pasa, tiene que validarnos la acción. Es entonces cuando las unidades "oficialmente" abandonan nuestra ciudad/asentamiento. Es por eso que en situación militar tarda un poco mas en cambiar de estado. Esto es asi, porque seria un riesgo que fuera vuestra orden quien sacara las unidades, el robot es una ejecución controlada, pero vuestra ejecución no. También es en este momento cuando se descuenta los recursos y se mandan los mensajes al reino destinatario o aliados.

Aunque nuestras unidades hasta que no pase el robot sigan oficialmente en nuestra ciudad, el sistema lleva un riguroso orden y procesa la salida antes que la llegada de un ataque (por ejemplo) haciendo que si conseguimos dar a ENVIAR un segundo antes de que llege un ataque, aunque el robot se tire 20 min para validar nuestra acción, nuestras unidades saldran antes de que el ataque llegue.

Si el robot funciona bien, debera validar cada 5 - 6 segundos, por lo que casi nos parecera instantaneo. Pero en ocasiones esta demora es de incluso 2 o 3 minutos.

Problemas en este punto: Varios. Si el robot tarda mucho en validar hacemos que no se descuenten los recursos, mientras los gastemos y finalmente cuando valida el robot se encuentra con que no hay recursos y nos anula la acción. Respecto a temas de ataques, si dimos antes a ENVIAR que la hora de llegada del ataque, los recursos al igual que las unidades se descontaran antes que procesarse el ataque, ya que es anterior ... asi que por ahi no hay problema. Este punto lo solucionaremos en pocos dias, haciendo que los recursos SI SE DESCUENTEN en el punto 1, ya que si el jugador "truca" el sistema ... solo puede conseguir que se descuenten recursos de mas, nunca de menos. Pero hay un problema insalvable ... y es que si lanzamos un ataque que dura 2h y el robot dura 30min en validar ... el ataque llegara 2h despues de dar a ENVIAR, pero sin embargo el mensaje al atacado le llegara solo 1h 30min antes, encima con hora del robot, no pudiendo averiguar la hora de salida para programar una contra. Este problema es grave solo por lo de la hora y eso trataremos de solucionarlo poniendo la hora de ejecución de la orden, ya que el ver el ataque eso si lo ve, desde el mismo momento que el atacante de a ENVIAR.
Diferencia con el viejo sistema: Basicamente ninguno. Antes hacia lo mismo, pero encima el movimiento salia con fecha del robot, haciendo que no se pudiera atacar con precision.
Ventajas del cambio: La precisión de los ataques y que es imposible hacer trampas, ya que son procesos controlados por el sistema y no por el jugador.

PUNTO 3: EL ROBOT EJECUTA LA ACCIÓN

Finalmente cuando la acción llega a su fin el robot la ejecuta. Evidentemente no exactamente cuando llega, el robot la ejecuta, sino que en ejecución normal, puede demorarse entre 4 y 6 segundos, incluso minutos si el robot esta saturado. Durante ese tiempo nosotros vemos como el contador marca 00:00:00 y ahi sigue.

En este paso se mira que la acción sea viable y si lo es la ejecuta, sino lo es aplica el procedimiento de regreso/cancelación, etc.

No obstante, y para que no pierda la precisión si un ataque llega a las 12:45:23 y el regreso es de 2h y 10min justos, para que no pierda precisión y llegue a la hora calculada de vuelta (02:55:23), lo ejecute cuando lo ejecute el robot (aunque sea 10min mas tarde) en lugar de llegar como pasaba antes con 10min de demora ... 03:05:23, este parte en su regreso con la hora de inicio correcta y llegara igualmente a las 02:55:23

De la misma manera ... el orden de ejecución de acciones y validación/salida de acciones se sigue a rajatabla, en el nuevo robot NUNCA se procesara antes una salida que un ataque si el ataque debia llegar antes ... de tal manera que en el siguiente supuesto:

Un ataque llega a las 02:50:10, pero el robot esta saturado y el ataque se queda en 00:00:00 pendiente y el atacado lo ve a las 02:51:00 ... aunque saque entonces las unidades, (incluso podra ver como el movimiento se ha ejecutado y comienza la marcha atras, por el punto 1) ... el robot tendra pendiente el ATAQUE y la VALIDACION de la acción. Pues bien primero ejecutara el ataque ya que va antes en la escala del tiempo ... y se ejecutara con las unidades que saco dentro de la ciudad, ya que las unidades "oficialmente" y como dijimos antes, salen con la VALIDACION. Posteriormente el robot al ir a VALIDAR la accion de salida, se encuentra con que no hay unidades porque el ATAQUE anteriormente procesado las ha matado, en ese caso DESECHA la acción y desaparecera de la tabla de movimientos.

En este punto no vamos a contar las diferencias con la versión anterior porque son tantas, que no tendriamos tiempo.

Problemas en este punto: Actualmente ninguno grave. Solo el mismo que en el anterior punto, que el mensaje llega con la fecha de pasada del robot, en lugar de con fecha de procesamiento del ataque (lo cual dificulta mas si cabe, el contra-ataque), problema que sera subsanado en breve. Cuando hagamos que los recursos se descuenten al dar a ENVIAR tendremos que hacer que al desechar la acción DEVUELVA los recursos, si esque habia, ya que cobrar si se cobraran.

Eso es todo, espero que tengais menos dudas ahora, sobre muchas cosas de movimientos.

Esta explicación la hacemos para mejorar vuestra comprensión sobre todo el sistema. No vamos a dar datos mas especificos sobre el funcionamiento del sistema. Como veis aun hay puntos que mejorar, pero estamos trabajando en ello, lo importante esque el nuevo robot es mas solido y esta mejor estructurado y pensado que el anterior.

Sobre las demoras del robot, estamos trabajando para mejorarlo, ahora mismo no es tema de que el servidor este saturado ... sino que hay que optimizar su funcionamiento, para que en las horas puntas, vaya todo mas fluido.

Atentamente,
NekroX