|
@@ -6962,7 +6962,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|
|
|
|
|
case MO_ABSORBSPIRITS:
|
|
|
i = 0;
|
|
|
- if (dstsd && (sd == dstsd || map_flag_vs(src->m) || (sd && sd->duel_group && sd->duel_group == dstsd->duel_group)) &&
|
|
|
+ if (dstsd && battle_check_target(src, bl, BCT_SELF|BCT_ENEMY) > 0 && (map_flag_vs(src->m) || (sd && sd->duel_group && sd->duel_group == dstsd->duel_group)) && // Only works on self and enemies
|
|
|
((dstsd->class_&MAPID_BASEMASK) != MAPID_GUNSLINGER || (dstsd->class_&MAPID_UPPERMASK) != MAPID_REBELLION)) { // split the if for readability, and included gunslingers in the check so that their coins cannot be removed [Reddozen]
|
|
|
if (dstsd->spiritball > 0) {
|
|
|
i = dstsd->spiritball * 7;
|
|
@@ -6975,6 +6975,10 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|
|
} else if (dstmd && !status_has_mode(tstatus,MD_STATUS_IMMUNE) && rnd() % 100 < 20) { // check if target is a monster and not status immune, for the 20% chance to absorb 2 SP per monster's level [Reddozen]
|
|
|
i = 2 * dstmd->level;
|
|
|
mob_target(dstmd,src,0);
|
|
|
+ } else {
|
|
|
+ if (sd)
|
|
|
+ clif_skill_fail(sd, skill_id, USESKILL_FAIL_LEVEL, 0);
|
|
|
+ break;
|
|
|
}
|
|
|
if (i) status_heal(src, 0, i, 3);
|
|
|
clif_skill_nodamage(src,bl,skill_id,skill_lv,i?1:0);
|