Selaa lähdekoodia

Added checks for when a homunculus class is invalid when passing through the hom_class2mapid function. Special thanks to Variant.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@16546 54d463be-8e91-2dee-dedb-b68131a5f0ec
xantara 12 vuotta sitten
vanhempi
commit
14b9eec61e
2 muutettua tiedostoa jossa 11 lisäystä ja 5 poistoa
  1. 10 4
      src/map/homunculus.c
  2. 1 1
      src/map/script.c

+ 10 - 4
src/map/homunculus.c

@@ -242,10 +242,13 @@ int merc_hom_levelup(struct homun_data *hd)
 	char output[256] ;
 	int m_class;
 
-	m_class = hom_class2mapid(hd->homunculus.class_);
+	if((m_class = hom_class2mapid(hd->homunculus.class_)) == -1) {
+		ShowError("merc_hom_levelup: Invalid class %d. \n", hd->homunculus.class_);
+		return 0;
+	}
 
 	if((m_class&HOM_REG) && (hd->homunculus.level >= battle_config.hom_max_level || ((m_class&HOM_S) && hd->homunculus.level >= battle_config.hom_S_max_level) || !hd->exp_next || hd->homunculus.exp < hd->exp_next))
-		return 0 ;
+		return 0;
 
 	hom = &hd->homunculus;
 	hom->level++ ;
@@ -371,7 +374,7 @@ int hom_mutate(struct homun_data *hd, int homun_id)
 	m_class = hom_class2mapid(hd->homunculus.class_);
 	m_id    = hom_class2mapid(homun_id);
 	
-	if( !(m_class&HOM_EVO) || !(m_id&HOM_S) ) {
+	if( m_class == -1 || m_id == -1 || !(m_class&HOM_EVO) || !(m_id&HOM_S) ) {
 		clif_emotion(&hd->bl, E_SWT);
 		return 0;
 	}
@@ -411,7 +414,10 @@ int merc_hom_gainexp(struct homun_data *hd,int exp)
 	if(hd->homunculus.vaporize)
 		return 1;
 
-	m_class = hom_class2mapid(hd->homunculus.class_);
+	if((m_class = hom_class2mapid(hd->homunculus.class_)) == -1) {
+		ShowError("merc_hom_gainexp: Invalid class %d. \n", hd->homunculus.class_);
+		return 0;
+	}
 	
 	if( hd->exp_next == 0 || 
 	   ((m_class&HOM_REG) && hd->homunculus.level >= battle_config.hom_max_level) ||

+ 1 - 1
src/map/script.c

@@ -9593,7 +9593,7 @@ BUILDIN_FUNC(homunculus_mutate)
 		m_class = hom_class2mapid(sd->hd->homunculus.class_);
 		m_id    = hom_class2mapid(homun_id);
 		
-		if ( m_class&HOM_EVO && m_id&HOM_S && sd->hd->homunculus.level >= 99 )
+		if ( m_class != -1 && m_id != -1 && m_class&HOM_EVO && m_id&HOM_S && sd->hd->homunculus.level >= 99 )
 			hom_mutate(sd->hd, homun_id);
 		else
 			clif_emotion(&sd->hd->bl, E_SWT);