Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: Kase en 22 Agosto 2012, 10:19 am



Título: mmorpg servidor
Publicado por: Kase en 22 Agosto 2012, 10:19 am
si, imagino que es un tema trillado (repetido)  pero esta es una cuestion un poco diferente...
no podia dormir y me quede pensando, como hacer un servidor mmorpg.... que se necesita?

y mi interrogante me llevo a simplficarlo.

- debemos trasmitir los datos de los usuarios a los demas usuarios ( ._.) entonces pense en el ¿como?.. y conclui en un "objeto"  mapa que guarde las cordenadas de los usuarios y este objeto sea retrasmitido a todos los clientes.
pero esto solo tendria posiciones, entonces pense en mas objetos...

objetos "usuarios" con parametros como cordenadas x,y, vida, estado, accion_realizando y asi. de este modo el cliente solo tiene que leer los datos y desplegarlos. y luego pense en los moustros y npcs.. y dije, ok, tal vez ese mapa debe aceptar arreglos mas aya de el objeto "usuario"


pero cambiando de tema, pense en como mantener el mapa en memoria y a la vez servirlo a n usuarios sin lag... obviamente no podemos generar un mapa para cada usuario con los mismos valores siempre.. el mapa debe ser global, y sus datos deben estar en ram necesariamente. y debe  enviar informacion cada x milesimas de segundo a todos lo usuarios.. (de modo que no puede enviar uno por uno) y me cuestiono, el envio de informacion al mismo tiempo se realizaria con hilos?


luego pasando a temas de seguridad, el mapa deberia checar que cada peticion que reciba sea valida. e ignorar las que no lo son, e incluso beanear cuando las cuentas  cuando se spamea una peticion no valida. pero esto retrasaria el procesamiento del mapa.. podria entonces encenderse banderas para confiar en usuarios o para desconfiar. no?


como ven mis delirios de 3 am...  estoy mal o bien en mi teoria de un servidor mmo...

el cliente es punto y aparte. y obviamente iria con sokets, e interpretando y mostrando el mapa..



curioso.. cree un tema igual en el 2007 xD solo que esta vez tengo mas idea de como hacerlo.
pero rescatando cosas del tema anterior.

ese objeto mapa, solo deberia reenviar informacion de lo que "se a movido"


Título: Re: mmorpg servidor
Publicado por: <<<-Basura->>> en 24 Agosto 2012, 07:37 am
Pues el servidor lo que hace es mapear a todo en el mapa. Pero el mapa es dividido por sectores. para asi tratar de enviar la mínima información a un usuario de otros usuarios, esto para evitar el lag.

Ejemplo en el sector X, tenemos 4 usuarios... solo veras esos 4 usuarios conforme te muevas entras en otro sector, perdiendo a los usuarios anteriores y viendo nuevos usuarios...


Título: Re: mmorpg servidor
Publicado por: Kase en 24 Agosto 2012, 10:26 am
lo estuve pensando mas..

mapa podria ser un arreglo bidimencional donde se guarde objetos..  por ejemplo en
mapa[304][215] esta el objeto "usuario:kase"


y tenemos un servidor de conexiones con sokets..sirviendo cada 200ms   todo lo que aya en un area  de 20 x 20 al usuario
entonces podria enviarse un json con lo que hay entre mapa[289][200] y mapa[319][230]

el cliente simplemente le la informacion  y la  despliega..

el problema es que en el peor de los casos se enviarian asta 200 objetos D:
pero en un caso promedio se enviarian unos 20 objetos kisas. digamos unos 4 usuario mas, unos cuantos moustros, unas cuantas cosas tiradas.

cuanto podria pesar un objeto?  1kb a lo mucho?  en el peor de los casos se enviarian 200kb al usuario. y en un caso promedio unos 20kbs.


se me ocurre dividir el servidor en aplicaciones, una que gestione conexiones, otra que gestione el mapa, y otra que gestione la ia de los moustros.

duda existencial?  seria combeniente tratar cada conexion con un usuario como un hilo nuevo? o que un hilo atienda varios usuarios? 


Título: Re: mmorpg servidor
Publicado por: <<<-Basura->>> en 25 Agosto 2012, 23:10 pm
Jajaja.. no...

Lo que haces es descargar todos los objetos en la computadora del Usuarios, el servidor nada mas lo que hace es decir que en la posición tal hay algo. entonces el programa que este el lado del cliente lo que hace es asociar ese algo con lo gráfico que le dijo que el servidor había.

