Diario de desarrollo #2


Saludos a todos,


Aqui esta el muy pedido Diario de Desarrolo #2. Este diario va a ser bastante tecnico dado que hemos recibido preguntas muy tecnicas sobre el nucleo del server, de otros threads en el foro y en el A.M.A. Esperemos que no los aburra.

En un alto nivel, el server tiene 2 partes principales: Network (red) y simulación (claro que tambien hay otras como database, pero vamos a ignorarlas por ahora)

Para el lado del network (red), esta el "network thread pool" que maneja todas las conexiones y  entradas (inputs) de los jugadores, la simulación es el nucleo del gameplay. Aqui es donde el mundo, y todos los objetos del juego (jugadores, NPCs, y todo) estan, asi como tambien toda la logica del juego.

La simulación consiste de muchos sub-sistemas. En nuestra lista incial, hemos especulado mucho mas de 40 sub-sistemas. Desde los mas simples como inventario o mail, a los mas complejos y pesados como detección de colisión. Y estoy muy seguro de que habrán mas sub-sistemas en el proceso.

Todos estos sub-sistemas se comunican entren ellos por medio de "eventos". Cada tipo de eventos puede ser suscripto. En nuestro ultimo "Sneak Peek" video, donde se ve un simple combate, escencialmente fue una prueba del flujo de evento de combate entre un numero de sub-sistemas.

Aqui hay un rapido paso por paso en como los diferentes sub-sistemas trabajaron juntos en el ultimo ejemplo (Sneak Peek #2)

  • Cuando el jugador empieza a atacar a un mob, envía un evento el cual, el manejador de combates tiene suscripto.
  • El manejador de combates, empieza la logica del combate entre los 2 objetos (jugador-mob). Cada ronda de ataques empezaran eventos que son devueltos al jugador como da?o y actualizaciones en los LP/puntos de vida.
  • Cuando el mob muere, un evento es lanzado de nuevo para indicar que el jugador ha matado al mob.
  • El manejador de jugadores que ha sido suscripto a este evento, entonces puede premiar al jugador con puntos de experiencia, mientras que el manejador de drops (objetos lanzados por el mob al morir) que ha sido suscripto al mismo evento, entonces puede premiar al jugador con un drop de dinero y/o items, como 7 esferas del dragon (como fue visto en el video).

Similarmente, el manejador de quests (tareas o busquedas) puede ser suscripto a este evento para actualizar el progreso de la quest del jugador (si matar al mob es parte de la quest).

Tener sub-sistemas no solo hace las cosas mas manejables, si no que posibilita tenerlas corriendo en paralelo mientras que vemos que queden bien juntas. Tambien nos permite mover un sub-sistema a un proceso diferente o a un host diferente, lo cual hace al server mas escalable. Por ejemplo, la deteccion de colisiones o el manejador de aproximidad podría sobrecargarse en cuantos mas y mas jugadores haya.

No estoy diciendo que es un dise?o perfecto (y definitivamente no lo es), pero esto es con lo que hemos estado trabajando. Estoy seguro de que nuestro dise?o se rompera, será cambiado y mejorado mientras que progresamos.


Tambien hay cosas que hemos implementado con el unico proposito de beneficios en el desarrollo. Desde cosas simples como auto login y auto seleccion de personajes, a cosas como un modo especial del server en donde podemos terminar/finalizar/cesar el server del juego, hacer cambios en los codigos, recompilar y reiniciar, todo esto mientras que el cliente sigue conectado y sin la necesidad de reiniciarlo! Claro que algunos estados del mundo no son preservados/guardados luego del reinicio (no aun dado que no tiene sentido tenerlo hasta que jueguen los usuarios) pero si ayuda muchisimo cuando tenemos que testear/probar diferentes areas del server.


Este rapido video demuestra lo dicho:




Ambos jugadores  podían ver los movimientos de cada uno, hasta que el server del juego fue detenido (cuando apareció "Server is off"). Ambos clientes permanecieron encendidos sin saber que es lo que había sucedido.
Cuando el server fue encendido de nuevo, todo volvio a la normalidad. Tambien puedes notar como las posiciones de los NPCs fueron reestablecidas cuando el server fue reiniciado, como sus estados no fueron preservados.

Tambien estoy en proceso de escribir algunos clientes de prueba para que podamos hacer algunas pruebas de perfiles (profiles) y test de stress, postearemos un video de esto cuando podamos.

A parte de escribir codigos de server actual, tambien necesitamos mucha ingenieria inversa para ver como funciona el cliente.

Mucha gente piensa que dado que ya tenemos el source code (codigo base/fuente) y librerias del antiguo cliente, deberíamos trabajar mas facil y rapido. Bueno, el source code viejo ayuda obviamente. Pero el hecho real es que muchos de los protocolos, paquetes de estructura, tablas de base. etc. han sido cambiadas Muchas de ellas nos tomaron mucho tiempo trabajarlas.

No sorprendentemente, hemos descubierto que el cliente TW (Taiwan) tiene una construccion diferente a la del cliente HK (Hong Kong) en terminos de protocolos y paquetes de estructura y son completamente incompatibles entre ellos.

Mientras tanto, el cliente se crasheara (derrumbara, caera) con tan solo enviar 1 byte (bit) de data incorrecta, y no hay ninguna manera facil de solucionarlo sin la fuente, asumiendo que no contemos con el codigo de las personas que lo armaron como fuente ;) Y dado que estamos escribiendo todo desde cero y no estamos ayudandonos con el codigo de DBO/NTL, nos toma un bastante largo proceso.

Para resumir, nuestro objetivo es uno muy grande y ambicioso, pero estamos felices con lo que hemos hecho hasta el presente. Y una vez mas, agradecerles por su paciencia.

Tambien me gustaría dedicar unas palabras a todos los demas proyectos trabajando en DBO. Yo personalemente creo que son geniales. Y como un desarrollador, no hay nada mas excitante que ver a las personas tomar interes en programacion. Diferentes proyectos tendran diferentes direcciones y diferentes maneras de hacer las cosas, pero al final todos tenemos el mismo objetivo, traer de vuelta DBO. Yo realmente espero que todos podamos respetarnos, respetar nuestro trabajo y respetar las diferencias de todos.

Bueno, creo que eso es todo por ahora. Espero poder hacer mas de estas escrituras mas a menudo. Si tienen cualquier pregunta, sientanse libres de preguntar y haré mi mejor esfuerzo para responder.

Muchas gracias!
Pigeon.

-----------------------------------------------------------------------------------------------------------------
Traduccion hecha por SonWest
aqui esta el tema original http://dborevelations.com/forums/index.php?topic=3736.0
aqui el tema en español http://dborevelations.com/forums/index.php?topic=3737.msg67812#msg67812

No olviden visitar sus sitios web
www.dborevelations.com
www.youtube.com/user/DBORevelations

0 comentarios:

Publicar un comentario

Quienes Somos

Notidbonn.blogspot.com es un blog informativo, te llevamos la informacion de los proyectos relevantes a DBO, en español, damos nuestras propias criticas, todas las noticias con su soporte respectivo.

siguenos en Facebook

Con la tecnología de Blogger.

Donativos

Ayudame a continuar





Visitas

¿Quien nos ve?

Aplicación Movil