BennuplayNet

Started by l1nk3rn3l, July 19, 2010, 02:11:55 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Noivern

Quote from: l1nk3rn3l on December 19, 2010, 04:23:37 PM
no funcionan en que en windows o en linux?
Eran en windows xp. En linux van esos mismos dcb recompilados usando la bennuplaynet que esta en el ppa de josebita.

josebita

Me alegro de ver que funcionan :)

gukan

Una duda. Lo he puesto en otro post pero aqui pega mas.

Me he bajado la dll y al probar con cualquiera de los ejemplos me sale el mensaje:

C:\soft\bennu\BennuPlayNet\prg\01 basic\client.prg:44: error: Data type not acce
pted here, found "PLAYERS"
C:\soft\bennu\BennuPlayNet\prg\01 basic\client: doesn't exist or isn't version 7
DCB compatible
Presione una tecla para continuar . . .

La linea que se queja (en el ejemplo 1) es:

   if (!BNP_CONNECT("",players,sizedata)) //is server why not have address

Puede tener que ver que esta dll no sea compatible con la ultima version de bennu?

l1nk3rn3l

#108
if (!BNP_CONNECT("",players,sizedata)) //is server why not have address


creo que las estructuras en este caso players, tiene que ser pasado con "&"

if (!BNP_CONNECT("",&players,sizedata))


la nueva version de bennu tiene que indicar que pasas las variables por referencia

cualquiera... solo en structs
&players
offset players


si tienes algun ejemplo interesante , seria bueno que lo compartieras..  :)

gukan

De momento no tengo nada, si me quede clavado con el primer ejemplo :D
Pero con el & funciona así que me pongo a ver como va y si entiendo el funcionamiento!

gukan

Buenas!
La libreria es una pasada y funciona perfectamente. Pero tengo varias dudas.

-La primera, sobre el BNP_NOT_ALLOW_CONN. Por alguna razon parece no funcinar en mi caso. He probado con BNP_NOT_ALLOW_CONN=1 y con BNP_NOT_ALLOW_CONN=true, pero en ninguno de los dos casos he conseguido que un cliente no pueda conectarse.

-La segunda sobre las replicas. Entiendo que las replicas solo pueden ser de un tipo, asi que si tienes que pasar info sobre disparos, enemigos, etc... todos comparten el mismo tipo con variables que usan unos u otros. Mientras el numero de diferentes tipos a replicar es bajo se puede controlar bien, pero si empezamos a tener demasiados tipos puede venir el descontrol. ¿Seria muy dificil que se pudiesen definir diferentes tipos de replicas?

-La tercera es sobre replicas y conexiones. Cuando estaba haciendo el juego de aviones. para controlar los disparos y el daño hecho empece del tiron sin mirarme mucho la documentación. La idea era que cada uno controlara sus disparos y sus colisiones. Me encontre que al ser los disparos replicas, solo podian ser creadas y modificadas por el servidor, por lo que los disparos no funcionaron bien. Pase a que todo lo controlaba el servidor, cada cliente avisaba cuando habia disparado y se creaba el disparo, el servidor controlaba las colisiones y restaba los puntos a todos los clientes. El problema vino en ese punto, como servidor al parecer no podia cambiar los valores de la estructura del cliente. Al final acabe creando replicas para cierta información del cliente. La pregunta es esta: ¿Es normal que una información (las replicas) solo puedan ser modificadas por el servidor y por otro lado la información de conexión (que puede tiene información como la x, la y o cualquier dato que el cliente necesite cambiar) solo pueda ser modificada por el propio cliente?

Gracias!

Windgate

Lo de los diferentes tipos de réplicas sería grandioso, complicaría un poco el uso de la librería pero le daría grandes funcionalidades, lo ideal para mí sería poder tener distintos arrays para cada tipo de réplica, a ver si l1nk nos dice si resultaría muy complejo de implementar o no...

Sobre los disparos, no es necesario replicar su posición, basta con que la réplica del jugador ponga a 1 una variable cada vez que dispara, así su réplica cuando ve el 1 lanza un disparo por su parte, ¿Entiendes?

Sobre la modificación de los valores, no es posible que un jugador modifique los valores de una réplica, l1nk me dijo que hacerlo así incrementaría muchísimo el tráfico de red, de momento tendrás que hacer que cada jugador sea dueño y señor de la escritura de valores en sus datos, los demás son de "sólo lectura".
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

gukan

No creo que diferentes tipos de replicas complicara el uso, mas bien al contrario, pero entiendo que el cambio que puede suponer eso es grande y por eso preguntaba si se podia hacer :)

Veo tu razonamiento sobre los disparos... y pensandolo bien es como lo tendria que haber hecho, pero de momento mientras no me sobrecargue demasiado el sistema lo dejare como replicas! Lazy rulez!

