Jump to content
  • 0
Kamina

[Duda] Sobre Hercules y SRC

Question

Hola

 

Hace años que no he incursionado en el Mundo Emu-RO, recuerdo que eAthena seguía vivo y rAthena era un proyecto en pañales.

 

Me topo con esta versión de emulador que me parece bastante buena por lo que he leído. Destacando la encriptación de información para bloquear las acciones de RPE/WPE.
Nunca entendí porque no lo hicieron en eAthena si era algo que se necesitaba a gritos.
Recuerdo que también sugerí que agregaran compatibilidad con MultiCore al Emulador, ya que en Linux no servia de mucho tener una maquina con 16 cores y el Emulador usaba solo 1 y si tenias Harmony y muchos players con un ASPD de 195 en WoE, era un total colapso.

 

Bueno volviendo a mi duda, Soy de las personas que siempre termino creando mis propios Scripts y modificación a la SRC (no soy un experto en programación, siquiera soy programador), y bueno eAthena era muy "flexible" para modificar el código fuente, ¿Hercules es así de Flexible? O necesito mas conocimientos de programación para crear accesos de memoria especiales o cosas por el estilo?

Share this post


Link to post
Share on other sites

16 answers to this question

Recommended Posts

  • 0

¡Hola!

 

Yendo directos a la pregunta, Hercules ha dado un cambio de filosofía bastante radical y se basa mucho más en la eficiencia y la flexibilidad que los proyectos hermanos. Para ello se ha modificado sustancialmente el código previo, facilitando enormemente la creación de plugins y modificación del código fuente siempre y cuando "se sepa dónde tocar". Si alguno se pone a mirar sin tener mucha idea pues la dificultad de modificación de código fuente es exactamente la misma que en eAthena salvo cuando quieres añadir nuevas funciones (no modificar las existentes), puesto que para ello hay que añadirlas a una interfaz (para los plugins más que nada).

 

Aunque haya comentado que tocar el código fuente es prácticamente igual de sencillo (o complicado) que antes, tener conocimientos de cómo modificar cosas en eAthena/rAthena traerá con casi total seguridad más problemas que soluciones debido a un sutil cambio. No tendrás ningún problema en adaptarte si tienes en cuenta que debes "olvidar" cómo se hacían los cambios anteriormente.

 

Simplemente, para llamar a otra función ya no se hace directamente, sino a través de una interfaz. Te doy mi palabra de que aunque esto te suene a chino, sabrás adaptarte de forma muy natural y sin problemas si haces ese ejercicio de "olvido". Más que nada te lo digo yo que no soy muy bueno tocando el src y he aprendido a hacer mis pinitos con Hercules muy pronto.

 

¡Un saludo!

 

Edición: He esperado a que me respondiera un desarrollador porque no me sonaba que se hubiera implementado soporte de ejecución simultánea en varios núcleos (multi-threading). En efecto no lo está en su mayoría, aunque algunas partes del emulador sí utilizan varios núcleos a la vez. De todas formas no tienes por qué preocuparte mucho si tu máquina tiene un procesador decente, a menos que quieras tener un servidor de enormes proporciones. En un núcleo de 2.66 GHz aguantas perfectamente tener el servidor encendido, más alrededor de 200 usuarios sin ningún tipo de problemas (quizás sí si da la casualidad de que están todos ejecutando algún script muy pesado, aunque eso ya es un caso particular).

Share this post


Link to post
Share on other sites
  • 0

Interesante, la verdad nisiquiera yo sabia que los emuladores no utilizaban multi-core y la verdad, si te recomiendo Hercules, lo he usado sobre los otros y es mucho mas rapido para mis pruebas y cuando hago scripts necesito estar haciendo @reloadscript a cada rato y la verdad en Hercules es instantaneo y en rAthena se congela el servidor hasta por 30 segundos.. Hercules esta muy optimizado e Ind no deja de optimizarlo, como dice jaBote, todas las funciones nuevas que quieras poner se añaden por medio de plugins, tambien puedes modificar cosas por medio de plugins, la verdad yo soy malisimo con la SRC.. creo que jaBote sabe mas de eso que yo, pero yo se mas de clientes que jaBote haha asi que si tienes alguna duda trataremos de responderte. (Probablemente jaBote te responda mas rapido que yo ya que el se la pasa revisando el foro a cada rato y yo no siempre puedo tocar la PC, igualmente jaBote siempre da informacion certera aunque no sepa del tema)

 

