Jump to content
Clein

Hercules?... me podrias explicar como va?.

Recommended Posts

Bueno resulta que hace años que estuve trabajando en pserver y esas cosas, con eAthena, y me retire, y ahora que vuelvo, veo que eAthena ya no corre, osea se esta usando rAthena (por lo que estoy entendiendo), pero tambien existe este proyecto, Hercules.

 

Cuales son las diferencias?, ventajas y desventajas con rAthena por ejemplo?, que otros proyectos existen al respecto y porque se disvolvio eathena?.

Los Script (npc) fabricados en eAthena simplemente no son compatibles con Hercules?, o ahi que ajustarlos?.

 

El codigo en C por lo que estuve viendo tiene una estructura similar a lo que recordaba de eAthena, pero ya tantos años que no sabria decir :S.

 

En terminos de eficiencia, y compativilidad, que opinan ustedes?.

 

Saludos y gracias por las aclaraciones ^^.

Share this post


Link to post
Share on other sites

eAthena como proyecto murió debido a creo recordar que fueron problemas con su administración, aunque hasta el momento se actualiza muy de higos a brevas y solo para incluir actualizaciones críticas (o sea, puede considerarse que su desarrollo activo ha parado).

 

De eAthena nació rAthena, un proyecto que quería seguir en la misma línea que eAthena pero incluiría las mecánicas renewal que jamás se incluyeron en él. A los casi dos años de una enorme prosperidad en cuanto a inclusión de nuevas ideas y características se produjeron problemas en su staff. Entonces unos cuantos miembros de rAthena decidieron separarse de ese grupo y fundaron Hercules, un emulador que pretende seguir las mecánicas de kRO (igual que sus predecesores), aunque sus principales novedades son una mayor eficiencia en cuanto a coste de RAM y proceso (el map server vacío y sin NPCs solo ocupa alrededor de 70 MB de RAM, en proyectos anteriores llega a los 200 MB) y una mayor depuración del código (esto no quita que algunas revisiones nos salgan mal, como siempre es posible). Además tenemos un sistema de plugins muy bonito (para lo que se revisó todo el código del map server) e infrautilizado para mi gusto que permite que, si la gente lo utilizase bien, puedas introducir modificaciones del código fuente sin ningún riesgo de sufrir conflictos al actualizar el repositorio.

 

También, aunque no le hacemos ascos a desarrollar nuevos sistemas que faciliten el uso del emulador a gente nueva (pero reconozco que cambiar el chip cuesta a los que ya tenemos una experiencia) hemos sido un poco menos transigentes con algunas de las ilegibles dbs en texto que había en el emulador y las hemos convertido a un nuevo formato. O por ejemplo se ha hecho el motor de scripting sensible a mayúsculas y minúsculas, provocando error al interpretar muchos tipos de script que funcionasen pero estuvieran previamente hechos a base de malas prácticas de programación (y pudieran provocar comportamientos inesperados), pero el propio emulador ofrece de momento la solución al error de scripting. Ambas cosas rompen un poco la retrocompatibilidad pero es lo que hay. Personalmente, a mí no se me ha roto ni un solo script que hice antes de saber qué era C en eAthena. Aún así, reparar esos scripts sería muy fácil como te digo: aún no he visto un solo caso en que la consola no te diga que hacer en esos casos y la vasta mayoria de los scripts hechos para eA o rA (que no usen el sistema de instances, ya que se ha rehecho desde cero en Hercules) funcionan tal cual, sin necesidad de modificación alguna.

 

El código es casi el mismo solo que actualizado unas 5000 veces más que lo que hay en eAthena y adaptado a los cambios de los oficiales. Yo mismo resolví un error de documentación que había en el mismo desde hacía unos 9 años (e hice una entrada de blog sobre ello, en inglés).

 

