From c382dad802aff86a9938e4aff5bbde86d7401ec8 Mon Sep 17 00:00:00 2001 From: Cahyadi Ramadhan Togihon Date: Tue, 12 Nov 2013 14:33:07 +0700 Subject: [PATCH] Fixed SC_UNLIMIT & SC_CLOAKINGEXCEED effect. (thank Akinari and Akuma) Signed-off-by: Cahyadi Ramadhan Togihon --- src/map/battle.c | 20 ++++++++------------ src/map/status.c | 10 ++++++++-- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/map/battle.c b/src/map/battle.c index 2075f83cc4..9e0e03860b 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -1075,22 +1075,16 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam //Reduction: 6% + 6% every 20% DAMAGE_SUBRATE(6 * (1+per)) } - if(sc->data[SC_GRANITIC_ARMOR]){ + if(sc->data[SC_GRANITIC_ARMOR]) DAMAGE_SUBRATE(sc->data[SC_GRANITIC_ARMOR]->val2) - } if(sc->data[SC_PAIN_KILLER]){ damage -= sc->data[SC_PAIN_KILLER]->val3; damage = max(1,damage); } - if( sc->data[SC_DARKCROW] && ((flag&(BF_WEAPON|BF_SHORT))==(BF_WEAPON|BF_SHORT)) ) { - DAMAGE_ADDRATE(30 * sc->data[SC_DARKCROW]->val1); - } - if( sc->data[SC_UNLIMIT] && (flag&(BF_WEAPON|BF_SHORT))==(BF_WEAPON|BF_LONG) ) { - DAMAGE_ADDRATE(50 * sc->data[SC_UNLIMIT]->val1); - } - if((sce=sc->data[SC_MAGMA_FLOW]) && (rnd()%100 <= sce->val2) ){ + if( sc->data[SC_DARKCROW] && ((flag&(BF_WEAPON|BF_SHORT))==(BF_WEAPON|BF_SHORT)) ) + DAMAGE_ADDRATE(sc->data[SC_DARKCROW]->val2); + if( (sce=sc->data[SC_MAGMA_FLOW]) && (rnd()%100 <= sce->val2) ) skill_castend_damage_id(bl,src,MH_MAGMA_FLOW,sce->val1,gettick(),0); - } if( damage > 0 && ((flag&(BF_WEAPON|BF_SHORT))==(BF_WEAPON|BF_SHORT)) && (sce = sc->data[SC_STONEHARDSKIN]) ) { sce->val2 -= (int)cap_value(damage,INT_MIN,INT_MAX);; @@ -1185,7 +1179,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam } } - } + } //End of target SC_ check //SC effects from caster side. sc = status_get_sc(src); @@ -1224,7 +1218,9 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam TBL_HOM *hd = BL_CAST(BL_HOM,src); //when attacking if (hd && (rnd()%100<50) ) hom_addspiritball(hd, 10); // According to WarpPortal, this is a flat 50% chance } - } + if( sc->data[SC_UNLIMIT] && (flag&(BF_WEAPON|BF_LONG))==(BF_WEAPON|BF_LONG) ) + DAMAGE_ADDRATE(sc->data[SC_UNLIMIT]->val2); + } //End of caster SC_ check //PK damage rates if (battle_config.pk_mode && sd && bl->type == BL_PC && damage && map[bl->m].flag.pvp) { diff --git a/src/map/status.c b/src/map/status.c index e00effff38..d3cfc559c4 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -8775,8 +8775,8 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty tick_time = 3000; // [GodLesZ] tick time break; case SC_CLOAKINGEXCEED: - val2 = ( val1 + 1 ) / 2; // Hits - val3 = 90 + val1 * 10; // Walk speed + val2 = (val1 + 1) / 2; // Hits + val3 = (val1 - 1) * 10; // Walk speed if (bl->type == BL_PC) val4 |= battle_config.pc_cloak_check_type&7; else @@ -9276,6 +9276,12 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty case SC_FLASHCOMBO: val2 = (20 * val1) + 20; // atk bonus break; + case SC_DARKCROW: + val2 = 30 * val1; + break; + case SC_UNLIMIT: + val2 = 50 * val1; + break; case SC_MONSTER_TRANSFORM: if( !mobdb_checkid(val1) ) val1 = 1002; // Default poring