Saludos ! 

Share this post


Link to post
Share on other sites
  • 0

Gracias por las buenas respuestas :D

He estado mirando muy por encima el código y veo muchas lineas nuevas (haciendo memoria de lo anterior).
Pero creo que aun no implementan ciertas cosas:

 

Summon ID: Para darle una identificación al Mob que se haya invocado y poder diferenciarlo de otros con la misma MobID. Actualmente usar el típico MOBLABEL alargaría la creación de scripts agregando mas subRutinas.

 

Variable de Party: Una variable en común entre miembros del mismo PartyID, también muy útil cuando se crean scripts especiales para Teams.

 

Variable Temporal de MOB: Esta es un poco mas loca, pero sirve mucho para mejorar la AI de los mobs controlada por scripts, tanto asi como que; Si un usuario no habla con tal NPC el mob ejecutará tal Skill. También podría ser usado para que el Script vaya guardando información de los Kills que lleva el Mob y agregarle algo.

 

Mob Walk to: Para hacer que los mobs caminen en ciertas direcciones.

 

Mob de Grupo : Para llamar un mob que sea amigo de la Party y hostil contra otros players o Mobs.

 

 

Con plugins así dentro del emulador uno podría crear nuevos scripts de juego. Seguir en la misma linea de calcarse a RO Oficial es... pasado.

 

Ahora sobre M45T3R, creo que los Cliente siguen usando Directx 6, o ya estan utilizando DirectX 9 o al menos 8.


pdt: Sorry por la tardanza en contestar me fui de vacaciones varias semanas >.<

Share this post


Link to post
Share on other sites
  • 0

¡Hola de nuevo!

 