Sobre otros emuladores actuales de interés aparte de eA y rA y que no sean de pago se me ocurren 3CeAM (el primero en incluir 3as clases) y quizá brAthena y Cronus si te interesa la emulación en portugués de Brasil y el oficial bRO.

 

Sobre lo de ayudarte a decidir un emulador, no descarto que si haces la misma pregunta aquí y en los foros de rAthena cada cual te intente llevar a su lado porque el emulador X es mejor. Yo prefiero que te formes tu propia opinión a la vista de lo que hay. La mía ya está hecha y ni mucho menos pienso adoctrinar a nadie.

 

Por último, siento la total ausencia de enlaces en este post o de quizá la aparición de alguna errata grave, estoy tecleando esto desde el teléfono móvil porque en estos instantes no tengo acceso a un PC (en ese caso no me importarla darte una respuesta mucho más detallada). Espero haber sido de ayuda como poco.

 

¡Un saludo!

Share this post


Link to post
Share on other sites

[...]

Wooou!!, increíble respuesta!, muchísimas gracias!, quiero citar algunas cosas :P

infrautilizado para mi gusto que permite que, si la gente lo utilizase bien, puedas introducir modificaciones del código fuente sin ningún riesgo de sufrir conflictos al actualizar el repositorio.

Yo no llevo programando mas de dos años o asi en C, pero si se logra hacer esto, uff es muy bueno!, osea poder agregar tus mods sin que afecten a futuras update, creo que es todo.

O por ejemplo se ha hecho el motor de scripting sensible a mayúsculas y minúsculas, provocando error al interpretar muchos tipos de script que funcionasen pero estuvieran previamente hechos a base de malas prácticas de programación

Esto!, creo que es indispensable, siempre odie las malas practicas, incluso cuando parti programando sin estudios ni nada, parti con eAthena me gustabas tener todo super claro!.

 

--

Ahora un par de preguntas.

 

Me gusta el tema de que este mas limpio el codigo y que gaste menos recursos, creo que esta genial.

La duda es, puedo activar un modo "pre-renewal"?.

En un VPS donde tengo corriendo rAthena, puedo montar este e ir probando como anda sin conflictos?.

 

Muchas gracias jaBote por la información y estaré atento a tus respuestas ^^.

Share this post


Link to post
Share on other sites

Voy a comenzar ampliando un poco mi respuesta a lo que me has citado primero, que son más largas y prefiero escribir desee el teléfono con más ganas ;).

 

Respecto a los plugins: efectivamente na idea es esa, que al hacer update en tu repositorio local no tengas que enfrentarte a problemas que tiene el programa que aplica los diffs de actualización. La función principal del Hercules Plugin Manager (así se llama) es poder añadir estructuras de datos propias y sobrecargar totalmente algunas funciones del código fuente, aunque también se proporciona un plugin para poder añadir hooks antes o después de las funciones del código, bien para modificar las entradas de las funciones (antes) o su resultado para las funciones que deban ser ejecutadas después. La idea de que los hooks sean un plugin es que así no se consume recursos de usuarios que lleven servidores y decidan no hacer uso de ellos. Como contraparte, tampoco es posible de momento sobrecargar estructuras de datos mediante plugins (aunque siempre puedes enlazarlos con estructuras que crees tú mismo en el plugin) y quizá sea ese el motivo por el que los plugins parecen no disponer del favor de muchos terceros desarrolladores que venden modificaciones y por eso comento que el sistema está infrautilizado. Mi visión personal tras hacer un plugin exclusivo para un servidor que no es mío es que la única dificultad añadida que entraña hacer un plugin es simplemente pegar un poco de código que siempre es igual, preocuparte de que añades los encabezados y las interfaces correctamente y de enlazar bien los datos en caso de necesitar extender alguna estructura ya hecha.

 

