|
@@ -324,7 +324,6 @@ static int skill_unit_onplace(struct skill_unit *src,struct block_list *bl,unsig
|
|
|
int skill_unit_onleft(uint16 skill_id, struct block_list *bl,unsigned int tick);
|
|
|
static int skill_unit_effect(struct block_list *bl,va_list ap);
|
|
|
static int skill_bind_trap(struct block_list *bl, va_list ap);
|
|
|
-static int skill_mob_releasetarget(struct block_list *bl, va_list ap);
|
|
|
|
|
|
int skill_get_casttype (uint16 skill_id) {
|
|
|
int inf = skill_get_inf(skill_id);
|
|
@@ -10574,7 +10573,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|
|
delete_timer(md2->deletetimer, mob_timer_delete);
|
|
|
md2->deletetimer = add_timer (gettick() + skill_get_time(skill_id, skill_lv), mob_timer_delete, md2->bl.id, 0);
|
|
|
mob_spawn( md2 );
|
|
|
- pc_setinvincibletimer(sd,500);// unlock target lock
|
|
|
+ map_foreachinallrange(unit_changetarget, src, AREA_SIZE, BL_MOB, src, &md2->bl);
|
|
|
clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
|
|
|
skill_blown(src,bl,skill_get_blewcount(skill_id,skill_lv),unit_getdir(bl),BLOWN_NONE);
|
|
|
}
|
|
@@ -10619,6 +10618,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|
|
if (bl->type == BL_PC && pc_issit((TBL_PC*)bl))
|
|
|
clif_sitting(bl); //Avoid sitting sync problem
|
|
|
clif_blown(bl);
|
|
|
+ map_foreachinallrange(unit_changetarget, src, AREA_SIZE, BL_CHAR, src, bl);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -12174,10 +12174,10 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui
|
|
|
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
|
|
return 1;
|
|
|
}
|
|
|
- // Release all targets against the caster.
|
|
|
- map_foreachinallrange(skill_mob_releasetarget, src, AREA_SIZE, BL_MOB, src, &group->unit->bl);
|
|
|
+ map_foreachinallrange(unit_changetarget, src, AREA_SIZE, BL_MOB, src, &group->unit->bl); // Release all targets against the caster
|
|
|
+ pc_setinvincibletimer(sd, skill_get_time(skill_id, skill_lv));
|
|
|
skill_blown(src, src, skill_get_blewcount(skill_id, skill_lv), unit_getdir(src), BLOWN_IGNORE_NO_KNOCKBACK); // Don't stop the caster from backsliding if special_state.no_knockback is active
|
|
|
- clif_skill_nodamage(src,src,skill_id,skill_lv,sc_start(src,src,type,100,skill_lv,skill_get_time2(skill_id,skill_lv)));
|
|
|
+ clif_skill_nodamage(src,src,skill_id,skill_lv,sc_start(src,src,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
|
|
|
}
|
|
|
break;
|
|
|
|
|
@@ -17301,38 +17301,6 @@ static int skill_bind_trap(struct block_list *bl, va_list ap) {
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * Release monsters that are targetting the caster and change target.
|
|
|
- * @param bl: Monster data
|
|
|
- * @param src: Player data
|
|
|
- * @param skill: Skill unit group data
|
|
|
- */
|
|
|
-static int skill_mob_releasetarget(struct block_list *bl, va_list ap)
|
|
|
-{
|
|
|
- struct block_list *src = NULL, *skill = NULL;
|
|
|
- struct mob_data *md = NULL;
|
|
|
-
|
|
|
- nullpo_ret(bl);
|
|
|
- nullpo_ret(ap);
|
|
|
- nullpo_ret(src = va_arg(ap, struct block_list *));
|
|
|
- nullpo_ret(skill = va_arg(ap, struct block_list *));
|
|
|
-
|
|
|
- if (bl->type != BL_MOB)
|
|
|
- return 0;
|
|
|
-
|
|
|
- md = map_id2md(bl->id);
|
|
|
-
|
|
|
- if (md && md->target_id == src->id) {
|
|
|
- struct unit_data *ud = unit_bl2ud(bl);
|
|
|
-
|
|
|
- md->attacked_id = 0;
|
|
|
- md->target_id = skill->id;
|
|
|
- ud->target_to = skill->id;
|
|
|
- }
|
|
|
-
|
|
|
- return 1;
|
|
|
-}
|
|
|
-
|
|
|
/*==========================================
|
|
|
* Check new skill unit cell when overlapping in other skill unit cell.
|
|
|
* Catched skill in cell value pushed to *unit pointer.
|
|
@@ -18456,7 +18424,7 @@ static int skill_unit_timer_sub(DBKey key, DBData *data, va_list ap)
|
|
|
struct block_list *src = map_id2bl(group->src_id);
|
|
|
|
|
|
if (src)
|
|
|
- map_foreachinrange(skill_area_sub, &unit->bl, unit->range, BL_CHAR|BL_SKILL, src, SC_FEINTBOMB, group->skill_lv, tick, BCT_ENEMY|SD_ANIMATION|5, skill_castend_damage_id);
|
|
|
+ map_foreachinrange(skill_area_sub, &unit->bl, unit->range, BL_CHAR|BL_SKILL, src, group->skill_id, group->skill_lv, tick, BCT_ENEMY|SD_ANIMATION|5, skill_castend_damage_id);
|
|
|
skill_delunit(unit);
|
|
|
}
|
|
|
break;
|