Jump to content

jaBote

Community Contributors
  • Content Count

    2037
  • Joined

  • Last visited

  • Days Won

    43

Everything posted by jaBote

  1. IDK where you've got this database entry, but it's plain ridiculous. It's some sort of text, encoded as an hexadecimal string (hence the 0x starting value and numbers ranging from 0-9 and A-F) with some sort of ciphering method. But who the heck would ever decide on his sanity to encode long texts into an absurdly big int number and represent them as hexadecimal strings? Could be possible for someone else than me (not sure), to know how to decipher these strings provided we know the source that translates that to human readable strings.
  2. Sí, también está esa decisión aunque para qué mentirnos, suelen ser más caras mes a mes que alquilar un servidor dedicado barato. A menos que planees tener miles de usuarios no necesitas tanto hardware como para plantearte el housing. A menos que te hagan una buena oferta, los planes de housing que he visto no bajan de unos 80€/mes (más o menos unos 100 US$), cuando he visto en un conocido líder europeo a nivel de hosting un servidor VPS garantizado que aguanta varios cientos de usuarios (usándolo dedicado) y no supera por mucho la tarifa de 3 US$ al mes, sin tener que preocuparse del hardware propio.
  3. Honestamente, te recomendaría que pases de cualquier oferta de servidores dedicados "especiales" para RO, más que nada porque se te ofrece un servicio más caro y limitado que contratando un hosting general (dedicado, VPS o similar). La tontería llega a niveles de que, por ejemplo, en cierto proveedor se niegan a instalar git, que sirve para la absoluta nimiedad que es descargar Hercules o rAthena en sus últimas versiones, alegando que no es un comando necesario para la máquina y que con svn ya hay suficiente. Y qué decir de que son empresas (en su mayoría fuera de toda legalidad y garantía) que aparte de no ofrecer garantía pueden desaparecer sin dejar rastro porque nadie las quiere (por ejemplo AsuraHosting tenía muy buen nombre y desapareció completamente de la noche a la mañana, sin garantías ni posibilidad de recuperar datos). En una empresa cuya actividad principal es el hosting es más difícil que esto ocurra, pues la enorme mayoría de los casos al disolverse se negocia la cartera de clientes y tú generalmente disfrutas del mismo servicio al mismo precio pero bajo otro nombre. Mi recomendación es que: - Estudies detenidamente de dónde crees que provendrán tus usuarios (que parece que ya tienes hecho) - Busques compañías nacionales o en países cercanos a lo que consideres el punto medio de los que serán tus usuarios: esto les asegurará un mejor ping a todos. Si no los encuentras al precio que deseas recurre a soluciones peores pero más baratas como Estados Unidos, siempre buscando algo que dé garantías. - Contrata el host y aprende un poco a jugar con Linux. Aprende a instalar dependencias y paquetes, mover ficheros y carpetas y administrar (más bien manejar) de forma básica una máquina sin depender mucho de FTP. Esto te dará seguridad en ti mismo cuando algo falle, si falla, y no deberías tardar mucho en aprender al menos a manejarte. - Instala y configura el RO por ti mismo, una vez has aprendido a usar la máquina es un proceso casi trivial. Montar tu propio cliente no lo es tanto. Esto te dará conocimiento básico sobre el RO, que también puede marcar una diferencia. Entre los muchos factores que marcan el éxito de un servidor, una buena capacidad de respuesta ante un fallo es crucial. Y a veces una buena atención es la diferencia entre un "este tío no tiene ni puñetera idea" y "pues parece que saben manejarse en este servidor", lo que tiene una clara traducción en cuanto a confianza de los usuarios. Por si no quieres leer mucho: busca mejor un hosting y montalo tú. Más barato y menos limitaciones estúpidas.
  4. You can copy and paste the errors here if you want, some of us understand them and/or are able to guess what are them or translate by reading the error text.
  5. Al leer las descripciones del tema, se ve que la data 3.0 es para clientes 2012-04-10 o anteriores. Un saludo.
  6. You can edit the respawn file at NPC/{re or pre-re}/monsters folder or like that, check for lhz_dun file. Sorry for not being absolutely accurate, can't open a repository copy right now.
  7. Not spoonfeeding for today because of no time. Just add a temporary char variable which is set to killedrid (which is account id of the killed user), check if this killedrid is the same as the old one and make it act accordingly. You could also use the char id based on who's online on that account id, but it can be a waste of time.
  8. Esta configurado para renewal por padrão. Você pode desativar-lo mudando as opções no arquivo src/config/renewal.h e recompilando.
  9. AFAIK, you can't hook onto an arbitrary point in a function, just pre or post hook it. I guess if you want to change an intermediate value you would have to posthook it, recheck for your case and, of necessary, redo all important code that use that result as an intermediate result.
  10. No Hercules temos para converter eAthena para Hercules. Seria necessário também executar tudas outras atualizaçãos da pasta de updates.
  11. Vaya, fallo mío. Llegué a entender y a buscar precisamente lo que no querías, que se pudiera congelar la mob de thor dungeon y mantener el efecto endure (cosa de los días en que haces las cosas al revés). He editado mi respuesta anterior para reflejarlo. Mis disculpas. Ahora sí que sí, lo que buscas es la siguiente función, dentro de src/map/status.c, (línea 5684 en la última versión contando a la fecha de publicación del post) unsigned short status_calc_dmotion(struct block_list *bl, struct status_change *sc, int dmotion) { La función entera sin modificar está así: unsigned short status_calc_dmotion(struct block_list *bl, struct status_change *sc, int dmotion) { // It has been confirmed on official servers that MvP mobs have no dmotion even without endure if( bl->type == BL_MOB && (((TBL_MOB*)bl)->status.mode&MD_BOSS) ) return 0; if( !sc || !sc->count || map_flag_gvg2(bl->m) || map->list[bl->m].flag.battleground ) return cap_value(dmotion,0,USHRT_MAX); if( sc->data[SC_ENDURE] ) return 0; if( sc->data[SC_RUN] || sc->data[SC_WUGDASH] ) return 0; return (unsigned short)cap_value(dmotion,0,USHRT_MAX);} Si no quieres meterte en muchos problemas yo alteraría la siguiente parte: // It has been confirmed on official servers that MvP mobs have no dmotion even without endure if( bl->type == BL_MOB && (((TBL_MOB*)bl)->status.mode&MD_BOSS) ) return 0; Tal que así: // It has been confirmed on official servers that MvP mobs have no dmotion even without endure if( bl->type == BL_MOB && (((TBL_MOB*)bl)->status.mode&MD_BOSS) ) int mob_id = ((TBL_MOB*)bl)->class_; // Obtiene el mobID de la mob [jaBote] if (mob_id != MOBID_MOB_1 && mob_id != MOBID_MOB_2 && mob_id != MOBID_MOB_3) // Saltar endure permanente para determinados mobs [jaBote|Dakai-RO] return 0; Deberías te dejo a ti colocar los mob IDs ahí en el código. No lo he probado, pero si no funciona debería estar muy cerca y con un poco de conocimiento o suerte deberías ser capaz de depurar los errores por ti mismo. Ni que decir tiene que esto has de probarlo antes en un entorno de pruebas, pero por si acaso. Un saludo.
  12. EDICIÓN: RESPUESTA TOTALMENTE ERRÓNEA POR ACCIDENTE MÍO DE COMPRENSIÓN EN CUANTO A LA PETICIÓN, PERO PUEDE AYUDAR A ALGUNOS OTROS A EDITAR COSAS POR LO QUE LA DEJO. Te he encontrado el código que hay que alterar aunque no veo el rato para poder intentar editarlo (aunque tampoco soy demasiado bueno en eso pero la dificultad de la edición no es para tanto, mi problema es que soy horrorosamente lento para esto). Se encuentra en src/map/status.c, dentro de la función status_change_start() definida en la línea int status_change_start(struct block_list *src, struct block_list *bl, enum sc_type type, int rate, int val1, int val2, int val3, int val4, int tick, int flag) La parte de código que te interesa es esta: //Check for BOSS resistances if(st->mode&MD_BOSS && !(flag&SCFLAG_NOAVOID)) { if (type>=SC_COMMON_MIN && type <= SC_COMMON_MAX) return 0; switch (type) { case SC_BLESSING: case SC_DEC_AGI: case SC_PROVOKE: case SC_COMA: case SC_GRAVITATION: case SC_NJ_SUITON: case SC_RICHMANKIM: case SC_ROKISWEIL: case SC_FOGWALL: case SC_FROSTMISTY: case SC_BURNING: case SC_MARSHOFABYSS: case SC_ADORAMUS: case SC_NEEDLE_OF_PARALYZE: case SC_DEEP_SLEEP: case SC_COLD: // Exploit prevention - kRO Fix case SC_PYREXIA: case SC_DEATHHURT: case SC_TOXIN: case SC_PARALYSE: case SC_VENOMBLEED: case SC_MAGICMUSHROOM: case SC_OBLIVIONCURSE: case SC_LEECHESEND: // Ranger Effects case SC_WUGBITE: case SC_ELECTRICSHOCKER: case SC_MAGNETICFIELD: // Masquerades case SC__ENERVATION: case SC__GROOMY: case SC__LAZINESS: case SC__UNLUCKY: case SC__WEAKNESS: case SC__IGNORANCE: // Other Effects case SC_VACUUM_EXTREME: return 0; } } Básicamente, para cada caso que quieras cambiar, aíslalo en ese switch (yo lo movería para después del return 0) para que no se junten los efectos de los casos, y deberías comprobar que realmente estás tratando con un mob, de ahí obtener su MobID, compararlas con las excepciones que quieras añadir y dar return 0 si ves que la mob no tiene las ID que buscas. Inténtalo por ti mismo a ver si puedes
  13. Remove all item entries from your SQL database. Do a backup first to ensure you won't lose data.
  14. In that case, you can insert the piece of code where the goto is; In other more complicated cases you could callsub that, which is basically a goto with the possibility of adding parameters and (to my understanding the reason of avoiding using goto) the ability of returning the control to where it was called when the subprogram execution has been finished.
  15. I don't know if this is what you mean, but you can find similar commands by reading the fine manual for this (which is doc/script_commands.txt): *countitem(<item id>)*countitem("<item name>")This function will return the number of items for the specified item IDthat the invoking character has in the inventory.mes "[Item Checker]";mes "Hmmm, it seems you have "+countitem(502)+" apples";close;Like 'getitem', this function will also accept an 'english name' from thedatabase as an argument.If you want to state the number at the end of a sentence, you can do it byadding up strings:mes "[Item Checker]";mes "Hmmm, the total number of apples you are holding is "+countitem("APPLE");close; Edit: Dang, if you're allowed to have apples only you should check this other function: *getinventorylist;This command sets a bunch of arrays with a complete list of whatever the invoking character has in its inventory, including all the data needed to recreate these items perfectly if they are destroyed. Here's what you get:@inventorylist_id[] - array of item ids.@inventorylist_amount[] - their corresponding item amounts.@inventorylist_equip[] - whether the item is equipped or not.@inventorylist_refine[] - for how much it is refined.@inventorylist_identify[] - whether it is identified.@inventorylist_attribute[] - whether it is broken.@inventorylist_card1[] - These four arrays contain card data for the@inventorylist_card2[] items. These data slots are also used to store@inventorylist_card3[] names inscribed on the items, so you can@inventorylist_card4[] explicitly check if the character owns an item made by a specific craftsman.@inventorylist_expire[] - expire time (Unix time stamp). 0 means never expires.@inventorylist_count - the number of items in these lists.@inventorylist_bound - whether it is an account bounded item or not.This could be handy to save/restore a character's inventory, since no other command returns such a complete set of data, and could also be theonly way to correctly handle an NPC trader for carded and named items who could resell them - since NPC objects cannot own items, so they have to store item data in variables and recreate the items.Notice that the variables this command generates are all temporary, attached to the character, and integer.Be sure to use @inventorylist_count to go through these arrays, and not 'getarraysize', because the arrays are not automatically cleared between runs of 'getinventorylist'. Just check that @inventorylist_count is 1 and that @inventorylist_id[0] is the Apple item ID.
  16. Al darle el modo MD_BOSS a un mob, le das resistencia (en muchos casos inmunidad) a estados alterados, endure y además otros beneficios. Lo que podrías hacer es buscar en el código dónde se añaden esos estados a la mob (lo siento, no tengo disponible mi computador ahora mismo para mirarlo, aunque supongo estará en mob.c) y añadir excepciones según el mobID específico. Prueba a buscar y si no lo encuentras, me lo dices y busco, aunque no soy mucho mejor para esto. ¡Un saludo!
  17. Como no has especificado nada más, te dejo indicado el código que deberías introducir dentro de un NPC. Si no sabes cómo meterlo dentro de un NPC puedes buscar en alguna guía básica de scripting. mes "Te vendo ^00FF005 SkillPoints^000000 a cambio de ^0000FF1 Golden Coin^000000.";mes "¿Te parece?";if (select("Sí:No") == 1) { // Si selecciona sí if (countitem(Gold_Coin)) { // Si tiene Golden Coins delitem Gold_Coin, 1; SkillPoint += 5; mes "¡Muchas gracias! ¡Ahí tienes!"; close; }}mes "Vaya, qué pena...";close; Tiene lo mínimo para funcionar: te recomendaría que lo completaras y editaras a tu gusto.
  18. Que tenga conocimiento, la arena de la segunda foto es una arena que originalmente es de GvG, así que asumí que aunque dijeras PvP, probablemente sea GvG en verdad. Aunque si estás en WoE y quieres evitar que se vea aunque sea ese 1, te recomiendo cambiar esta configuración en conf/battle/client.conf para yes: // When set to yes, the damage field in packets sent from woe maps will be set// to -1, making it impossible for GMs, Bots and Hexed clients to know the// actual damage caused by attacks. (Note 1)hide_woe_damage: yes
  19. El daño se enmascara desde el código fuente como 1 para hacerlo oculto al resto de usuarios. Es algo que se hizo así para evitar que otras personas vieran el daño real que hace un jugador sobre otro, aunque es posible sacar el daño de verdad con programas de terceros, cuyo uso desconozco.
  20. Yo logré una única vez que otras personas se metieran en mi servidor casero, y era con Hamachi. La siguiente vez no lo logré, aunque logré que llegaran a loguear o no loguear. Recuerdo que todo tenía la misma configuración más o menos, aunque nunca necesité tocar subnet.conf para nada: prueba a revertir el cambio ahí. Parece que lo tienes todo correcto: la IP y los puertos en los servidores, y la IP del servidor y puerto del login server en el clientinfo.xml; lo que sí parece es que o bien NickyZai acaba de cambiar el cliente a 20141001 o estás compilando para un cliente equivocado, pero creo que es lo primero porque pareces bastante meticuloso. Si no aparece absolutamente nada de nada en la consola del login server y estás totalmente seguro de que estás introduciéndolas correctamente, lo único que se me puede ocurrir es que el cliente no esté leyendo correctamente el archivo clientinfo.xml del servidor. ¿Dónde lo habéis colocado? ¿Está dentro del GRF que se lee primero al iniciar el servidor? Creo que se desactivó hace mucho la posibilidad de dejarlo alegremente en la carpeta data, porque no he leído por ahí el diff de "Read Data folder first".
  21. Si lo que quieres hacer es editarlo para distribuirlo a los clientes dentro de un servidor, lo mejor que puedes hacer es crearlos dentro del propio juego y distribuir el archivo que se crea dentro de la carpeta de la instalación de tu juego, en /savedata/ChatWndInfo.lua También puedes hacerlas "a mano", aunque no lo recomiendo pudiendo hacerlas tú mismo desde el juego, de forma mucho más sencilla. Si lo que quieres es solo renombrarlas para ti, Zopokx está en lo correcto. Un saludo.
  22. jaBote

    Status Point

    You should remove all of these since they are nonexistent in pre-re.
  23. Hello community. The dev team has been recently revisiting the npc/custom folder and we've found some serious issues with them. In summary: As their folder name says: they're custom. This means they're not official and that as a server package that emulates official Ragnarök they shouldn't be present there anyways, being purists. Most of them are years old and were never updated or maintained to conform any current scripting convention or reccommended scripting practices usage, except these that made the scripts to pass the parser. Last point yields a lot of scripts with deficient quality we cannot allow to keep as they are on the current repository (full with deprecated gotos and old set methods, and even a good amount of them have plain horrible variable naming conventions that severely damages readability) since these NPCs could be used by newbie scripters to learning. The lack of maintenance for the scripts over the years (the majority of them are even from eAthena ages and haven't been maintained ever since) could have left them on a state that we can't currently guarantee they are correctly working today, with some exceptions for popular ones. Pretty much all of them would need extensive changes or even full rescripts to adapt to a new, much more reccomendable state, which is traduced on time we can't devote to other more important endeavours here on Hercules. For these reasons, we're thinking on taking the decision of leave them out of official repositories since most of them don't get any use, anyways. Naturally, all of these scripts will be offered either on the forums or by another means of distribution, since you may eventually need to make use of them and there you'll have them available. Since that measure may be quite harsh, we can reach to a compromise solution in which we can leave the ones we deem more useful and common for a wide range of servers (which curiously with exceptions, are among the ones that need the least maintenance), such as: Healer Warper Card Remover Breeder Item Mall Job Master (automatically gives Platinum Skills if needed) Reset NPC Stylist WoE Controller Bank Maybe a couple events? Maybe a couple quests? Any suggestion for keeping other custom NPCs on the repository will be taken into account, but are not guaranteed to keep them safe from the "purge". All of the other NPCs will be, as told before, removed from the repository and placed as optional downloads on the forum so as to anyone who wants to still use them can of course use them, with the warning they'll be using NPCs with deprecated behaviors and may not work as expected. Please don't just think on your own benefit, think on the developers as well, since the result of this poll can cause a lot more of work for the scripting dev team for reaconditioning some rarely used NPC. Thank you for your attention and your opinions.
  24. Por cierto, si has pasado de cliente 2012 a 2013: ¿Has comprobado que has usado una data compatible con el cliente? Si tu cliente era anterior a 20120418, la data no es compatible con los que son de ahí en adelante...
  25. Hola. No estoy teniendo problema alguno para meter cards en los escudos del juego, así que es posible que sea un error de tu propio cliente. Comprueba en el archivo que lleva los items que los escudos con slot tienen, explícitamente, el slot en el clientside. Y además mira en el archivo que lleva los objetos (db/{pre-re o re}/item_db.conf) que los escudos tienen al menos un slot. Mira en db/item_db2.conf en caso de que tengas escudos no oficiales en tu servidor. Un saludo.
×
×
  • Create New...

Important Information

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