浏览代码

* Fixed #694, Skill cooldown bonus overflow in `short` variable. Thank @julia40124009
* Fixed #691, Glass_Of_Illusion (14538) gave wrong value. Thank @admkakaroto

Signed-off-by: Cydh Ramdh <cydh@pservero.com>

Cydh Ramdh 9 年之前
父节点
当前提交
573c7dc3c5
共有 2 个文件被更改,包括 9 次插入5 次删除
  1. 6 2
      src/map/pc.h
  2. 3 3
      src/map/status.c

+ 6 - 2
src/map/pc.h

@@ -371,8 +371,12 @@ struct map_session_data {
 		unsigned short id;
 		short val;
 	} skillatk[MAX_PC_BONUS], skillusesprate[MAX_PC_BONUS], skillusesp[MAX_PC_BONUS], skillheal[MAX_PC_BONUS],
-		skillheal2[MAX_PC_BONUS], skillblown[MAX_PC_BONUS], skillcastrate[MAX_PC_BONUS], skillcooldown[MAX_PC_BONUS],
-		skillfixcast[MAX_PC_BONUS], skillvarcast[MAX_PC_BONUS], skillfixcastrate[MAX_PC_BONUS], subskill[MAX_PC_BONUS];
+		skillheal2[MAX_PC_BONUS], skillblown[MAX_PC_BONUS], skillcastrate[MAX_PC_BONUS],
+		skillfixcastrate[MAX_PC_BONUS], subskill[MAX_PC_BONUS];
+	struct s_skill_bonus_i32 {
+		uint16 id;
+		int32 val;
+	} skillcooldown[MAX_PC_BONUS], skillfixcast[MAX_PC_BONUS], skillvarcast[MAX_PC_BONUS];
 	struct s_regen {
 		short value;
 		int rate;

+ 3 - 3
src/map/status.c

@@ -3096,11 +3096,11 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt)
 		+ sizeof(sd->skillheal2)
 		+ sizeof(sd->skillblown)
 		+ sizeof(sd->skillcastrate)
+		+ sizeof(sd->skillfixcastrate)
+		+ sizeof(sd->subskill)
 		+ sizeof(sd->skillcooldown)
 		+ sizeof(sd->skillfixcast)
 		+ sizeof(sd->skillvarcast)
-		+ sizeof(sd->skillfixcastrate)
-		+ sizeof(sd->subskill)
 		+ sizeof(sd->hp_loss)
 		+ sizeof(sd->sp_loss)
 		+ sizeof(sd->hp_regen)
@@ -5818,7 +5818,7 @@ static signed short status_calc_flee2(struct block_list *bl, struct status_chang
 		return cap_value(flee2,10,SHRT_MAX);
 
 	if(sc->data[SC_INCFLEE2])
-		flee2 += sc->data[SC_INCFLEE2]->val1;
+		flee2 += sc->data[SC_INCFLEE2]->val2;
 	if(sc->data[SC_WHISTLE])
 		flee2 += sc->data[SC_WHISTLE]->val3*10;
 	if(sc->data[SC__UNLUCKY])