diff options
author | shennetsind <ind@henn.et> | 2013-04-16 00:54:55 -0300 |
---|---|---|
committer | shennetsind <ind@henn.et> | 2013-04-16 00:54:55 -0300 |
commit | 370bfb735bb59761cc7b5d2fbe84b6739125c3c4 (patch) | |
tree | 75558020a90224cba18f649a3bf24bf35e93aa78 /src/map/battle.c | |
parent | e671397fb25182e67d191c32f1272a4727322807 (diff) | |
download | hercules-370bfb735bb59761cc7b5d2fbe84b6739125c3c4.tar.gz hercules-370bfb735bb59761cc7b5d2fbe84b6739125c3c4.tar.bz2 hercules-370bfb735bb59761cc7b5d2fbe84b6739125c3c4.tar.xz hercules-370bfb735bb59761cc7b5d2fbe84b6739125c3c4.zip |
Fixed Bug #4464
on critical hits ignoring def.
Special Thanks to Micheru
http://hercules.ws/board/tracker/issue-4464-critical-hits-no-longer-ignore-defense/
Signed-off-by: shennetsind <ind@henn.et>
Diffstat (limited to 'src/map/battle.c')
-rw-r--r-- | src/map/battle.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/src/map/battle.c b/src/map/battle.c index ad4c7fc7d..0daa319e3 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -1910,10 +1910,13 @@ struct Damage battle_calc_weapon_attack(struct block_list *src,struct block_list if (rnd()%1000 < cri) flag.cri = 1; } - if (flag.cri) - { + if (flag.cri) { wd.type = 0x0a; +#ifdef RENEWAL + flag.hit = 1; +#else flag.idef = flag.idef2 = flag.hit = 1; +#endif } else { //Check for Perfect Hit if(sd && sd->bonus.perfect_hit > 0 && rnd()%100 < sd->bonus.perfect_hit) flag.hit = 1; @@ -3374,8 +3377,7 @@ struct Damage battle_calc_weapon_attack(struct block_list *src,struct block_list if(skill_id == CR_GRANDCROSS || skill_id == NPC_GRANDDARKNESS) return wd; //Enough, rest is not needed. - if (sd) - { + if (sd) { if (skill_id != CR_SHIELDBOOMERANG) //Only Shield boomerang doesn't takes the Star Crumbs bonus. ATK_ADD2(wd.div_*sd->right_weapon.star, wd.div_*sd->left_weapon.star); if (skill_id==MO_FINGEROFFENSIVE) { //The finger offensive spheres on moment of attack do count. [Skotlex] @@ -3388,7 +3390,10 @@ struct Damage battle_calc_weapon_attack(struct block_list *src,struct block_list wd.damage = battle->calc_cardfix(BF_WEAPON, src, target, nk, s_ele, s_ele_, wd.damage, 2, wd.flag); if( flag.lh ) wd.damage2 = battle->calc_cardfix(BF_WEAPON, src, target, nk, s_ele, s_ele_, wd.damage2, 3, wd.flag); - +#ifdef RENEWAL + if( flag.cri ) + ATK_ADDRATE(sd->bonus.crit_atk_rate>=100?sd->bonus.crit_atk_rate-60:40); +#endif if( skill_id == CR_SHIELDBOOMERANG || skill_id == PA_SHIELDCHAIN ) { //Refine bonus applies after cards and elements. short index= sd->equip_index[EQI_HAND_L]; @@ -3401,8 +3406,7 @@ struct Damage battle_calc_weapon_attack(struct block_list *src,struct block_list if(!sd && tsd) //if player on player then it was already measured above wd.damage = battle->calc_cardfix(BF_WEAPON, src, target, nk, s_ele, s_ele_, wd.damage, flag.lh, wd.flag); - if( flag.infdef ) - { //Plants receive 1 damage when hit + if( flag.infdef ) { //Plants receive 1 damage when hit short class_ = status_get_class(target); if( flag.hit || wd.damage > 0 ) wd.damage = wd.div_; // In some cases, right hand no need to have a weapon to increase damage |