Explorar o código

Corrected a potential crash with Joint Beat (#4251)

* Follow up to cb2c553.
Thanks to @teededung and @cahya1992!
Aleos %!s(int64=5) %!d(string=hai) anos
pai
achega
6d199ca7d2
Modificáronse 2 ficheiros con 3 adicións e 3 borrados
  1. 1 1
      src/map/battle.cpp
  2. 2 2
      src/map/skill.cpp

+ 1 - 1
src/map/battle.cpp

@@ -3635,7 +3635,7 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
 			break;
 		case LK_JOINTBEAT:
 			skillratio += -100 + 10 * skill_lv - 50;
-			if (wd->miscflag & BREAK_NECK || (tsc && tsc->data[status_skill2sc(skill_id)]->val2 & BREAK_NECK)) // The 2x damage is only for the BREAK_NECK ailment.
+			if (wd->miscflag & BREAK_NECK || (tsc && tsc->data[SC_JOINTBEAT] && tsc->data[SC_JOINTBEAT]->val2 & BREAK_NECK)) // The 2x damage is only for the BREAK_NECK ailment.
 				skillratio <<= 1;
 			break;
 #ifdef RENEWAL

+ 2 - 2
src/map/skill.cpp

@@ -4773,10 +4773,10 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
 
 	case LK_JOINTBEAT:
 		flag = 1 << rnd() % 6;
-		if (flag != BREAK_NECK && tsc && tsc->data[status_skill2sc(skill_id)]->val2 & BREAK_NECK)
+		if (flag != BREAK_NECK && tsc && tsc->data[SC_JOINTBEAT]->val2 & BREAK_NECK)
 			flag = BREAK_NECK; // Target should always receive double damage if neck is already broken
 		if (skill_attack(BF_WEAPON, src, src, bl, skill_id, skill_lv, tick, flag))
-			sc_start4(src, bl, status_skill2sc(skill_id), 50 + (skill_lv + 1), skill_lv, flag&BREAK_FLAGS, src->id, 0, skill_get_time2(skill_id, skill_lv));
+			sc_start4(src, bl, SC_JOINTBEAT, 50 + (skill_lv + 1), skill_lv, flag&BREAK_FLAGS, src->id, 0, skill_get_time2(skill_id, skill_lv));
 		break;
 
 	case MO_COMBOFINISH: