ソースを参照

Follow up 2a04748b, a little clean up by respecting party_foreachsamemap.

Signed-off-by: Cydh Ramdh <cydh@pservero.com>
Cydh Ramdh 10 年 前
コミット
111eb0c1c1
1 ファイル変更12 行追加31 行削除
  1. 12 31
      src/map/skill.c

+ 12 - 31
src/map/skill.c

@@ -5668,37 +5668,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
 				return skill_castend_damage_id (src, bl, skill_id, skill_lv, tick, flag);
 			}
 			break;
-		case SO_ELEMENTAL_SHIELD: {
-				struct party_data *p;
-				short ret = 0;
-				int x0, y0, x1, y1, range;
-
-				if(sd == NULL || !sd->ed)
-					break;
-				range = skill_get_splash(skill_id,skill_lv);
-				x0 = sd->bl.x - range;
-				y0 = sd->bl.y - range;
-				x1 = sd->bl.x + range;
-				y1 = sd->bl.y + range;
-				clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
-				elemental_delete(sd->ed,0);
-				skill_unitsetting(src,MG_SAFETYWALL,skill_lv + 5,src->x,src->y,0);
-				skill_unitsetting(src,AL_PNEUMA,1,src->x,src->y,0);
-				if((p = party_search(sd->status.party_id))) {
-					for(i = 0; i < MAX_PARTY; i++) {
-						struct map_session_data *psd = p->data[i].sd;
-
-						if(!psd || psd->bl.m != sd->bl.m || !psd->bl.prev || psd->bl.id == sd->bl.id)
-							continue;
-						if(range && (psd->bl.x < x0 || psd->bl.y < y0 || psd->bl.x > x1 || psd->bl.y > y1))
-							continue;
-						skill_unitsetting(&psd->bl,MG_SAFETYWALL,skill_lv + 5,psd->bl.x,psd->bl.y,0);
-						skill_unitsetting(&psd->bl,AL_PNEUMA,1,psd->bl.x,psd->bl.y,0);
-					}
-				}
-				return 0;
-			}
-			break;
 		case NPC_SMOKING: //Since it is a self skill, this one ends here rather than in damage_id. [Skotlex]
 			return skill_castend_damage_id (src, bl, skill_id, skill_lv, tick, flag);
 		case MH_STEINWAND: {
@@ -10386,6 +10355,18 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
 		}
 		break;
 
+	case SO_ELEMENTAL_SHIELD:
+		if (flag&1) {
+			skill_unitsetting(bl, MG_SAFETYWALL, skill_lv + 5, bl->x, bl->y, 0);
+			skill_unitsetting(bl, AL_PNEUMA, 1, bl->x, bl->y, 0);
+		}
+		else {
+			clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
+			elemental_delete(sd->ed,0);
+			party_foreachsamemap(skill_area_sub, sd, skill_get_splash(skill_id,skill_lv), src, skill_id, skill_lv, tick, flag|BCT_PARTY|1, skill_castend_nodamage_id);
+		}
+		break;
+
 	default:
 		ShowWarning("skill_castend_nodamage_id: Unknown skill used:%d\n",skill_id);
 		clif_skill_nodamage(src,bl,skill_id,skill_lv,1);