Tengo malas noticias en general sobre las peticiones/sugerencias que has hecho. Vayamos por partes:

 

  1. Sobre las Summon ID: Esto formaba parte en eAthena de una suite de comandos de scripting (llamada mob control suite) hechos por Ultramage, que fue posteriormente eliminada en la propia eAthena debido a que estaba muy ineficientemente programada, usando gran cantidad de recursos. Yo mismo no estaba en el mundo del RO entonces, así que no puedo decirte muy bien qué fue de ellos. Lo que sí sé es que en Hercules se plantean reintegrar dicha suite como plugin para Hercules aunque no se ha puesto aún nadie a la obra. Aunque sí puedes hacer uso del script command monster con un único monstruo a la vez y guardar su game ID, para poder controlarlo de forma básica más tarde, con los pocos comandos remanentes de la citada suite (unit*).
  2. Sobre las variables de Party: Aunque no lo encuentro ahora mismo, creo que esto ya fue sugerido y rechazado como sugerencia porque había una forma de hacer cosas parecidas. Yo personalmente iteraría en toda la party, le pondría a todo el mundo la variable deseada como variable temporal (@var, válida hasta que se desconectan del servidor) y haría las comprobaciones pertinentes en cada NPC. Y no estoy seguro de esto, pero creo recordar que las variables de instancia ('var, variable de party que está haciendo una instancia) también son válidas para Battlegrounds. También desde el Staff se está hablando de hacer un comando de scripting que se ejecute simultáneamente en cada usuario conectado en una misma party, aunque no puedo contarte mucho más al respecto.
  3. Sobre las variables temporales de mob: No recuerdo si estaba en la mob control suite, aunque que sepa nunca se ha hablado de esto en ningún sitio.
  4. Sobre hacer andar las mobs: Como comenté en el apartado 1, puedes hacer esto obteniendo la GID del monstruo y usando unitwalk.
  5. Sobre mobs que defiendan a un grupo: Puedes hacer uso del comando de scripting summon. Creo que no es exactamente lo que buscas aunque puedes hacer buen uso de él.

Siempre puedes ir al foro de sugerencias del emulador (en inglés) y sugerir la implementación de alguna que otra nueva característica. No es complicado obtener apoyo aunque he de reconocer que siempre tardan bastante debido a que aquí hay menos desarrolladores y pasan más tiempo solucionando bugs y ajustando comportamientos oficiales más que a esto.

 

Por otro lado, no sé personalmente la versión de DirectX que usan en el cliente, aunque preguntando en el IRC me han respondido que aún están utilizando DirectX 7.

 

P.D.: Como nota curiosa, no me explico cómo he caído enfermo dos veces este mes, cada vez exactamente un día después de cada mensaje tuyo en este topic :omg:

 

¡Un saludo!

Share this post


Link to post
Share on other sites
  • 0

No es raro que te enfermes con mis dudas.

 

Mira, emm lo que mas me preocupa ahora para mi proyecto es hacer que la party pueda llamar un Mob que reconozca a los otros mobs como enemigos (o al menos el Lider lo pueda llamar y sea responsable). Vi en rAthena un MOD para hacer Facciones que hacia algo parecido a lo que necesito pero aparte que el MOD era de pago, era solo para rAthena.

 

Otro punto es que, el GIDmob permite obtener información del Mob desde Script? ejemplo; poder conocer su estado de HP y quizá usar un efecto SC_start sobre el Mob?

Edited by Kamina

Share this post


Link to post
Share on other sites
  • 0

Estas preguntas ya son algo más complicadas.

 

Creo que al final se acabó lanzando de forma gratuita en rAthena la modificación para facciones, aunque supongo que si el desarrollador principal no lo ha ido actualizando la modificación estará ya totalmente obsoleta. Aquí hicieron el plugin en DLL (que nunca supe cómo añadirlos manualmente si no es compilando a través de su código) aunque tiene pinta de que le ocurre lo mismo.

 

Creo que con summon puedes hacer un poco el paripé (aunque creo que no funciona el truco de la mob GID), aunque no dispondrás de ningún tipo de control avanzado sobre él (ni de su HP, aunque eso sí estaba en la mob control suite).

 

He echado un par de horas sin una versión de prueba de Hercules (las que tengo de momento no están funcionales por diferentes proyectos tanto públicos como privados y no puedo usar más) para intentar que summon devuelva una GID, aunque sin éxito porque las funciones usadas en el comando no te dan la GID de forma directa.

 

Sobre intentar hacer un SC_START para mobs, tras empezar a hacer un nuevo comando (que no sabría si iba a funcionar por lo anteriormente comentado) y tratando de comprender bien el comando SC_START existente, parece que puedes pasarle una GID de monstruo para que le haga el status. Pruébalo si puedes y ya me comentas.

 

Un saludo.

Share this post


Link to post
Share on other sites
  • 0

jaBote, viejo eres muy oportuno en tus respuestas. Te agradezco mucho :D

 

Desde anoche que llevo trabajando en mi Debian para empezar a montar el emulador y bueno, la mySQL me dio problemas con el IPBind, luego tuve un problema con Hercules que no que queria Logear en CharServer y ponerse UP, pero la mayoría Errores mio, asi que ya he logrado ponerlo en Pie, pasa que tenia un EXE y su DATA ya hecha y queria usarlo pero al intentar entrar al MAP server me desconecta porque no reconoce el Packet

 

clif_parse: Received unsupported packet (packet 0x464d (0x094b), 19 bytes received)

Entonces se me ocurre ir a la db/packet_db.txt y no esta XD. Recuerdo que a mi antigua packetDB le tenia agregadas lineas para que el 2012-04-10aragexe aceptara la CashShop.

Share this post


Link to post
Share on other sites
  • 0

Yo en tu lugar trataría de usar algún que otro cliente más nuevecito... :rolleyes:

 

Aún así, puedes añadir tus paquetes en src/map/packets.h, solo recuerda mantener el orden cronológico de los clientes porque si no te puedes llevar una sorpresita bastante frustrante y además difícil de descubrir el por qué del fallo ;).

Share this post


Link to post
Share on other sites
  • 0

Realmente ando perdido... la única web donde encontré un cliente 2013 es http://k3dt.eu/Ragexe/unpacked/

 

