|
@@ -4027,7 +4027,23 @@ static void battle_calc_multi_attack(struct Damage* wd, struct block_list *src,s
|
|
|
|
|
|
if( sd && !skill_id ) { // if no skill_id passed, check for double attack [helvetica]
|
|
|
short i;
|
|
|
- if( ( ( skill_lv = pc_checkskill(sd,TF_DOUBLE) ) > 0 && sd->weapontype1 == W_DAGGER )
|
|
|
+ if(sc && sc->getSCE(SC_FEARBREEZE) && sd->weapontype1==W_BOW
|
|
|
+ && (i = sd->equip_index[EQI_AMMO]) >= 0 && sd->inventory_data[i] && sd->inventory.u.items_inventory[i].amount > 1)
|
|
|
+ {
|
|
|
+ int chance = rnd()%100;
|
|
|
+ switch(sc->getSCE(SC_FEARBREEZE)->val1) {
|
|
|
+ case 5: if( chance < 4) { wd->div_ = 5; break; } // 3 % chance to attack 5 times.
|
|
|
+ case 4: if( chance < 7) { wd->div_ = 4; break; } // 6 % chance to attack 4 times.
|
|
|
+ case 3: if( chance < 10) { wd->div_ = 3; break; } // 9 % chance to attack 3 times.
|
|
|
+ case 2:
|
|
|
+ case 1: if( chance < 13) { wd->div_ = 2; break; } // 12 % chance to attack 2 times.
|
|
|
+ }
|
|
|
+ wd->div_ = min(wd->div_,sd->inventory.u.items_inventory[i].amount);
|
|
|
+ sc->getSCE(SC_FEARBREEZE)->val4 = wd->div_-1;
|
|
|
+ if (wd->div_ > 1)
|
|
|
+ wd->type = DMG_MULTI_HIT;
|
|
|
+ }
|
|
|
+ if( wd->div_ == 1 && ( ( skill_lv = pc_checkskill(sd,TF_DOUBLE) ) > 0 && sd->weapontype1 == W_DAGGER )
|
|
|
|| ( pc_checkskill_flag(*sd, TF_DOUBLE) > SKILL_FLAG_PERMANENT && sd->weapontype1 != W_FIST )
|
|
|
|| ( sd->bonus.double_rate > 0 && sd->weapontype1 != W_FIST ) // Will fail bare-handed
|
|
|
|| ( sc && sc->getSCE(SC_KAGEMUSYA) && sd->weapontype1 != W_FIST )) // Will fail bare-handed
|
|
@@ -4048,7 +4064,7 @@ static void battle_calc_multi_attack(struct Damage* wd, struct block_list *src,s
|
|
|
wd->type = DMG_MULTI_HIT;
|
|
|
}
|
|
|
}
|
|
|
- else if( ((sd->weapontype1 == W_REVOLVER && (skill_lv = pc_checkskill(sd,GS_CHAINACTION)) > 0) //Normal Chain Action effect
|
|
|
+ if( wd->div_ == 1 && ((sd->weapontype1 == W_REVOLVER && (skill_lv = pc_checkskill(sd,GS_CHAINACTION)) > 0) //Normal Chain Action effect
|
|
|
|| (sc && sc->count && sc->getSCE(SC_E_CHAIN) && (skill_lv = sc->getSCE(SC_E_CHAIN)->val1) > 0)) //Chain Action of ETERNAL_CHAIN
|
|
|
&& rnd()%100 < 5*skill_lv ) //Success rate
|
|
|
{
|
|
@@ -4057,22 +4073,6 @@ static void battle_calc_multi_attack(struct Damage* wd, struct block_list *src,s
|
|
|
|
|
|
sc_start(src,src,SC_QD_SHOT_READY,100,target->id,skill_get_time(RL_QD_SHOT,1));
|
|
|
}
|
|
|
- else if(sc && sc->getSCE(SC_FEARBREEZE) && sd->weapontype1==W_BOW
|
|
|
- && (i = sd->equip_index[EQI_AMMO]) >= 0 && sd->inventory_data[i] && sd->inventory.u.items_inventory[i].amount > 1)
|
|
|
- {
|
|
|
- int chance = rnd()%100;
|
|
|
- switch(sc->getSCE(SC_FEARBREEZE)->val1) {
|
|
|
- case 5: if( chance < 4) { wd->div_ = 5; break; } // 3 % chance to attack 5 times.
|
|
|
- case 4: if( chance < 7) { wd->div_ = 4; break; } // 6 % chance to attack 4 times.
|
|
|
- case 3: if( chance < 10) { wd->div_ = 3; break; } // 9 % chance to attack 3 times.
|
|
|
- case 2:
|
|
|
- case 1: if( chance < 13) { wd->div_ = 2; break; } // 12 % chance to attack 2 times.
|
|
|
- }
|
|
|
- wd->div_ = min(wd->div_,sd->inventory.u.items_inventory[i].amount);
|
|
|
- sc->getSCE(SC_FEARBREEZE)->val4 = wd->div_-1;
|
|
|
- if (wd->div_ > 1)
|
|
|
- wd->type = DMG_MULTI_HIT;
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
switch (skill_id) {
|