@ -4711,22 +4711,90 @@ public class PlayerCharacter extends AbstractCharacter {
@@ -4711,22 +4711,90 @@ public class PlayerCharacter extends AbstractCharacter {
if ( this . bonuses . getBool ( ModType . Stunned , SourceType . None ) )
return 0f ;
// Get base skill amount
CharacterSkill sk = this . skills . get ( type ) ;
float amount ;
if ( sk = = null )
amount = CharacterSkill . getQuickMastery ( this , type ) ;
else
amount = sk . getModifiedAmount ( ) ;
int levelDifference = this . level - attackerLevel ;
CharacterSkill passiveSkill ;
Item mainHand = null ;
Item offHand = null ;
if ( this . charItemManager ! = null ) {
mainHand = this . charItemManager . getEquipped ( 1 ) ;
offHand = this . charItemManager . getEquipped ( 2 ) ;
}
switch ( type ) {
case "Block" :
if ( ! fromCombat )
return 0 ;
if ( offHand = = null )
return 0 ;
if ( ! offHand . getItemBase ( ) . isShield ( ) )
return 0 ;
passiveSkill = this . skills . get ( "Block" ) ;
if ( passiveSkill = = null )
return 0 ;
float blockBonusFromShield = 0 ;
blockBonusFromShield = offHand . getItemBase ( ) . getBlockMod ( ) * 100 ;
for ( Effect eff : offHand . effects . values ( ) ) {
for ( AbstractEffectModifier mod : eff . getEffectModifiers ( ) ) {
if ( mod . modType . equals ( ModType . PassiveDefense ) ) {
float min = mod . minMod ;
int trains = eff . getTrains ( ) ;
float ramp = mod . getRamp ( ) ;
blockBonusFromShield + = ( min + ( trains * ramp ) ) * 10 ;
}
}
}
float blockChance = ( ( passiveSkill . getModifiedAmount ( ) + blockBonusFromShield ) / 4 ) + levelDifference ;
if ( this . bonuses ! = null )
blockChance * = 1 + this . bonuses . getFloatPercentAll ( ModType . PassiveDefense , SourceType . None ) ;
return blockChance ;
// Add bonuses
amount + = this . bonuses . getFloat ( modType , SourceType . None ) ;
case "Parry" :
if ( ! fromCombat )
return 0 ;
// Add item bonuses and return
if ( type . equals ( ModType . Dodge ) & & ! fromCombat )
return ( amount - attackerLevel + this . getLevel ( ) ) / 16 ; // spells
else
return ( amount - attackerLevel + this . getLevel ( ) ) / 4 ; // combat
if ( mainHand = = null )
return 0 ;
int parryBonus = 0 ;
if ( mainHand ! = null & & offHand ! = null & & ! offHand . getItemBase ( ) . isShield ( ) )
parryBonus = 5 ;
if ( mainHand ! = null & & mainHand . getItemBase ( ) . isTwoHanded ( ) )
parryBonus = 10 ;
parryBonus * = 10 ;
passiveSkill = this . skills . get ( "Parry" ) ;
if ( passiveSkill = = null )
return 0 ;
float parryChance = ( ( passiveSkill . getModifiedAmount ( ) + parryBonus ) / 4 ) + levelDifference ;
if ( this . bonuses ! = null )
parryChance * = 1 + this . bonuses . getFloatPercentAll ( ModType . Parry , SourceType . None ) ;
return parryChance ;
case "Dodge" :
passiveSkill = this . skills . get ( "Dodge" ) ;
if ( passiveSkill = = null )
return 0 ;
int divisor = 4 ;
if ( ! fromCombat )
divisor = 16 ;
float dodgeChance = ( ( passiveSkill . getModifiedAmount ( ) ) / divisor ) + levelDifference ;
return dodgeChance ;
default :
return 0 ;
}
}
public float getRegenModifier ( ModType type ) {