diff options
-rw-r--r-- | src/map/battle.c | 7 | ||||
-rw-r--r-- | src/map/skill.c | 15 | ||||
-rw-r--r-- | src/map/status.c | 2 |
3 files changed, 12 insertions, 12 deletions
diff --git a/src/map/battle.c b/src/map/battle.c index 36f158ff8..565f6e312 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -403,10 +403,11 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,struct Damag skill_num == WL_SOULEXPANSION || (skill_num && skill_get_ele(skill_num, skill_lv) == ELE_GHOST) || (!skill_num && (status_get_status_data(src))->rhw.ele == ELE_GHOST) - ) + ){ + if( skill_num == WL_SOULEXPANSION ) + damage <<= 1; // If used against a player in White Imprison, the skill deals double damage. status_change_end(bl,SC_WHITEIMPRISON,INVALID_TIMER); // Those skills do damage and removes effect - else - { + }else{ d->dmg_lv = ATK_BLOCK; return 0; } diff --git a/src/map/skill.c b/src/map/skill.c index eaa2b3331..1331e2064 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -4031,16 +4031,15 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int break; case WL_DRAINLIFE: { - int heal = skill_attack(skill_get_type(skillid), src, src, bl, skillid, skilllv, tick, flag); - int rate = 70 + 4 * skilllv + ( sd ? sd->status.job_level : 50 ) / 5; + int heal = skill_attack(skill_get_type(skillid), src, src, bl, skillid, skilllv, tick, flag); + int rate = 70 + 5 * skilllv; - heal = 8 * skilllv; - if( status_get_lv(src) > 100 ) heal = heal * status_get_lv(src) / 100; // Base level bonus. + heal = heal * (5 + 5 * skilllv) / 100; - if( bl->type == BL_SKILL ) - heal = 0; // Don't absorb heal from Ice Walls or other skill units. + if( bl->type == BL_SKILL ) + heal = 0; // Don't absorb heal from Ice Walls or other skill units. - if( heal && rnd()%100 < rate ) + if( heal && rnd()%100 < rate ) { status_heal(src, heal, 0, 0); clif_skill_nodamage(NULL, src, AL_HEAL, heal, 1); @@ -7568,7 +7567,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in break; case WL_WHITEIMPRISON: - if( !(tsc && tsc->data[type]) && (src == bl || battle_check_target(src, bl, BCT_ENEMY)) ) + if( !(tsc && tsc->data[type]) && (src == bl || battle_check_target(src, bl, BCT_ENEMY)) && !is_boss(bl) )// Should not work with bosses. { int rate = 50 + 3 * skilllv + ( sd? sd->status.job_level : 50 ) / 4; i = sc_start2(bl,type,rate,skilllv,src->id,(src == bl)?skill_get_time2(skillid,skilllv):skill_get_time(skillid, skilllv)); diff --git a/src/map/status.c b/src/map/status.c index b375a5240..2da269239 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -6249,7 +6249,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val case SC_MARSHOFABYSS: case SC_ADORAMUS: - // Exploid prevention - kRO Fix + // Exploit prevention - kRO Fix case SC_PYREXIA: case SC_DEATHHURT: case SC_TOXIN: |