Browse Source

Follow up to c1871e9
* Fixed experience calculation line that was removed by accident.
* Removed some leftovers changes from tests.
Bug Fix
* Fixed Frigg's Song not giving max HP rate bonus.

aleos89 11 years ago
parent
commit
3181ff6af1
3 changed files with 13 additions and 10 deletions
  1. 9 6
      src/map/mob.c
  2. 2 2
      src/map/skill.c
  3. 2 2
      src/map/status.c

+ 9 - 6
src/map/mob.c

@@ -1152,17 +1152,18 @@ static int mob_ai_sub_hard_lootsearch(struct block_list *bl,va_list ap)
 	struct block_list **target;
 	struct block_list **target;
 	int dist;
 	int dist;
 
 
-	md=va_arg(ap,struct mob_data *);
-	target= va_arg(ap,struct block_list**);
+	md = va_arg(ap,struct mob_data *);
+	target = va_arg(ap,struct block_list**);
 
 
-	dist=distance_bl(&md->bl, bl);
+	dist = distance_bl(&md->bl, bl);
 	if(mob_can_reach(md,bl,dist+1, MSS_LOOT) &&
 	if(mob_can_reach(md,bl,dist+1, MSS_LOOT) &&
 		((*target) == NULL || !check_distance_bl(&md->bl, *target, dist)) //New target closer than previous one.
 		((*target) == NULL || !check_distance_bl(&md->bl, *target, dist)) //New target closer than previous one.
 	) {
 	) {
 		(*target) = bl;
 		(*target) = bl;
-		md->target_id=bl->id;
-		md->min_chase=md->db->range3;
-	}
+		md->target_id = bl->id;
+		md->min_chase = md->db->range3;
+	} else
+		mob_stop_walking(md, 1); // Stop walking immediately if item is no longer on the ground.
 	return 0;
 	return 0;
 }
 }
 
 
@@ -2246,6 +2247,8 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
 
 
 			if (map[m].flag.nobaseexp || !md->db->base_exp)
 			if (map[m].flag.nobaseexp || !md->db->base_exp)
 				base_exp = 0;
 				base_exp = 0;
+			else
+				base_exp = (unsigned int)cap_value(md->db->base_exp * per * bonus/100. * map[m].adjust.bexp/100., 1, UINT_MAX);
 
 
 			if (map[m].flag.nojobexp || !md->db->job_exp || md->dmglog[i].flag == MDLF_HOMUN) //Homun earned job-exp is always lost.
 			if (map[m].flag.nojobexp || !md->db->job_exp || md->dmglog[i].flag == MDLF_HOMUN) //Homun earned job-exp is always lost.
 				job_exp = 0;
 				job_exp = 0;

+ 2 - 2
src/map/skill.c

@@ -19221,9 +19221,9 @@ static void skill_readdb(void) {
 		int n2 = strlen(db_path)+strlen(DBPATH)+strlen(dbsubpath[i])+1;
 		int n2 = strlen(db_path)+strlen(DBPATH)+strlen(dbsubpath[i])+1;
 		char* dbsubpath1 = aMalloc(n1+1);
 		char* dbsubpath1 = aMalloc(n1+1);
 		char* dbsubpath2 = aMalloc(n2+1);
 		char* dbsubpath2 = aMalloc(n2+1);
-		safesnprintf(dbsubpath1,n1+1,"%s/%s",db_path,dbsubpath[i]);
+		safesnprintf(dbsubpath1,n1+1,"%s%s",db_path,dbsubpath[i]);
 		if(i==0) safesnprintf(dbsubpath2,n2,"%s/%s%s",db_path,DBPATH,dbsubpath[i]);
 		if(i==0) safesnprintf(dbsubpath2,n2,"%s/%s%s",db_path,DBPATH,dbsubpath[i]);
-		else safesnprintf(dbsubpath2,n2,"%s/%s",db_path,dbsubpath[i]);
+		else safesnprintf(dbsubpath2,n2,"%s%s",db_path,dbsubpath[i]);
 		
 		
 		sv_readdb(dbsubpath2, "skill_db.txt"          , ',',  18, 18, MAX_SKILL_DB, skill_parse_row_skilldb, i);
 		sv_readdb(dbsubpath2, "skill_db.txt"          , ',',  18, 18, MAX_SKILL_DB, skill_parse_row_skilldb, i);
 		sv_readdb(dbsubpath2, "skill_require_db.txt"  , ',',  34, 34, MAX_SKILL_DB, skill_parse_row_requiredb, i);
 		sv_readdb(dbsubpath2, "skill_require_db.txt"  , ',',  34, 34, MAX_SKILL_DB, skill_parse_row_requiredb, i);

+ 2 - 2
src/map/status.c

@@ -2500,8 +2500,6 @@ static int status_get_hpbonus(struct block_list *bl, enum e_status_bonus type) {
 				bonus += sc->data[SC_LERADSDEW]->val3;
 				bonus += sc->data[SC_LERADSDEW]->val3;
 			if(sc->data[SC_INSPIRATION])
 			if(sc->data[SC_INSPIRATION])
 				bonus += (600 * sc->data[SC_INSPIRATION]->val1);
 				bonus += (600 * sc->data[SC_INSPIRATION]->val1);
-			if(sc->data[SC_FRIGG_SONG])
-				bonus += sc->data[SC_FRIGG_SONG]->val2;
 			if(sc->data[SC_SOLID_SKIN_OPTION])
 			if(sc->data[SC_SOLID_SKIN_OPTION])
 				bonus += 2000;
 				bonus += 2000;
 			if(sc->data[SC_MARIONETTE])
 			if(sc->data[SC_MARIONETTE])
@@ -2537,6 +2535,8 @@ static int status_get_hpbonus(struct block_list *bl, enum e_status_bonus type) {
 				bonus += sc->data[SC_MERC_HPUP]->val2;
 				bonus += sc->data[SC_MERC_HPUP]->val2;
 			if(sc->data[SC_EPICLESIS])
 			if(sc->data[SC_EPICLESIS])
 				bonus += sc->data[SC_EPICLESIS]->val2;
 				bonus += sc->data[SC_EPICLESIS]->val2;
+			if(sc->data[SC_FRIGG_SONG])
+				bonus += sc->data[SC_FRIGG_SONG]->val2;
 			if(sc->data[SC_FORCEOFVANGUARD])
 			if(sc->data[SC_FORCEOFVANGUARD])
 				bonus += (3 * sc->data[SC_FORCEOFVANGUARD]->val1);
 				bonus += (3 * sc->data[SC_FORCEOFVANGUARD]->val1);
 			if(sc->data[SC_INSPIRATION])
 			if(sc->data[SC_INSPIRATION])