Browse Source

Follow up 20c6149b60664561eed9ea6f2f7551c91a904d89
* Fixed #390, party skill didn't work on self
* Removed BCT_ALLWOS, added BCT_WOS for checking 'without self' skill target

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

Cydh Ramdh 10 years ago
parent
commit
994aba683b
2 changed files with 4 additions and 4 deletions
  1. 1 1
      src/map/battle.h
  2. 3 3
      src/map/skill.c

+ 1 - 1
src/map/battle.h

@@ -47,7 +47,7 @@ enum e_battle_check_target {
 
 	BCT_ALL			= 0x3F0000, ///< All targets
 
-	BCT_ALLWOS		= BCT_ALL&~BCT_SELF,			///< All, except self (currently used for skipping if src == bl in skill_area_sub)
+	BCT_WOS			= 0x400000, ///< Except self (currently used for skipping if src == bl in skill_area_sub)
 	BCT_GUILD		= BCT_SAMEGUILD|BCT_GUILDALLY,	///< Guild AND Allies (BCT_SAMEGUILD|BCT_GUILDALLY)
 	BCT_NOGUILD		= BCT_ALL&~BCT_GUILD,			///< Except guildmates
 	BCT_NOPARTY		= BCT_ALL&~BCT_PARTY,			///< Except party members

+ 3 - 3
src/map/skill.c

@@ -3382,7 +3382,7 @@ int skill_area_sub(struct block_list *bl, va_list ap)
 	flag = va_arg(ap,int);
 	func = va_arg(ap,SkillFunc);
 
-	if (src == bl && !(flag&BCT_SELF))
+	if (flag&BCT_WOS && src == bl)
 		return 0;
 
 	if(battle_check_target(src,bl,flag) > 0) {
@@ -9586,7 +9586,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
 			// Success chance: (Skill Level x 6) + (Voice Lesson Skill Level x 2) + (Caster’s Job Level / 2) %
 			skill_area_temp[5] = skill_lv * 6 + ((sd) ? pc_checkskill(sd, WM_LESSON) : skill_get_max(WM_LESSON)) * 2 + (sd ? sd->status.job_level : 50) / 2;
 			skill_area_temp[6] = skill_get_time(skill_id,skill_lv);
-			map_foreachinrange(skill_area_sub, src, skill_get_splash(skill_id,skill_lv), BL_CHAR|BL_SKILL, src, skill_id, skill_lv, tick, flag|BCT_ALLWOS|1, skill_castend_nodamage_id);
+			map_foreachinrange(skill_area_sub, src, skill_get_splash(skill_id,skill_lv), BL_CHAR|BL_SKILL, src, skill_id, skill_lv, tick, flag|BCT_ALL|BCT_WOS|1, skill_castend_nodamage_id);
 			clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
 		}
 		break;
@@ -9817,7 +9817,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
 			skill_area_temp[5] = (4 * skill_lv * 1000) + ((sd) ? pc_checkskill(sd,WM_LESSON) : skill_get_max(WM_LESSON)) * 2000 + (status_get_lv(src) * 1000 / 15) + (sd ? sd->status.job_level * 200 : 0);
 			skill_area_temp[6] = skill_get_time(skill_id,skill_lv);
 			clif_skill_nodamage(src, bl, skill_id, skill_lv, 1);
-			map_foreachinrange(skill_area_sub, bl, skill_get_splash(skill_id, skill_lv), BL_CHAR, src, skill_id, skill_lv, tick, flag|BCT_ALLWOS|1, skill_castend_nodamage_id);
+			map_foreachinrange(skill_area_sub, bl, skill_get_splash(skill_id, skill_lv), BL_CHAR, src, skill_id, skill_lv, tick, flag|BCT_ALL|BCT_WOS|1, skill_castend_nodamage_id);
 		}
 		break;