Sobre los scripts, pues simplemente se han hecho romper (entiéndase dejar de interpretar sin errores) malas prácticas que venían haciéndose incluso antes que en eAthena (pero los scripts bien hechos de la "madre" de eAthena incluso siguen funcionando) como por ejemplo usar el comando close; sin tener una ventana de diálogo con NPC abierta o la sensibilidad a mayúsculas y minúsculas: los comandos de scripting deben estar todo en minúsculas, el nombre de las variables específicas del jugador (como su nivel y tal) tienen mayúscula inicial y así. Deberías fijarte un poco en el manual de scripting si quieres verlo todo, que aunque no haya cambiado gran cosa algo nuevo sí hay. Y como dije, en cuanto a errores de mayúsculas y minúsculas siempre se envía un mensaje de error al usuario diciéndole lo que el servidor entiende que es una mala práctica y le corrige con lo que podría ser su nombre correcto.

 

Respecto a las preguntas:

 

-> Sí, existe un modo pre-renewal aunque es un parámetro que se pasa a través de... editar obligatoriamente el código. Aunque se pensó en incluirlo como configuración en la carpeta /conf, se dijo que como alguien generalmente usa renewal o no y es una decisión que podría ser "para siempre" mejor hacerlo a través de la compilación condicional que puede hacerse en C gracias a su preprocesador. Al desactivar renewal se cargan distintos NPCs y bases de datos, y el emulador se queda por defecto en un estado que llega hasta Brasilis, justo antes de la inclusión de las terceras clases si mal no recuerdo. Dicha configuración está en la carpeta src/config/renewal.h (como estoy en mi teléfono y no puedo mirarlo va de memoria, pero si no está por ahí estará muy cerca). Ya que sabes de C obviaré recalcar lo muy importante que es recompilar tras cambiar algo así para que la modificación surta efecto. El desarrollador que hizo anteriormente esto para rAthena es el "jefazo" actual de Hercules de hecho, por lo que si no lo han cambiado desactivar renewal en rAthena se haría de forma idéntica.

 

-> Por supuesto que puedes probar ambos a la vez si tu máquina tiene potencia suficiente como para ejecutar ambos emuladores a la vez si esa es tu pregunta. Solo recuerda que tendrás que cambiar los puertos de escucha de los servidores (y actualizar tu cliente de forma acorde) para que los emuladores no se peleen por usar los mismos puertos. También recuerda que las bases de datos (me refiero a las SQL) son distintas así que hay que tener una distinta para que ambos emuladores se lleven bien en tu máquina (que ya es mejor que como se llevan algunos entre un emulador y otro).

 

Aquí sigo aunque sea respondiendo desde el móvil a lo que tenga capacidad de responder desde este soporte limitado. ¡Un saludo!

Share this post


Link to post
Share on other sites

...

=O, muy bueno eso de los plugin..

Wait así rapidamente según entiendo, puedo sobrecargar funciones con esto?.

Interesante xD.

 

Bueno yo creo que ya comienzo a probarlo llegando a la casa, a ver como anda.

 

En cuanto a renewal creo que si tendría que ir directo en un deff, así evitas código compilado que no se usa, en plan un def que compila o no código, me gusta.

 

Tienen por casualidad una wiki o algunos link que pueda leer?.

 

Saludos y gracias.

Pd: este foro tendría que tener taptalk, ya que es por mucho que ipboard tenga un skin nativo para celu, no es igual xD.

Share this post


Link to post
Share on other sites

La idea principal del Hercules Plugin Manager, que hubiese entendido en su época, era la sobrecarga de funciones del código fuente y puede hacerlo. Adicionalmente, además de los hooks antes o después de una función también se pueden añadir @comandos, comandos de scripting y para ejecutar con la consola, lectura de nuevos parámetros de conf/battle o paquetes de datos y no me acuerdo de nada más.

 

Wiki sí hay, aunque no está muy actualizada. No tengo el enlace a mano aunque prueba con http://herc.ws/wiki

 