Aun asi no tiene el DIFF, las otras web que vi solo tienen hasta los clientes 2012.

 

Recuerdo que había una pagina que hacia el DIFF del EXE, pero aun no doy con ella.

 

Otra Duda... Es obligatorio que al compilar el Emulador deba poner el PacketVER? Siendo que ya lo he definido en mmo.h

 

edit

 

Luego de estar dándole la vuelta toda la noche al problema del

[Warning]: clif_parse: Received unsupported packet (packet 0x464d (0x094b), 19 bytes received), disconnecting session #7.

Logre dar con el problema del Asunto.

packet_obfuscation: 2

 

Revise la lista de Paquetes en src/map/packets.h y resulta que el paquete 0x094b existe y esta bien colocado donde corresponde.

Ahora, este paquete 0x464d es demasiado alto para Emulador, el problema es que; al parecer no lo emite el Cliente ya que no podría logear en un rAthena normal (probado) o usando packet_obfuscation: 1 o 0 (probado)

 

Lo que mas me interesaba de Hercules era su packet obfuscation  :(

Edited by Kamina

Share this post


Link to post
Share on other sites
  • 0

Si te soy sincero, yo suelo evitar cualquier cosa en relación con el client-side ya que me parece cuanto menos complicado, y muy críptico todo.

 

Personalmente suelo usar clientes prehechos de gran calidad como los de @ossi0110, que tiene unos cuantos en client-side releases, que si bien no se ajustarán del todo a lo que necesitas en tu proyecto, te dan las herramientas para rediffearlos y hacer el tuyo propio, así como añadir tus customs.

 

Aún así, en el tema Requested Links (enlaces muy solicitados), situado en el menú superior dentro de la pestaña "+ Others", tienes enlaces a los anteriores proyectos donde se conservan clientes de otras fechas. Últimamente se tienen muy pocos clientes estables para uso.

 

Para diffearlos a tu gusto, pues honestamente te recomiendo utilices una nueva herramienta como NEMO (con la que aún no he podido experimentar pero según dicen da hasta gusto usar). El diff patcher online de rAthena fue buena idea en su momento, pero como puedes ver si accedes a su página no te interesa mucho usarlo.

 


 

Por supuesto que tienes que poner el PACKETVER de tu cliente y luego compilar. De esta forma le dices al emulador cómo tiene que comunicarse con el cliente, porque se tiene que cada cliente es bastante especialito como mínimo y requiere que algunas cosas se le envíen de forma diferente. Recuerdo que el PACKETVER es simplemente la fecha aaaammdd (año-mes-día) del cliente para facilitar las cosas.

 

También tienes que tener cuidado con que si estás usando un cliente que es ragexeRE y no un ragexe, tienes que descomentar la línea 55 de src/common/mmo.h:

 

#ifndef PACKETVER#define PACKETVER 20131223#endif // PACKETVER//Uncomment the following line if your client is ragexeRE instead of ragexe (required because of conflicting packets in ragexe vs ragexeRE).//#define ENABLE_PACKETVER_RE#ifdef ENABLE_PACKETVER_RE#define PACKETVER_RE#undef ENABLE_PACKETVER_RE#endif // DISABLE_PACKETVER_RE

Share this post


Link to post
Share on other sites
  • 0

Pues... yo vi en un post de Ai4rei que habian actualizado Directx a la version 9 .-. que raro

Share this post


Link to post
Share on other sites
  • 0

Cliente 2013-06-05Ragexe 

 

[Warning]: clif_parse: Received unsupported packet (packet 0x1062 (0x022d), 19 bytes received), disconnecting session #7.

 

El Ofuscation sigue invalidando la entrada al MapServer.

Share this post


Link to post
Share on other sites
  • 0

¿Es posible que para que funcione tengas que añadir un diff llamado "Enable packet encription" mientras estás diffeando el cliente?

 

Disable Packet Encryption con y sin. Pero no importa, me rindo.

Share this post


Link to post
Share on other sites
  • 0

Yo he logrado ponerlo correctamente y hay que deshabilitar Enable packet encription y la opción de titulo personalizado.

Por lo que se ve el titulo personalizado quita unos bytes importantes para la opción packet_obfuscation.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.