瀏覽代碼

Fixed #667, Arms Cannon didn't give splash damage after d95f5d2db75c10435421fe396dc86e7be9654be5. Thank @Fraterna

Signed-off-by: Cydh Ramdh <cydh@pservero.com>
Cydh Ramdh 9 年之前
父節點
當前提交
34c19edf77
共有 1 個文件被更改,包括 19 次插入14 次删除
  1. 19 14
      src/map/skill.c

+ 19 - 14
src/map/skill.c

@@ -4319,8 +4319,8 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
 	case NC_BOOSTKNUCKLE:
 	case NC_PILEBUNKER:
 	case NC_COLDSLOWER:
-	case NC_ARMSCANNON:
-		if (sd) pc_overheat(sd, 1);
+		if (sd)
+			pc_overheat(sd, 1);
 	case MO_TRIPLEATTACK:
 	case RK_WINDCUTTER:
 		skill_attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag|SD_ANIMATION);
@@ -4550,6 +4550,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
 	case RL_S_STORM:
 	case RL_R_TRIP:
 	case MH_XENO_SLASHER:
+	case NC_ARMSCANNON:
 		if( flag&1 ) {//Recursive invocation
 			int sflag = skill_area_temp[0] & 0xFFF;
 			int heal = 0;
@@ -4564,6 +4565,12 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
 				status_heal(src,heal,0,0);
 			}
 		} else {
+			int starget = splash_target(src);
+
+			skill_area_temp[0] = 0;
+			skill_area_temp[1] = bl->id;
+			skill_area_temp[2] = 0;
+
 			switch ( skill_id ) {
 				case NJ_BAKUENRYU:
 				case LG_EARTHDRIVE:
@@ -4580,21 +4587,19 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
 				case WM_REVERBERATION_MELEE:
 				case WM_REVERBERATION_MAGIC:
 					skill_area_temp[1] = 0;
+					starget = BL_CHAR;
 					break;
-				default:
+				case WL_CRIMSONROCK:
+					skill_area_temp[4] = bl->x;
+					skill_area_temp[5] = bl->y;
+					break;
+				case NC_VULCANARM:
+				case NC_ARMSCANNON:
+					if (sd)
+						pc_overheat(sd, 1);
 					break;
 			}
 
-			skill_area_temp[0] = 0;
-			skill_area_temp[1] = bl->id;
-			skill_area_temp[2] = 0;
-			if( skill_id == WL_CRIMSONROCK ) {
-				skill_area_temp[4] = bl->x;
-				skill_area_temp[5] = bl->y;
-			}
-			if( skill_id == NC_VULCANARM )
-				if (sd) pc_overheat(sd,1);
-
 			// if skill damage should be split among targets, count them
 			//SD_LEVEL -> Forced splash damage for Auto Blitz-Beat -> count targets
 			//special case: Venom Splasher uses a different range for searching than for splashing
@@ -4602,7 +4607,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
 				skill_area_temp[0] = map_foreachinrange(skill_area_sub, bl, (skill_id == AS_SPLASHER)?1:skill_get_splash(skill_id, skill_lv), BL_CHAR, src, skill_id, skill_lv, tick, BCT_ENEMY, skill_area_sub_count);
 
 			// recursive invocation of skill_castend_damage_id() with flag|1
-			map_foreachinrange(skill_area_sub, bl, skill_get_splash(skill_id, skill_lv), (skill_id == WM_REVERBERATION_MELEE || skill_id == WM_REVERBERATION_MAGIC) ? BL_CHAR : splash_target(src), src, skill_id, skill_lv, tick, flag|BCT_ENEMY|SD_SPLASH|1, skill_castend_damage_id);
+			map_foreachinrange(skill_area_sub, bl, skill_get_splash(skill_id, skill_lv), starget, src, skill_id, skill_lv, tick, flag|BCT_ENEMY|SD_SPLASH|1, skill_castend_damage_id);
 			if( skill_id == AS_SPLASHER ) {
 				map_freeblock_unlock(); // Don't consume a second gemstone.
 				return 0;