Con lo de tapatalk no me puedo meter yo porque no tengo capacidad de decisión al respecto, aunque con la de modificaciones que tiene hechas por el propio personal de aquí dudo que vaya muy bien (tapatalk pide a los dueños de los foros que no toquen el motor que sirve las peticiones...)

Share this post


Link to post
Share on other sites

:o, a que te refieres con "La idea principal del Hercules Plugin Manager, que hubiese entendido en su época", ya no se utiliza esto o tu no lo utilizas?, me parece una idea bastante interesante, ya que podria sobrecargar las funciones que me interesa modificar y evitar probelmas de update del emulador a futuro.

 

Por otro lado, la wiki si funciona gracias ^^, ademas, revisando me di cuenta que el item_db.conf esta HERMOSO!, infinitamente mas ordenado que de eAthena lleno de comas que nadie sabe como shit van xD.

 

por sierto, siempre he tenido una duda... que ser mas eficiente?, tener los item por DB o por .conf, porque asumo que el .conf lo que hace es cargar todo en RAM, para hacer lectura mas rapido, pero con la DB tambien no?, o va y consulta cada ves, seria una locura creo :S, y cargarlo en memoria tambien, seria como para ver que este ordenado no?, o tiene otra funcionalidad los item_db.sql quye uno carga en la DB?.

 

Saludos y gracias.

Share this post


Link to post
Share on other sites

No, no, por supuesto en HPM sigue activo y soportado por Hercules. En otro caso simplemente nombrarlo hubiera sido inútil.

 

En cuanto al item_db.conf, eres de los pocos nuevos a los que les gusta. A mí realmente sí me gusta porque no tienes que andar contando comas mil veces para saber en qué campo estás (que tiene su trabajo), mi única pega es que hay que convertirlo al nuevo formato y creo que ese es exactamente el problema de por que no le gusta a la gente.

 

Como ventaja se tiene que es un sistema muy escalable (solo especificas los campos que necesitas, al resto se les asigna un valor por defecto que puedes saber de antemano, y no tienes que dejar campos vacíos ni recibir errores por contar mal las comas) que además integra los valores del resto de dbs relacionadas con los ítems (item_notrade, item_nouse y demás) y su legibilidad, que ha quedado patente. También se ha acabado con el límite de tamaño del script que el objeto podía contener (creo que era 255 caracteres pero no estoy seguro). Sus inconvenientes (aparte de que la gente se siente reacia a adoptar la nueva estructura) son que el archivo ocupa algo más de espacio en disco (por motivos obvios) y que en su carga (al iniciar el servidor) es ligeramente más lenta que con el formato anterior, aunque se diferencian solo unos pocos milisegundos. También se está trabajando en convertir a este formato la mob_db (y accesorios) de momento.

 

Que tenga conocimiento (y me sorprendería que no fuera así) todas las dbs se cargan en RAM al inicio de la ejecución del emulador porque es muy lento tener que depender del disco duro para abrir y cerrar tantas veces los archivos y buscar la entrada especifica con su debido bucle de programación. Cada db se carga como una suerte de LUT (busca look-up table en Wikipedia) de manera que el acceso a los datos sea prácticamente inmediato.

 

Puedes optar por no cargar las item y mob db en la base de datos SQL, puesto que no se da soporte directo a ellos y solo están para poder ser usados en software de terceros como los paneles de control, porque no suponen una solución buena al ser datos que suelen ser estáticos en su vida útil (y solo se leen al inicio del servidor y cuando se ejecuta @reloaditemdb): las bases de datos SQL están ahí para poder manejar datos de forma dinámica para que suponga menos coste operacional que si se hace de otras formas.

 

¡Un saludo!

Share this post


Link to post
Share on other sites

Ajajjajaa siempre encontré que era como el forro el item db y el mob db, comasy comas y comas uff, yo me perdia muy fácil, pero con esto lo veo mucho mas simple.

 

