Error en paquetes?

Narnia Ao

Newbie Lvl 1
Buenas gente, despues de tanto tiempo que paso, estoy pensando en volver pero en esta oportunidad me encuentra solo. Sin programador, Asi que vengo a pedirles una mano.

Al momento de prender el servidor y de conectarme o crear personaje, no puedo ingresar. El servidor si registra un login, pero no se puede conectar al cliente.

En modo debug, el error que arroja es el siguiente:

"Error de automatizacion"

y en los codigos aparece lo siguiente:

https://ibb.co/5FDYPCm

Ya intente todo, y busque soluciones en el foro pero no hay algo concreto, me podrian ayudar?


Desde ya muchas gracias,
saludos.
 

About

Director del Proyecto
Tenes descoordinado el protocolo seguramente.

Pueden ser varias cosas, y puede llevar tiempo, pero no es tan complicado.

Fijate que cuando el cliente hace WriteLoginExistingchar (creo que se llama así el paquete)

Fijate que cada paquete que el cliente escriba
Por ejemplo

call WriteByte(nivel)
call writeAsciiString(Nick)
call Writeinteger(Mana)

etc

en el servidor, el handle de ESE mismo paquete, tenga en el mismo ORDEN los mismos paquetes.

Ejemplo:

HandleLoginExistingChar:

nivel = ReadByte
Nick = ReadAsciiString
Mana = ReadInteger
 

Narnia Ao

Newbie Lvl 1
Hola Mateo, sos vos?? Como andas? Gracias por la respuesta!

Ahora voy a ponerme a ver un poco, estuve trabajando bastante y no estuve con tiempo, apenas lo pruebe te dejo un comentario, aunque me parece que ya lo probe esto que me estas diciendo. De todas maneras, ahora lo verifico de nuevo.


Muchas gracias!

edit: Todos los "call" del cliente, tienen que coincidir con los del servidor? O solo WriteLoginExistingchar ?

Gracias!
 
Última edición:

About

Director del Proyecto
Hola Mateo, sos vos?? Como andas? Gracias por la respuesta!

Ahora voy a ponerme a ver un poco, estuve trabajando bastante y no estuve con tiempo, apenas lo pruebe te dejo un comentario, aunque me parece que ya lo probe esto que me estas diciendo. De todas maneras, ahora lo verifico de nuevo.


Muchas gracias!

edit: Todos los "call" del cliente, tienen que coincidir con los del servidor? O solo WriteLoginExistingchar ?

Gracias!

Dice "About" mi nick :| No, no soy mateo.

Absolutamente todos los paquetes que se envíen del Cliente hacia el servidor, tienen que coincidir en el orden que se envían, y viceversa. Osea, desde el Servidor hacia el Cliente también tienen que coincidir.

Si vos envías un integer, que es una variable que puede almacenar un número de hasta -32768 hasta 32767 (si mal no recuerdo), Oesa que la variable puede contener un número negativo empezando del -32768 hasta el número positivo 32767, y vos en el otro extremo, lees un BYTE (por ejemplo) que puede contener solamente un número de 0 a 255, cuando quieras leerlo, va a explotar la aplicación probablemente, o tal vez tire error, o tal vez no pase nada, pero si o si, el resultado no va a ser el esperado.

Ahora, vos el problema lo tenes (según vos) en el Login de personajes, y en el NewChar.
Lo que podes hacer para hacer un TRACE (o mejor dicho para "rastrear") el error es hacer clic derecho arriba en la barra de herramientas de VB6, y te da para elegir varias herramientas. Selecciona todas y, hay un botón que se llama "Call Stack" o en castellano se llamaba creo que "Pila de llamadas", haces clic ahí y te muestra la cola de llamadas (valga la redundancia jaja) que se ejecutaron precisamente antes de llegar al punto de error, donde te dice "Automation error".
Ya con esa base, podes rastrear el error, de dónde viene, y así buscarlo fácilmente.
 

Narnia Ao

Newbie Lvl 1
Dice "About" mi nick :| No, no soy mateo.

Absolutamente todos los paquetes que se envíen del Cliente hacia el servidor, tienen que coincidir en el orden que se envían, y viceversa. Osea, desde el Servidor hacia el Cliente también tienen que coincidir.

Si vos envías un integer, que es una variable que puede almacenar un número de hasta -32768 hasta 32767 (si mal no recuerdo), Oesa que la variable puede contener un número negativo empezando del -32768 hasta el número positivo 32767, y vos en el otro extremo, lees un BYTE (por ejemplo) que puede contener solamente un número de 0 a 255, cuando quieras leerlo, va a explotar la aplicación probablemente, o tal vez tire error, o tal vez no pase nada, pero si o si, el resultado no va a ser el esperado.

Ahora, vos el problema lo tenes (según vos) en el Login de personajes, y en el NewChar.
Lo que podes hacer para hacer un TRACE (o mejor dicho para "rastrear") el error es hacer clic derecho arriba en la barra de herramientas de VB6, y te da para elegir varias herramientas. Selecciona todas y, hay un botón que se llama "Call Stack" o en castellano se llamaba creo que "Pila de llamadas", haces clic ahí y te muestra la cola de llamadas (valga la redundancia jaja) que se ejecutaron precisamente antes de llegar al punto de error, donde te dice "Automation error".
Ya con esa base, podes rastrear el error, de dónde viene, y así buscarlo fácilmente.

Hola de nuevo! Hoy me tomo 3 horas y media ordenar todo el protocolo del cliente con el del servidor. Ordenandolo, probe y ahora en modo debug al momento de crear el personaje dice "los atributos son invalidos" y no se mueven los dados. Ahora bien, cuando me fijo que error aparece para poder depurarlo, no aparece nada! Rarisimo, no se por donde encarar porque antes por lo menos tenia un error y podia apuntar para ese lado, pero ahora nada. Es esto mismo que vos me decis que tengo que fijarme con el "call stack"?


Disculpame, pense que eras Mateo jajaj, muchas gracias por la ayuda!

edit: Ya realice lo que me habias comentado de la pila de llamadas, y me aparece un listado con las acciones que se hicieron hasta llegar al problema. Comparandolo con codigos virgenes, esta todo igual, ya no se que puede ser

saludos!
 
Última edición:

Rexinto

Newbie Lvl 4
Hola, mi amigo es un poco dejado con esto, y voy a seguirlo yo. Lo poco que me explico, y lo que lei aca, logre hacer lo que dijo about.

Usando la pila de llamadas, los pasos que me llamaron la atencion son:

HandleIncomingData
HandleShowUserRequest

y termina en el dicho error:
dsByteQueue.ReadASCIIString

marcando la linea

call Err.Raise(NOT_ENOUGHT_DATA)

Interpreto que NOT_ENOUGHT_DATA es no hay data suficiente. El prolblema es que no se para que no hay data?? Comparo con codigos de un cliente 13.0 virgen y estan exactamente iguales estas partes. Alguien podria orientarme?

saludos
 
Arriba