Jump to content
  • 0
dakai

Modificar mob thor dungeon

Question

Hola chicos, hice la misma pregunta en la sección en ingles, pero aun no tengo respuesta. Me gustaría saber que debo modificar para que el mob de Thor dungeon(Kasa,Salamander,Sword guardian,bow guardian) pierdan el efecto "endure" que tienen al ser considerados boss. Intente cambiando el código de "mode" de los mounstruos en la base de datos, logrando quitarles el efecto endure, pero el problema es que ahora se congelan y no quiere que suceda eso. Alguna pista de como lograrlo?

Share this post


Link to post
Share on other sites

6 answers to this question

Recommended Posts

  • 0

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!

Share this post


Link to post
Share on other sites
  • 0

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!

Gracias por la respuesta, me imagine que algo así debería poder hacerse, pero no he encontrado el lugar exacto donde sucede y por otra parte como hacer la comparación con los ID específicos. Cuando puedas me dices donde buscar y como :)

Share this post


Link to post
Share on other sites
  • 0

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 ;)

Share this post


Link to post
Share on other sites
  • 0

Genial ya entiendo un poco, lo que aun no capto, es como en ese switch de condiciones podría quitar el efecto endure y como obtener el mob id?

Share this post


Link to post
Share on other sites
  • 0

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.

Share this post


Link to post
Share on other sites
  • 0

Uh, nunca me habia metido en eso.. no me parece bien que ese estado este tan hard-codeado.. o-o

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.