El mapa, las figuras y todo lo demás lo tiene el cliente, el servidor nada mas tiene las posiciones


Título: Re: mmorpg servidor
Publicado por: Kase en 25 Agosto 2012, 23:26 pm
o_O

no, si tuviera solo las posiciones seria un nido de hackers.. xD  el servidor controla todo... el cliente solo lo muestra en pantalla..

al decir un arreglode objetos, no me refiero a un arreglo con los spirts..

sino a un objeto ejemplo

class Usuario:
  id = 10
  nombre = 'kase'
  vida = 150
  vida_actual = 50
  accion_actual = {'accion':'dando espadaso','hora':22:39:01:23}


a eso me refiero con objeto.. xD


Título: Re: mmorpg servidor
Publicado por: <<<-Basura->>> en 31 Agosto 2012, 16:51 pm
Para evitar gran cantidad de crackers que no tienen nada que hacer nada mas que fastidiar tu juego XD, puedes validar los datos en el servidor.

El cliente no TIENE QUE!! manipular la información. simplemente mostarla.

class Usuario:
  id = 10
  nombre = 'kase'
  vida = 150
  vida_actual = 50
  accion_actual = {'accion':'dando espadaso','hora':22:39:01:23}


Ese ejemplo esta mal, muy mal...
Por ejemplo
-para que necesitas pasarle el nombre al servidor?
-para que necesitas decirle cuanta vida tienes?

lo único bueno es la accion que estas haciendo... pero ?

-para que necesitas pasarle la hora al servidor ? si este la puede calcular de forma local?

Algo medio bien hecho sería:
accion: Golpe[int]
Quien: Bicho[int]
Pos_Bicho: 123,124


Después cuando los datos llegan al servidor lo que haces es calcular la diferencia de posición contra los datos almacenados en el servidor para ver si es real, para evitar hackers.

Después de validar todos los datos... el servidor puede responder con un simple numero, digamos un array de int:
[ 0 ]No tienes rango
[ 1 ]Esa acción no esta permitida
[ 2 ]No tienes ningún tarject
....
El cliente asocia ese numero a un string que tiene almacenada en su pequeña base de datos...?
Nota: Nunca pasaste la string por red

Es simple, recuerda que para que tu servidor sea eficiente, tenes que pasar la menor cantidad de datos por red ya que puedes generar mucho trafico.


Título: Re: mmorpg servidor
Publicado por: Kase en 31 Agosto 2012, 22:53 pm
o_O me mal interpretaste.. esos no son los datos que yo le mando al servidor...

son los datos que el servidor manda a los usuarios...  datos mas, datos menos, pero es solo una plantilla del objeto..


Título: Re: mmorpg servidor
Publicado por: <<<-Basura->>> en 31 Agosto 2012, 23:20 pm
Igual :D el servidor deberia mandar solo una vez el nombre y datos principales XD


Título: Re: mmorpg servidor
Publicado por: gAb1 en 8 Septiembre 2012, 19:01 pm
Si quereis ver un buen ejemplo de mecanicas de juego tipo mmorpg pasaros por https://github.com/TrinityCore/TrinityCore ;)

- gAb1


Título: Re: mmorpg servidor
Publicado por: ABDERRAMAH en 10 Septiembre 2012, 18:20 pm
Yo estoy investigando y tratando de crear otra arquitectura diferente, la llamo de "servidor pasivo" donde el servidor NUNCA inicia una conexión con un cliente, al contrario solamente responde a las órdenes de los clientes, que pueden ser de lectura o escritura al más puro estilo base de datos. Son los clientes los que "procesan" el mundo. ¿y los comportamientos integrados en el propio mundo? bien, aquí llega lo complicado.

Cada mapa de este juego (por ahora chat 2D) es alojado por un usuario, el cual es responsable de ejecutar los fragmentos de código contenidos por el mapa y enviarlos al servidor. Es ineficiente en cuanto a ancho de banda, puedo moverlo en red local, pero por vpn fue imposible, ¿el beneficio? el servidor ocupa 21 kb, y se podrían correr muchos en una sola máquina, cada uno en un puerto diferente.

