diff options
-rw-r--r-- | src/map/battle.c | 19 | ||||
-rw-r--r-- | src/map/skill.c | 5 | ||||
-rw-r--r-- | src/map/status.c | 2 |
3 files changed, 16 insertions, 10 deletions
diff --git a/src/map/battle.c b/src/map/battle.c index c834312dd..69d54ad38 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -3513,11 +3513,12 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list RE_LVL_DMOD(100); break; case WL_HELLINFERNO: - if( status_get_element(target) == ELE_FIRE ) - skillratio = 60 * skill_lv; - else - skillratio = 240 * skill_lv; - RE_LVL_DMOD(100); + skillratio = 300 * skill_lv; + RE_LVL_DMOD(100); + // Shadow: MATK [{( Skill Level x 300 ) x ( Caster’s Base Level / 100 ) x 4/5 }] % + // Fire : MATK [{( Skill Level x 300 ) x ( Caster’s Base Level / 100 ) /5 }] % + if( mflag&ELE_DARK ){ skillratio *= 4; s_ele = ELE_DARK; } + skillratio /= 5; break; case WL_COMET: { struct status_change * sc = status_get_sc(src); @@ -3560,10 +3561,10 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list RE_LVL_DMOD(100); break; case LG_SHIELDSPELL:// [(Caster’s Base Level x 4) + (Shield MDEF x 100) + (Caster’s INT x 2)] % - if( sd ) { - skillratio = status_get_lv(src) * 4 + sd->bonus.shieldmdef * 100 + status_get_int(src) * 2; - } else - skillratio += 1900; //2000% + if( sd ) { + skillratio = status_get_lv(src) * 4 + sd->bonus.shieldmdef * 100 + status_get_int(src) * 2; + } else + skillratio += 1900; //2000% break; case WM_METALICSOUND: skillratio += 120 * skill_lv + 60 * ( sd? pc_checkskill(sd, WM_LESSON) : 10 ) - 100; diff --git a/src/map/skill.c b/src/map/skill.c index ef41448fe..3bb3d011b 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -3803,7 +3803,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int case AB_RENOVATIO: case AB_HIGHNESSHEAL: case AB_DUPLELIGHT_MAGIC: - case WL_HELLINFERNO: case WM_METALICSOUND: skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); break; @@ -4212,6 +4211,10 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int skill_attack(skill_get_type(skillid), src, src, bl, skillid, skilllv, tick, flag); } break; + case WL_HELLINFERNO: + skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); + skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag|ELE_DARK); + break; case RA_WUGSTRIKE: case RA_WUGBITE: if( path_search(NULL,src->m,src->x,src->y,bl->x,bl->y,1,CELL_CHKNOREACH) ) { diff --git a/src/map/status.c b/src/map/status.c index bf1fbeaa9..49da4ae9f 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -1727,6 +1727,7 @@ int status_check_visibility(struct block_list *src, struct block_list *target) { //Check for chase-walk/hiding/cloaking opponents. case BL_PC: if ( tsc->data[SC_CLOAKINGEXCEED] && !(status->mode&MD_BOSS) ) + return 0; if( (tsc->option&(OPTION_HIDE|OPTION_CLOAK|OPTION_CHASEWALK) || tsc->data[SC__INVISIBILITY] || tsc->data[SC_CAMOUFLAGE]) && !(status->mode&MD_BOSS) && ( ((TBL_PC*)target)->special_state.perfect_hiding || !(status->mode&MD_DETECTOR) ) ) return 0; @@ -9224,6 +9225,7 @@ int status_change_timer(int tid, unsigned int tick, int id, intptr_t data) if(sc->opt1 == OPT1_STONEWAIT && sce->val3) { sce->val4 = 0; unit_stop_walking(bl,1); + unit_stop_attack(bl); sc->opt1 = OPT1_STONE; clif_changeoption(bl); sc_timer_next(1000+tick,status_change_timer, bl->id, data ); |