Browse Source

Fixed SG_DEVIL not giving blind anymore

Additionally fixed setting BaseExp and JobExp variables by script to not go over the new maximum.
Lemongrass3110 9 năm trước cách đây
mục cha
commit
fef0d3d175
3 tập tin đã thay đổi với 13 bổ sung7 xóa
  1. 1 1
      src/map/clif.c
  2. 10 4
      src/map/pc.c
  3. 2 2
      src/map/status.c

+ 1 - 1
src/map/clif.c

@@ -10320,7 +10320,7 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd)
 	if(!sd->state.autotrade && map[sd->bl.m].flag.loadevent) // Lance
 		npc_script_event(sd, NPCE_LOADMAP);
 
-	if (pc_checkskill(sd, SG_DEVIL) && !pc_nextjobexp(sd))
+	if (pc_checkskill(sd, SG_DEVIL) && pc_is_maxjoblv(sd))
 		clif_status_load(&sd->bl, SI_DEVIL, 1);  //blindness [Komurka]
 
 	if (sd->sc.opt2) //Client loses these on warp.

+ 10 - 4
src/map/pc.c

@@ -6345,7 +6345,7 @@ int pc_checkjoblevelup(struct map_session_data *sd)
 	clif_updatestatus(sd,SP_SKILLPOINT);
 	status_calc_pc(sd,SCO_FORCE);
 	clif_misceffect(&sd->bl,1);
-	if (pc_checkskill(sd, SG_DEVIL) && !pc_nextjobexp(sd))
+	if (pc_checkskill(sd, SG_DEVIL) && pc_is_maxbaselv(sd))
 		clif_status_change(&sd->bl,SI_DEVIL, 1, 0, 0, 0, 1); //Permanent blind effect from SG_DEVIL.
 
 	npc_script_event(sd, NPCE_JOBLVUP);
@@ -7079,7 +7079,7 @@ int pc_resetskill(struct map_session_data* sd, int flag)
 		if( pc_is_taekwon_ranker(sd) )
 			return 0;
 
-		if( pc_checkskill(sd, SG_DEVIL) &&  !pc_nextjobexp(sd) )
+		if( pc_checkskill(sd, SG_DEVIL) && pc_is_maxjoblv(sd) )
 			clif_status_load(&sd->bl, SI_DEVIL, 0); //Remove perma blindness due to skill-reset. [Skotlex]
 		i = sd->sc.option;
 		if( i&OPTION_RIDING && pc_checkskill(sd, KN_RIDING) )
@@ -7924,14 +7924,20 @@ bool pc_setparam(struct map_session_data *sd,int type,int val)
 		break;
 	case SP_BASEEXP:
 		if(pc_nextbaseexp(sd) > 0) {
-			sd->status.base_exp = val;
+			if( pc_is_maxbaselv(sd) )
+				sd->status.base_exp = u32min(val,MAX_LEVEL_BASE_EXP);
+			else
+				sd->status.base_exp = val;
 			if (!pc_checkbaselevelup(sd))
 				clif_updatestatus(sd, SP_BASEEXP);
 		}
 		break;
 	case SP_JOBEXP:
 		if(pc_nextjobexp(sd) > 0) {
-			sd->status.job_exp = val;
+			if( pc_is_maxjoblv(sd) )
+				sd->status.job_exp = u32min(val,MAX_LEVEL_JOB_EXP);
+			else
+				sd->status.job_exp = val;
 			if (!pc_checkjoblevelup(sd))
 				clif_updatestatus(sd, SP_JOBEXP);
 		}

+ 2 - 2
src/map/status.c

@@ -3611,7 +3611,7 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt)
 #ifndef RENEWAL_ASPD
 	if((skill=pc_checkskill(sd,SA_ADVANCEDBOOK))>0 && sd->status.weapon == W_BOOK)
 		base_status->aspd_rate -= 5*skill;
-	if((skill = pc_checkskill(sd,SG_DEVIL)) > 0 && !pc_nextjobexp(sd))
+	if((skill = pc_checkskill(sd,SG_DEVIL)) > 0 && pc_is_maxjoblv(sd))
 		base_status->aspd_rate -= 30*skill;
 	if((skill=pc_checkskill(sd,GS_SINGLEACTION))>0 &&
 		(sd->status.weapon >= W_REVOLVER && sd->status.weapon <= W_GRENADE))
@@ -3623,7 +3623,7 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt)
 #else // Needs more info
 	if((skill=pc_checkskill(sd,SA_ADVANCEDBOOK))>0 && sd->status.weapon == W_BOOK)
 		base_status->aspd_rate += 5*skill;
-	if((skill = pc_checkskill(sd,SG_DEVIL)) > 0 && !pc_nextjobexp(sd))
+	if((skill = pc_checkskill(sd,SG_DEVIL)) > 0 && pc_is_maxjoblv(sd))
 		base_status->aspd_rate += 30*skill;
 	if((skill=pc_checkskill(sd,GS_SINGLEACTION))>0 &&
 		(sd->status.weapon >= W_REVOLVER && sd->status.weapon <= W_GRENADE))