Faltan atar muchos cabos, la idea es que el mundo sea descentralizado, o sea, que gran parte de éste sea creado y mantenido por cada cliente. Por supuesto hay un tipo de servidor independiente que se puede abrir, pero aun tengo que resolver el problema de los códigos (puertas que se abren, botones, sillas pàra sentarse etc...)

entonces mi sistema es así:

1- abre el cliente y pregunta user, login y servidor.

2-se piden los datos del servidor (nombre, array de mapa e información de los posibles bloques de mapa y de avatar con los que se construyen los gráficos)

3- se piden los datos del usuario, los cuales incluyen la última posición registrada y la apariencia (en tres capas). Se pide el mapa señalado en última posición.

4- se precarga una imágen de cada capa del mapa así como otra de la fusión de todas las capas del avatar. se dibuja la escena y se crea un registro en el servidor para indicar que se está online y en dicho mapa.

5- a partir de entonces corre el main loop, el cual se encarga de pedir continuamente la información de cada usuario del mapa y de subir la suya propia, luego lee todos los registros de otra carpeta que guarda los mensajes que son audibles al avatar.

Falta mucho, pero quiero que el mapa esté compuesto de diferentes servidores (modo grid) y que cada uno disponga de sus propios assets y listas de usuarios. Un servidor podría enviar a un avatar propio desde ahí hasta cualquier otro servidor, no sería necesario crear cuenta, y pasaría con sus propiedades (hypergrid). Es ambicioso y posiblemente una mala decisión de ingeniería, pero poco a poco va tomando forma.

unas imágenes del proyecto: http://abdlab.blogspot.com.es/2012/04/proximos-proyectos-imagenes.html


Título: Re: mmorpg servidor
Publicado por: <<<-Basura->>> en 15 Septiembre 2012, 08:29 am
Bueno esa fue la idea que yo plante mas arriba, pero con un poco de variantes, el problema es que tu estilo es que, los dados cuando llegan al servidor no se sabe de quienes son, simplemente se procesan y listo...

Que tal si yo los capturo en la red ??
O falsifico dados ??


Título: Re: mmorpg servidor
Publicado por: anonimo12121 en 17 Septiembre 2012, 00:16 am
Siento interrumpir pero como dicen arribar.
El servidor trabaja todos los datos. los datos que recibe el cliente es solo decoración para mostrar en pantalla.

Imaginemos tu crackes el cliente . y te pones 1000 de vida a tu personaje. pero el servidor tiene 200 ese es el valor que funciona, el valor 1000 es solo visual en tu cliente.

Servidor = hacer todoooo;
Cliente = recoger información y mandar información de teclas, etc pulsadas, pero nunca trabajar con datos que sirvan para dar ventaja.

ABDERRAMAH Eso no es servidor anfitrión?


Título: Re: mmorpg servidor
Publicado por: ABDERRAMAH en 17 Septiembre 2012, 19:09 pm
Bueno, no exáctamente, aunque hay muchas similitudes. Me he inspirado en las estructuras grid e hypergrid de opensim, un tema complejo que he tratado de simplificar al máximo. La idea es que los servidores se agrupan en una rejilla ("grid") y además un cliente puede conectar a diferentes rejillas. Una rejilla contiene información de sus usuarios registrados, pero además puede albergar información "importada" desde otro servidor. Así un usuario pùede ser teletrasportado a una rejilla en la que no tiene cuenta sin problemas. Un mismo servidor puede pertenecer a varias de éstas grids al mismo tiempo. Opensim puede operar en varias estructuras diferentes a la que yo he escogido, es un tema muy interesante. http://opensimulator.org/wiki/Hypergrid (http://opensimulator.org/wiki/Hypergrid)


Título: Re: mmorpg servidor
Publicado por: anonimo12121 en 18 Septiembre 2012, 11:01 am
ABDERRAMAH
Se podría hacer un hilo para cada grid verdad? sectores como lo queráis llamar.


Título: Re: mmorpg servidor
Publicado por: ABDERRAMAH en 18 Septiembre 2012, 19:01 pm
es la idea, pero aún no lo tengo bien planteado.


Título: Re: mmorpg servidor
Publicado por: <<<-Basura->>> en 19 Septiembre 2012, 23:08 pm
Como dijo Xafi, todo lo maneja el servidor... el cliente simplemente es entorno gráfico y listo!, es la mejor forma.

Pero hay algo que no se puede evitar que, los bots.. yo como atacante puedo generar bots para el lvling automatico entre otras cosas