Entonces estoy bien usando un txt si al final todo se carga en memoria como suponía.

 

Ahora yo programe mi propio panel de control bastante distinto a otros, pero de igual forma trabajo conectando la db de items de forma externa porque luego hacer preguntas a la sql del server puede ser mas gastos de los recursos del servidor del server, mejor tengo un servidor distinto para la web.

 

Avería ahora que voy en el metro no recuerdo lo que vi en la mañana pero aver otras dudas que tenga...

 

Bueno creo que ya seria todo, src, npc, y config, cualquier cosa estaré preguntando.

 

Muchas gracias por toda la info y mañana comienzo las pruebas y a ver como anda.

Share this post


Link to post
Share on other sites

Me salto otra duda...

En caso de tener un server montado con eAthena o rAthena, se puede realizar una migración de la DB?, ya que según entiendo son distintas :S.

Share this post


Link to post
Share on other sites

¿De la DB en SQL? Vaya, soy yo el que se ocupaba de eso. Hay un upgrade de eAthena a Hercules (simplemente actualiza la DB de eAthena al máximo, aplicar el upgrade y luego aplicar cada uno de los ficheros de upgrade desde el principio).

 

Para hacer upgrade de rAthena a Hercules (en verdad es un convertidor, aunque lo he llamado upgrade porque así se llama la carpeta inicial) simplemente tienes que ejecutar los convertidores que hice. No están actualizados, aunque tengo un par de horas de PC ahora mismo y trataré de actualizarlos ya si tengo tiempo.

 

¡Voy al lío!

 

P.D.: En verdad PC tengo, lo que no tengo es Internet de momento y parece que va para largo, tengo que moverme de mi casa a un sitio para poder robar utilizar conexión wifi amablemente cedida por los vecinos :heh:

Share this post


Link to post
Share on other sites

¿De la DB en SQL? Vaya, soy yo el que se ocupaba de eso. Hay un upgrade de eAthena a Hercules (simplemente actualiza la DB de eAthena al máximo, aplicar el upgrade y luego aplicar cada uno de los ficheros de upgrade desde el principio).

 

Para hacer upgrade de rAthena a Hercules (en verdad es un convertidor, aunque lo he llamado upgrade porque así se llama la carpeta inicial) simplemente tienes que ejecutar los convertidores que hice. No están actualizados, aunque tengo un par de horas de PC ahora mismo y trataré de actualizarlos ya si tengo tiempo.

 

¡Voy al lío!

 

P.D.: En verdad PC tengo, lo que no tengo es Internet de momento y parece que va para largo, tengo que moverme de mi casa a un sitio para poder robar utilizar conexión wifi amablemente cedida por los vecinos :heh:

hahahahahah, algun link donde este el convertidor upgrade o como quieran llamarlo??.

 

PD: wifi del vecino ruls (?) xD

Share this post


Link to post
Share on other sites

Hola. Acabo de terminar el convertidor aunque no pude testearlo. Todos los convertidores o upgrades se encuentran aquí: /sql-files/upgrades y también en tu repositorio local cuando lo actualices. Por cierto, recuerda hacer una copia de respaldo antes de intentar aplicar el convertidor.

 

Si te sale una base de datos funcional (que creo que sí, lo he revisado pero no he podido probarlo), coméntame y doy la actualización del convertidor por buena.

 

P.D.: El wifi del vecino rules, pero si tienes que salir a la calle y coger frío en un pasillo abandonado no tanto, por eso generalmente respondo desde el móvil xD

Share this post


Link to post
Share on other sites

... mi rAthena no esta actualizado U_U, por lo que no pude ejecutar el update.<br /><br />Al final ya lo monte y lo corri, cambiando los puertos sin la DB vieja, voy a probar limpio y a ver como me va, a primera vista se ve mas veloz, pero ya veremos, me intereca mucho este proyecto, se ve chori xD.

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
Reply to this topic...

×   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.