|
@@ -2887,16 +2887,16 @@ void skill_attack_blow(struct block_list *src, struct block_list *dsrc, struct b
|
|
if(!battle_config.stormgust_knockback)
|
|
if(!battle_config.stormgust_knockback)
|
|
dir = rnd()%8;
|
|
dir = rnd()%8;
|
|
break;
|
|
break;
|
|
- case WL_CRIMSONROCK:
|
|
|
|
- dir = map_calc_dir(target,skill_area_temp[4],skill_area_temp[5]);
|
|
|
|
- break;
|
|
|
|
case MC_CARTREVOLUTION:
|
|
case MC_CARTREVOLUTION:
|
|
if (battle_config.cart_revo_knockback)
|
|
if (battle_config.cart_revo_knockback)
|
|
dir = 6; // Official servers push target to the West
|
|
dir = 6; // Official servers push target to the West
|
|
break;
|
|
break;
|
|
case AC_SHOWER:
|
|
case AC_SHOWER:
|
|
- if (!battle_config.arrow_shower_knockback)
|
|
|
|
|
|
+ case WL_CRIMSONROCK:
|
|
|
|
+ if (!battle_config.arrow_shower_knockback && skill_id == AC_SHOWER)
|
|
dir = map_calc_dir(target, src->x, src->y);
|
|
dir = map_calc_dir(target, src->x, src->y);
|
|
|
|
+ else
|
|
|
|
+ dir = map_calc_dir(target, skill_area_temp[4], skill_area_temp[5]);
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -4427,7 +4427,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
|
case MO_COMBOFINISH:
|
|
case MO_COMBOFINISH:
|
|
if (!(flag&1) && sc && sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_MONK)
|
|
if (!(flag&1) && sc && sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_MONK)
|
|
{ //Becomes a splash attack when Soul Linked.
|
|
{ //Becomes a splash attack when Soul Linked.
|
|
- map_foreachinrange(skill_area_sub, bl,
|
|
|
|
|
|
+ map_foreachinshootrange(skill_area_sub, bl,
|
|
skill_get_splash(skill_id, skill_lv),splash_target(src),
|
|
skill_get_splash(skill_id, skill_lv),splash_target(src),
|
|
src,skill_id,skill_lv,tick, flag|BCT_ENEMY|1,
|
|
src,skill_id,skill_lv,tick, flag|BCT_ENEMY|1,
|
|
skill_castend_damage_id);
|
|
skill_castend_damage_id);
|
|
@@ -4438,7 +4438,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
|
case TK_STORMKICK: // Taekwon kicks [Dralnu]
|
|
case TK_STORMKICK: // Taekwon kicks [Dralnu]
|
|
clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
|
|
clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
|
|
skill_area_temp[1] = 0;
|
|
skill_area_temp[1] = 0;
|
|
- map_foreachinrange(skill_attack_area, src,
|
|
|
|
|
|
+ map_foreachinshootrange(skill_attack_area, src,
|
|
skill_get_splash(skill_id, skill_lv), splash_target(src),
|
|
skill_get_splash(skill_id, skill_lv), splash_target(src),
|
|
BF_WEAPON, src, src, skill_id, skill_lv, tick, flag, BCT_ENEMY);
|
|
BF_WEAPON, src, src, skill_id, skill_lv, tick, flag, BCT_ENEMY);
|
|
break;
|
|
break;
|
|
@@ -4708,7 +4708,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);
|
|
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
|
|
// recursive invocation of skill_castend_damage_id() with flag|1
|
|
- if (battle_config.skill_wall_check && skill_id == RA_ARROWSTORM)
|
|
|
|
|
|
+ if (battle_config.skill_wall_check && skill_id != NPC_EARTHQUAKE)
|
|
map_foreachinshootrange(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);
|
|
map_foreachinshootrange(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);
|
|
else
|
|
else
|
|
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);
|
|
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);
|
|
@@ -6293,7 +6293,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|
case SM_MAGNUM:
|
|
case SM_MAGNUM:
|
|
case MS_MAGNUM:
|
|
case MS_MAGNUM:
|
|
skill_area_temp[1] = 0;
|
|
skill_area_temp[1] = 0;
|
|
- map_foreachinrange(skill_area_sub, src, skill_get_splash(skill_id, skill_lv), BL_SKILL|BL_CHAR,
|
|
|
|
|
|
+ map_foreachinshootrange(skill_area_sub, src, skill_get_splash(skill_id, skill_lv), BL_SKILL|BL_CHAR,
|
|
src,skill_id,skill_lv,tick, flag|BCT_ENEMY|1, skill_castend_damage_id);
|
|
src,skill_id,skill_lv,tick, flag|BCT_ENEMY|1, skill_castend_damage_id);
|
|
clif_skill_nodamage (src,src,skill_id,skill_lv,1);
|
|
clif_skill_nodamage (src,src,skill_id,skill_lv,1);
|
|
// Initiate 20% of your damage becomes fire element.
|
|
// Initiate 20% of your damage becomes fire element.
|
|
@@ -6804,7 +6804,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|
//Passive side of the attack.
|
|
//Passive side of the attack.
|
|
status_change_end(src, SC_SIGHT, INVALID_TIMER);
|
|
status_change_end(src, SC_SIGHT, INVALID_TIMER);
|
|
clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
|
|
clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
|
|
- map_foreachinrange(skill_area_sub,src,
|
|
|
|
|
|
+ map_foreachinshootrange(skill_area_sub,src,
|
|
skill_get_splash(skill_id, skill_lv),BL_CHAR|BL_SKILL,
|
|
skill_get_splash(skill_id, skill_lv),BL_CHAR|BL_SKILL,
|
|
src,skill_id,skill_lv,tick, flag|BCT_ENEMY|SD_ANIMATION|1,
|
|
src,skill_id,skill_lv,tick, flag|BCT_ENEMY|SD_ANIMATION|1,
|
|
skill_castend_damage_id);
|
|
skill_castend_damage_id);
|
|
@@ -6813,7 +6813,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|
case WZ_FROSTNOVA:
|
|
case WZ_FROSTNOVA:
|
|
clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
|
|
clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
|
|
skill_area_temp[1] = 0;
|
|
skill_area_temp[1] = 0;
|
|
- map_foreachinrange(skill_attack_area, src,
|
|
|
|
|
|
+ map_foreachinshootrange(skill_attack_area, src,
|
|
skill_get_splash(skill_id, skill_lv), splash_target(src),
|
|
skill_get_splash(skill_id, skill_lv), splash_target(src),
|
|
BF_MAGIC, src, src, skill_id, skill_lv, tick, flag, BCT_ENEMY);
|
|
BF_MAGIC, src, src, skill_id, skill_lv, tick, flag, BCT_ENEMY);
|
|
break;
|
|
break;
|
|
@@ -6826,7 +6826,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|
BCT_ENEMY:BCT_ALL;
|
|
BCT_ENEMY:BCT_ALL;
|
|
clif_skill_nodamage(src, src, skill_id, -1, 1);
|
|
clif_skill_nodamage(src, src, skill_id, -1, 1);
|
|
map_delblock(src); //Required to prevent chain-self-destructions hitting back.
|
|
map_delblock(src); //Required to prevent chain-self-destructions hitting back.
|
|
- map_foreachinrange(skill_area_sub, bl,
|
|
|
|
|
|
+ map_foreachinshootrange(skill_area_sub, bl,
|
|
skill_get_splash(skill_id, skill_lv), splash_target(src),
|
|
skill_get_splash(skill_id, skill_lv), splash_target(src),
|
|
src, skill_id, skill_lv, tick, flag|i,
|
|
src, skill_id, skill_lv, tick, flag|i,
|
|
skill_castend_damage_id);
|
|
skill_castend_damage_id);
|
|
@@ -10984,7 +10984,7 @@ int skill_castend_id(int tid, unsigned int tick, int id, intptr_t data)
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
#ifdef OFFICIAL_WALKPATH
|
|
#ifdef OFFICIAL_WALKPATH
|
|
- if( !path_search_long(NULL, src->m, src->x, src->y, target->x, target->y, CELL_CHKWALL) )
|
|
|
|
|
|
+ if(skill_get_casttype(ud->skill_id) != CAST_NODAMAGE && !path_search_long(NULL, src->m, src->x, src->y, target->x, target->y, CELL_CHKWALL))
|
|
{
|
|
{
|
|
if (sd) {
|
|
if (sd) {
|
|
clif_skill_fail(sd,ud->skill_id,USESKILL_FAIL_LEVEL,0);
|
|
clif_skill_fail(sd,ud->skill_id,USESKILL_FAIL_LEVEL,0);
|
|
@@ -11358,7 +11358,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui
|
|
|
|
|
|
case BS_HAMMERFALL:
|
|
case BS_HAMMERFALL:
|
|
i = skill_get_splash(skill_id, skill_lv);
|
|
i = skill_get_splash(skill_id, skill_lv);
|
|
- map_foreachinarea (skill_area_sub,
|
|
|
|
|
|
+ map_foreachinarea(skill_area_sub,
|
|
src->m, x-i, y-i, x+i, y+i, BL_CHAR,
|
|
src->m, x-i, y-i, x+i, y+i, BL_CHAR,
|
|
src, skill_id, skill_lv, tick, flag|BCT_ENEMY|2,
|
|
src, skill_id, skill_lv, tick, flag|BCT_ENEMY|2,
|
|
skill_castend_nodamage_id);
|
|
skill_castend_nodamage_id);
|
|
@@ -11434,8 +11434,6 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui
|
|
case WE_CALLPARTNER:
|
|
case WE_CALLPARTNER:
|
|
case WE_CALLPARENT:
|
|
case WE_CALLPARENT:
|
|
case WE_CALLBABY:
|
|
case WE_CALLBABY:
|
|
- case AC_SHOWER: //Ground-placed skill implementation.
|
|
|
|
- case MA_SHOWER:
|
|
|
|
case SA_LANDPROTECTOR:
|
|
case SA_LANDPROTECTOR:
|
|
case BD_LULLABY:
|
|
case BD_LULLABY:
|
|
case BD_RICHMANKIM:
|
|
case BD_RICHMANKIM:
|
|
@@ -11768,13 +11766,18 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui
|
|
|
|
|
|
case RK_WINDCUTTER:
|
|
case RK_WINDCUTTER:
|
|
clif_skill_damage(src, src, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, 6);
|
|
clif_skill_damage(src, src, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, 6);
|
|
|
|
+ case AC_SHOWER:
|
|
|
|
+ case MA_SHOWER:
|
|
case NC_COLDSLOWER:
|
|
case NC_COLDSLOWER:
|
|
case NC_ARMSCANNON:
|
|
case NC_ARMSCANNON:
|
|
case RK_DRAGONBREATH:
|
|
case RK_DRAGONBREATH:
|
|
case RK_DRAGONBREATH_WATER:
|
|
case RK_DRAGONBREATH_WATER:
|
|
|
|
+ // Cast center might be relevant later (e.g. for knockback direction)
|
|
|
|
+ skill_area_temp[4] = x;
|
|
|
|
+ skill_area_temp[5] = y;
|
|
i = skill_get_splash(skill_id,skill_lv);
|
|
i = skill_get_splash(skill_id,skill_lv);
|
|
if (battle_config.skill_wall_check)
|
|
if (battle_config.skill_wall_check)
|
|
- map_foreachinshootrange(skill_area_sub,src,skill_get_splash(skill_id, skill_lv),splash_target(src),src,skill_id,skill_lv,tick,flag|BCT_ENEMY|1,skill_castend_damage_id);
|
|
|
|
|
|
+ map_foreachinshootarea(skill_area_sub,src->m,x-i,y-i,x+i,y+i,splash_target(src),src,skill_id,skill_lv,tick,flag|BCT_ENEMY|1,skill_castend_damage_id);
|
|
else
|
|
else
|
|
map_foreachinarea(skill_area_sub,src->m,x-i,y-i,x+i,y+i,splash_target(src),src,skill_id,skill_lv,tick,flag|BCT_ENEMY|1,skill_castend_damage_id);
|
|
map_foreachinarea(skill_area_sub,src->m,x-i,y-i,x+i,y+i,splash_target(src),src,skill_id,skill_lv,tick,flag|BCT_ENEMY|1,skill_castend_damage_id);
|
|
break;
|
|
break;
|
|
@@ -12744,8 +12747,8 @@ struct skill_unit_group *skill_unitsetting(struct block_list *src, uint16 skill_
|
|
|
|
|
|
if( !group->state.song_dance && !map_getcell(src->m,ux,uy,CELL_CHKREACH) )
|
|
if( !group->state.song_dance && !map_getcell(src->m,ux,uy,CELL_CHKREACH) )
|
|
continue; // don't place skill units on walls (except for songs/dances/encores)
|
|
continue; // don't place skill units on walls (except for songs/dances/encores)
|
|
- if( battle_config.skill_wall_check && unit_flag&UF_PATHCHECK && !path_search_long(NULL,src->m,ux,uy,x,y,CELL_CHKWALL) )
|
|
|
|
- continue; // no path between cell and center of casting.
|
|
|
|
|
|
+ if( battle_config.skill_wall_check && unit_flag&UF_PATHCHECK && !path_search_long(NULL,src->m,ux,uy,src->x,src->y,CELL_CHKWALL) )
|
|
|
|
+ continue; // no path between cell and caster
|
|
|
|
|
|
switch( skill_id ) {
|
|
switch( skill_id ) {
|
|
// HP for Skill unit that can be damaged, see also skill_unit_ondamaged
|
|
// HP for Skill unit that can be damaged, see also skill_unit_ondamaged
|
|
@@ -13445,18 +13448,23 @@ int skill_unit_onplace_timer(struct skill_unit *unit, struct block_list *bl, uns
|
|
case UNT_FREEZINGTRAP:
|
|
case UNT_FREEZINGTRAP:
|
|
case UNT_FIREPILLAR_ACTIVE:
|
|
case UNT_FIREPILLAR_ACTIVE:
|
|
case UNT_CLAYMORETRAP:
|
|
case UNT_CLAYMORETRAP:
|
|
|
|
+ {
|
|
|
|
+ int bl_flag = sg->bl_flag;
|
|
if (tsc && tsc->data[SC__MANHOLE])
|
|
if (tsc && tsc->data[SC__MANHOLE])
|
|
break;
|
|
break;
|
|
if (sg->unit_id == UNT_FIRINGTRAP || sg->unit_id == UNT_ICEBOUNDTRAP || sg->unit_id == UNT_CLAYMORETRAP)
|
|
if (sg->unit_id == UNT_FIRINGTRAP || sg->unit_id == UNT_ICEBOUNDTRAP || sg->unit_id == UNT_CLAYMORETRAP)
|
|
- map_foreachinrange(skill_trap_splash, &unit->bl, skill_get_splash(sg->skill_id, sg->skill_lv), sg->bl_flag|BL_SKILL|~BCT_SELF, &unit->bl, tick);
|
|
|
|
|
|
+ bl_flag = bl_flag|BL_SKILL|~BCT_SELF;
|
|
|
|
+ if(battle_config.skill_wall_check && !(skill_get_nk(skill_id)&NK_NO_DAMAGE))
|
|
|
|
+ map_foreachinshootrange(skill_trap_splash, &unit->bl, skill_get_splash(sg->skill_id, sg->skill_lv), bl_flag, &unit->bl, tick);
|
|
else
|
|
else
|
|
- map_foreachinrange(skill_trap_splash, &unit->bl, skill_get_splash(sg->skill_id, sg->skill_lv), sg->bl_flag, &unit->bl, tick);
|
|
|
|
|
|
+ map_foreachinrange(skill_trap_splash, &unit->bl, skill_get_splash(sg->skill_id, sg->skill_lv), bl_flag, &unit->bl, tick);
|
|
if (sg->unit_id != UNT_FIREPILLAR_ACTIVE)
|
|
if (sg->unit_id != UNT_FIREPILLAR_ACTIVE)
|
|
clif_changetraplook(&unit->bl,(sg->unit_id == UNT_LANDMINE ? UNT_FIREPILLAR_ACTIVE : UNT_USED_TRAPS));
|
|
clif_changetraplook(&unit->bl,(sg->unit_id == UNT_LANDMINE ? UNT_FIREPILLAR_ACTIVE : UNT_USED_TRAPS));
|
|
sg->limit = DIFF_TICK(tick, sg->tick) +
|
|
sg->limit = DIFF_TICK(tick, sg->tick) +
|
|
(sg->unit_id == UNT_CLUSTERBOMB || sg->unit_id == UNT_ICEBOUNDTRAP ? 1000 : 0) + // Cluster Bomb/Icebound has 1s to disappear once activated.
|
|
(sg->unit_id == UNT_CLUSTERBOMB || sg->unit_id == UNT_ICEBOUNDTRAP ? 1000 : 0) + // Cluster Bomb/Icebound has 1s to disappear once activated.
|
|
(sg->unit_id == UNT_FIRINGTRAP ? 0 : 1500); // Firing Trap gets removed immediately once activated.
|
|
(sg->unit_id == UNT_FIRINGTRAP ? 0 : 1500); // Firing Trap gets removed immediately once activated.
|
|
sg->unit_id = UNT_USED_TRAPS; // Change ID so it does not invoke a for each in area again.
|
|
sg->unit_id = UNT_USED_TRAPS; // Change ID so it does not invoke a for each in area again.
|
|
|
|
+ }
|
|
break;
|
|
break;
|
|
|
|
|
|
case UNT_TALKIEBOX:
|
|
case UNT_TALKIEBOX:
|
|
@@ -16796,10 +16804,16 @@ int skill_detonator(struct block_list *bl, va_list ap)
|
|
case UNT_CLAYMORETRAP:
|
|
case UNT_CLAYMORETRAP:
|
|
case UNT_FIRINGTRAP:
|
|
case UNT_FIRINGTRAP:
|
|
case UNT_ICEBOUNDTRAP:
|
|
case UNT_ICEBOUNDTRAP:
|
|
- map_foreachinrange(skill_trap_splash,bl,skill_get_splash(unit->group->skill_id,unit->group->skill_lv),unit->group->bl_flag|BL_SKILL|~BCT_SELF,bl,unit->group->tick);
|
|
|
|
|
|
+ if (battle_config.skill_wall_check)
|
|
|
|
+ map_foreachinshootrange(skill_trap_splash,bl,skill_get_splash(unit->group->skill_id,unit->group->skill_lv),unit->group->bl_flag|BL_SKILL|~BCT_SELF,bl,unit->group->tick);
|
|
|
|
+ else
|
|
|
|
+ map_foreachinrange(skill_trap_splash,bl,skill_get_splash(unit->group->skill_id,unit->group->skill_lv),unit->group->bl_flag|BL_SKILL|~BCT_SELF,bl,unit->group->tick);
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
- map_foreachinrange(skill_trap_splash,bl,skill_get_splash(unit->group->skill_id,unit->group->skill_lv),unit->group->bl_flag,bl,unit->group->tick);
|
|
|
|
|
|
+ if(battle_config.skill_wall_check && !(skill_get_nk(unit->group->skill_id)&NK_NO_DAMAGE))
|
|
|
|
+ map_foreachinshootrange(skill_trap_splash,bl,skill_get_splash(unit->group->skill_id,unit->group->skill_lv),unit->group->bl_flag,bl,unit->group->tick);
|
|
|
|
+ else
|
|
|
|
+ map_foreachinrange(skill_trap_splash,bl,skill_get_splash(unit->group->skill_id,unit->group->skill_lv),unit->group->bl_flag,bl,unit->group->tick);
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
clif_changetraplook(bl, UNT_USED_TRAPS);
|
|
clif_changetraplook(bl, UNT_USED_TRAPS);
|
|
@@ -19337,7 +19351,10 @@ static int skill_destroy_trap(struct block_list *bl, va_list ap)
|
|
case UNT_CLAYMORETRAP:
|
|
case UNT_CLAYMORETRAP:
|
|
case UNT_FIRINGTRAP:
|
|
case UNT_FIRINGTRAP:
|
|
case UNT_ICEBOUNDTRAP:
|
|
case UNT_ICEBOUNDTRAP:
|
|
- map_foreachinrange(skill_trap_splash,&su->bl, skill_get_splash(sg->skill_id, sg->skill_lv), sg->bl_flag|BL_SKILL|~BCT_SELF, &su->bl,tick);
|
|
|
|
|
|
+ if(battle_config.skill_wall_check)
|
|
|
|
+ map_foreachinshootrange(skill_trap_splash,&su->bl, skill_get_splash(sg->skill_id, sg->skill_lv), sg->bl_flag|BL_SKILL|~BCT_SELF, &su->bl,tick);
|
|
|
|
+ else
|
|
|
|
+ map_foreachinrange(skill_trap_splash,&su->bl, skill_get_splash(sg->skill_id, sg->skill_lv), sg->bl_flag|BL_SKILL|~BCT_SELF, &su->bl,tick);
|
|
break;
|
|
break;
|
|
case UNT_LANDMINE:
|
|
case UNT_LANDMINE:
|
|
case UNT_BLASTMINE:
|
|
case UNT_BLASTMINE:
|
|
@@ -19346,7 +19363,10 @@ static int skill_destroy_trap(struct block_list *bl, va_list ap)
|
|
case UNT_FLASHER:
|
|
case UNT_FLASHER:
|
|
case UNT_FREEZINGTRAP:
|
|
case UNT_FREEZINGTRAP:
|
|
case UNT_CLUSTERBOMB:
|
|
case UNT_CLUSTERBOMB:
|
|
- map_foreachinrange(skill_trap_splash,&su->bl, skill_get_splash(sg->skill_id, sg->skill_lv), sg->bl_flag, &su->bl,tick);
|
|
|
|
|
|
+ if (battle_config.skill_wall_check && !(skill_get_nk(sg->skill_id)&NK_NO_DAMAGE))
|
|
|
|
+ map_foreachinshootrange(skill_trap_splash,&su->bl, skill_get_splash(sg->skill_id, sg->skill_lv), sg->bl_flag, &su->bl,tick);
|
|
|
|
+ else
|
|
|
|
+ map_foreachinrange(skill_trap_splash,&su->bl, skill_get_splash(sg->skill_id, sg->skill_lv), sg->bl_flag, &su->bl,tick);
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
// Traps aren't recovered.
|
|
// Traps aren't recovered.
|