Si, un cliente no puede modificar los valores de las replicas, ok, eso fue fallo mio y lo entiendo, pero lo que no vi tan claro es que el servidor no pudiese modificar valores de los clientes (la x, la y o cualquier otra variable que se defina en el proceso que se le pasa a BNP_CONNECT y que pueda ser modificado por el cliente)... aunque tambien es posible que tuviese algun fallo y realmente si que pudiese y no lo hiciese bien!

Milton884

Hola, te hago una pregunta? Si yo quiero crear Replicas de Disparos, Criaturas, o sea todo lo demas excepto Players, como hago? Se supone que con este codigo conectas un user:

PROCESS connect ( string ip )
BEGIN
   BNP_MAXCONN = MaxConnections;
   
   sizedata = sizeof ( PlayerData );
   
   IF ( NOT BNP_CONNECT ( ip , &players , sizedata ) ) //is server why not have address
      //exit ( "Unable to stablish connection" );
   END

      FOR ( i = 0; i < MaxConnections; i++ )   //create net players
      IF ( i != BNP_ID )
         replica ( i ) ; //net player
      END
   END   
      
    WHILE ( NOT key ( _ESC ) ) 
      set_title ( "CLIENTE fps: " + fps );
        FRAME;
    END
   
   let_me_alone ( );
   FRAME;
   
   BNP_DISCONNECT ( );
   

Entonces, habria que hacer un Conectar para los disparos, otro conectar para los npcs? se que no es asi de hecho lo probe porque lo q hace es conectarse y reserva lugares BNP_ID) para los players

gukan

No va con nuevas conexiones, va con replicas.

Mirate el proyecto de Windgate http://forum.bennugd.org/index.php?topic=1856.0 , yo me base en el para hacer el mio.

Tambien mirate el que hice yo http://forum.bennugd.org/index.php?topic=2245.msg40693#msg40693 (el que es online es el que esta en el post 28, creo que el link va directo)

Windgate

Las réplicas están hechas para replicar jugadores, para que se comuniquen los disparos el jugador pone una variable a TRUE cuando dispara, y la réplica al ver el TRUE también dispara.

Ojala hubiese un sistema de varios arrays para replicar otras cosas, pero tal y como está la librería ahora funciona así.
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

Erkosone

#116
Hola, disculpad por reflotar el tema, quería hacer una consulta sobre esta librería.


Voy a hacer unos vídeo tutoriales sobre la programación de juegos en red y en concreto voy a hablar ampliamente de la PlayNet, después de realizar estos vídeos haré otros vídeos con ejemplos, estos ya no se si serán en lenguaje pepe o juan, pero todos los vídeos de teoría hablas básicamente sobre la programación en red usando la PlayNet.


Y necesitaría un par de datos para realizar una explicación mas acertada sobre la lib.


A groso modo así en plan aproximado.. que ancho de banda podría ocupar el sincronismo de la librería? supongo que dependerá de los clientes conectados y tal, pero..
Para sus calculos internos, decompresión de datos si la hubiera y todas estas cosas..  que % del ancho de banda podría gastar?


por ejemplo si tengo una estructura para players de 10 bytes + replicas 100 bytes..  cuanto aprox podría usar la lib para su control de flujo en bytes?


Bueno, gracias por adelantado al que pudiera solventarme esta duda, y de nuevo felicidades a los COLDEV por la lib, el API de la lib me parece genial.  ;)

Erkosone

Bueno.. he realizado el vídeo, que me ha quedado bastante extenso XD.. y habla sobre las principales carácteristicas de la librería, en cuanto tenga compilado el vídeo y subido os paso el link.
Espero no haberla cagado demasiado, si hay alguna corrección que hacerle pues yo encantado de que me asesoréis sobre los errores que haya podido cometer.
Un saludo y en breve el vídeo sobre esta fantastica lib.

KeoH

Espero con ansias el video xD hace cosa de un mes intenté meterle mano a esta libreria para usarla en los juegos pero no tenia ni idea xDD

Erkosone

Ya estoy compilando los casi 30 minutos de vídeo, en cuanto esté subido a mi canal de youtube os paso el link po aquí.
Si he cometido algún error en la explicación agradecería que me lo comentarais, así para futuros vídeos lo corrijo.
Bueno, en breve el link, son 30 minutos de explicación sobre los juegos en red, que tener en cuenta antes de empezar y las diferentes formas de abordar el diseño de un juego online, en este caso especificamente un juego online para conexión a través de internet, he juntado mucha información sobre el tema sacada del foro de stratos y de unos cuantos blog´s de gente que habla sobre estos temas, así que creo que está bastante completo.


Ya para el próximo vídeo monto un ejemplo práctico de juego, pero creo que con este vídeo ya cualquiera le perderá el miedo al tema.
Un saludo y en breve os paso el link.
Y gracias a los creadores por la lib jeje, disfruto como un niño con ella ;)