diff options
Diffstat (limited to 'src/map/battle.c')
-rw-r--r-- | src/map/battle.c | 61 |
1 files changed, 32 insertions, 29 deletions
diff --git a/src/map/battle.c b/src/map/battle.c index f82e60cd2..c0daf16a1 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -755,33 +755,36 @@ int battle_get_def(struct block_list *bl) if(def < 1000000) { if(sc_data) { - //キーピング時はDEF100 - if( sc_data[SC_KEEPING].timer!=-1) - def = 100; - //プロボック時は減算 - if( sc_data[SC_PROVOKE].timer!=-1 && bl->type != BL_PC) - def = (def*(100 - 6*sc_data[SC_PROVOKE].val1)+50)/100; - //戦太鼓の響き時は加算 - if( sc_data[SC_DRUMBATTLE].timer!=-1 && bl->type != BL_PC) - def += sc_data[SC_DRUMBATTLE].val3; - //毒にかかっている時は減算 - if(sc_data[SC_POISON].timer!=-1 && bl->type != BL_PC) - def = def*75/100; - //ストリップシールド時は減算 - if(sc_data[SC_STRIPSHIELD].timer!=-1 && bl->type != BL_PC) - def = def*sc_data[SC_STRIPSHIELD].val2/100; - //シグナムクルシス時は減算 - if(sc_data[SC_SIGNUMCRUCIS].timer!=-1 && bl->type != BL_PC) - def = def * (100 - sc_data[SC_SIGNUMCRUCIS].val2)/100; - //永遠の混沌時はDEF0になる - if(sc_data[SC_ETERNALCHAOS].timer!=-1 && bl->type != BL_PC) - def = 0; //凍結、石化時は右シフト if(sc_data[SC_FREEZE].timer != -1 || (sc_data[SC_STONE].timer != -1 && sc_data[SC_STONE].val2 == 0)) def >>= 1; - //コンセントレーション時は減算 - if( sc_data[SC_CONCENTRATION].timer!=-1 && bl->type != BL_PC) - def = (def*(100 - 5*sc_data[SC_CONCENTRATION].val1))/100; + + if (bl->type != BL_PC) { + //キーピング時はDEF100 + if( sc_data[SC_KEEPING].timer!=-1) + def = 100; + //プロボック時は減算 + if( sc_data[SC_PROVOKE].timer!=-1) + def = (def*(100 - 6*sc_data[SC_PROVOKE].val1)+50)/100; + //戦太鼓の響き時は加算 + if( sc_data[SC_DRUMBATTLE].timer!=-1) + def += sc_data[SC_DRUMBATTLE].val3; + //毒にかかっている時は減算 + if(sc_data[SC_POISON].timer!=-1) + def = def*75/100; + //ストリップシールド時は減算 + if(sc_data[SC_STRIPSHIELD].timer!=-1) + def = def*sc_data[SC_STRIPSHIELD].val2/100; + //シグナムクルシス時は減算 + if(sc_data[SC_SIGNUMCRUCIS].timer!=-1) + def = def * (100 - sc_data[SC_SIGNUMCRUCIS].val2)/100; + //永遠の混沌時はDEF0になる + if(sc_data[SC_ETERNALCHAOS].timer!=-1) + def = 0; + //コンセントレーション時は減算 + if( sc_data[SC_CONCENTRATION].timer!=-1) + def = (def*(100 - 5*sc_data[SC_CONCENTRATION].val1))/100; + } } //詠唱中は詠唱時減算率に基づいて減算 if(skilltimer != -1) { @@ -846,15 +849,15 @@ int battle_get_def2(struct block_list *bl) else if(bl->type==BL_PET) def2 = mob_db[((struct pet_data *)bl)->class_].vit; - if(sc_data) { - if( sc_data[SC_ANGELUS].timer!=-1 && bl->type != BL_PC) + if(bl->type != BL_PC && sc_data) { + if( sc_data[SC_ANGELUS].timer!=-1) def2 = def2*(110+5*sc_data[SC_ANGELUS].val1)/100; - if( sc_data[SC_PROVOKE].timer!=-1 && bl->type != BL_PC) + if( sc_data[SC_PROVOKE].timer!=-1) def2 = (def2*(100 - 6*sc_data[SC_PROVOKE].val1)+50)/100; - if(sc_data[SC_POISON].timer!=-1 && bl->type != BL_PC) + if(sc_data[SC_POISON].timer!=-1) def2 = def2*75/100; //コンセントレーション時は減算 - if( sc_data[SC_CONCENTRATION].timer!=-1 && bl->type != BL_PC) + if( sc_data[SC_CONCENTRATION].timer!=-1) def2 = def2*(100 - 5*sc_data[SC_CONCENTRATION].val1)/100; } if(def2 < 1) def2 = 1; |