Browse Source

> Follow up to r16973.
* Fixed homunculus never getting experience when owner is in a party.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@17135 54d463be-8e91-2dee-dedb-b68131a5f0ec

aleos 12 năm trước cách đây
mục cha
commit
cd382be6ab
1 tập tin đã thay đổi với 31 bổ sung33 xóa
  1. 31 33
      src/map/mob.c

+ 31 - 33
src/map/mob.c

@@ -2147,8 +2147,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
 		if( md->dmglog[i].flag == MDLF_PET && (!tsd->status.pet_id || !tsd->pd) )
 			continue; // skip pet's share if inactive
 
-		if(md->dmglog[i].dmg > mvp_damage)
-		{
+		if(md->dmglog[i].dmg > mvp_damage) {
 			third_sd = second_sd;
 			second_sd = mvp_sd;
 			mvp_sd = tsd;
@@ -2157,8 +2156,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
 
 		tmpsd[i] = tsd; // record as valid damage-log entry
 
-		switch( md->dmglog[i].flag )
-		{
+		switch( md->dmglog[i].flag ) {
 			case MDLF_NORMAL: dmgbltypes|= BL_PC;  break;
 			case MDLF_HOMUN:  dmgbltypes|= BL_HOM; break;
 			case MDLF_PET:    dmgbltypes|= BL_PET; break;
@@ -2200,8 +2198,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
 		if(battle_config.mobs_level_up && md->level > md->db->lv) // [Valaris]
 			bonus += (md->level-md->db->lv)*battle_config.mobs_level_up_exp_rate;
 
-	for(i = 0; i < DAMAGELOG_SIZE && md->dmglog[i].id; i++)
-	{
+	for(i = 0; i < DAMAGELOG_SIZE && md->dmglog[i].id; i++) {
 		int flag=1,zeny=0;
 		unsigned int base_exp, job_exp;
 		double per; //Your share of the mob's exp
@@ -2225,12 +2222,15 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
 		}
 
 		// change experience for different sized monsters [Valaris]
-		if (battle_config.mob_size_influence)
-		{
-			if (md->special_state.size == SZ_MEDIUM)
-				per /= 2.;
-			else if (md->special_state.size == SZ_BIG)
-				per *= 2.;
+		if (battle_config.mob_size_influence) {
+			switch( md->special_state.size ) {
+				case SZ_MEDIUM:
+					per /= 2.;
+					break;
+				case SZ_BIG:
+					per *= 2.;
+					break;
+			}
 		}
 
 		if( md->dmglog[i].flag == MDLF_PET )
@@ -2253,40 +2253,38 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
 		else
 			job_exp = (unsigned int)cap_value(md->db->job_exp * per * bonus/100. * map[m].jexp/100., 1, UINT_MAX);
 
-		if ((temp = tmpsd[i]->status.party_id)>0 /*&& !md->dmglog[i].flag == MDLF_HOMUN*/) //Homun-done damage (flag 1) is given to party
-		{
+		if ( ( temp = tmpsd[i]->status.party_id)>0 ) {
 			int j;
-			for(j=0;j<pnum && pt[j].id!=temp;j++); //Locate party.
+			for( j = 0; j < pnum && pt[j].id != temp; j++ ); //Locate party.
 
-			if(j==pnum){ //Possibly add party.
+			if( j == pnum ) { //Possibly add party.
 				pt[pnum].p = party_search(temp);
-				if(pt[pnum].p && pt[pnum].p->party.exp)
-				{
-					pt[pnum].id=temp;
-					pt[pnum].base_exp=base_exp;
-					pt[pnum].job_exp=job_exp;
-					pt[pnum].zeny=zeny; // zeny share [Valaris]
+				if(pt[pnum].p && pt[pnum].p->party.exp) {
+					pt[pnum].id = temp;
+					pt[pnum].base_exp = base_exp;
+					pt[pnum].job_exp = job_exp;
+					pt[pnum].zeny = zeny; // zeny share [Valaris]
 					pnum++;
-					flag=0;
+					flag = 0;
 				}
-			}else{	//Add to total
+			} else {	//Add to total
 				if (pt[j].base_exp > UINT_MAX - base_exp)
-					pt[j].base_exp=UINT_MAX;
+					pt[j].base_exp = UINT_MAX;
 				else
-					pt[j].base_exp+=base_exp;
+					pt[j].base_exp += base_exp;
 
 				if (pt[j].job_exp > UINT_MAX - job_exp)
-					pt[j].job_exp=UINT_MAX;
+					pt[j].job_exp = UINT_MAX;
 				else
-					pt[j].job_exp+=job_exp;
+					pt[j].job_exp += job_exp;
 
-				pt[j].zeny+=zeny;  // zeny share [Valaris]
-				flag=0;
+				pt[j].zeny += zeny;  // zeny share [Valaris]
+				flag = 0;
 			}
 		}
+		if(base_exp && md->dmglog[i].flag == MDLF_HOMUN) //tmpsd[i] is null if it has no homunc.
+			merc_hom_gainexp(tmpsd[i]->hd, base_exp);
 		if(flag) {
-			if(base_exp && md->dmglog[i].flag == MDLF_HOMUN) //tmpsd[i] is null if it has no homunc.
-				merc_hom_gainexp(tmpsd[i]->hd, base_exp);
 			if(base_exp || job_exp)
 			{
 				if( md->dmglog[i].flag != MDLF_PET || battle_config.pet_attack_exp_to_master ) {
@@ -2303,7 +2301,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
 		}
 	}
 
-	for(i=0;i<pnum;i++) //Party share.
+	for( i = 0; i < pnum; i++ ) //Party share.
 		party_exp_share(pt[i].p, &md->bl, pt[i].base_exp,pt[i].job_exp,pt[i].zeny);
 
 	} //End EXP giving.