|
|
@ -4711,22 +4711,90 @@ public class PlayerCharacter extends AbstractCharacter { |
|
|
|
if (this.bonuses.getBool(ModType.Stunned, SourceType.None)) |
|
|
|
if (this.bonuses.getBool(ModType.Stunned, SourceType.None)) |
|
|
|
return 0f; |
|
|
|
return 0f; |
|
|
|
|
|
|
|
|
|
|
|
// Get base skill amount
|
|
|
|
int levelDifference = this.level - attackerLevel; |
|
|
|
CharacterSkill sk = this.skills.get(type); |
|
|
|
CharacterSkill passiveSkill; |
|
|
|
float amount; |
|
|
|
|
|
|
|
if (sk == null) |
|
|
|
Item mainHand = null; |
|
|
|
amount = CharacterSkill.getQuickMastery(this, type); |
|
|
|
Item offHand = null; |
|
|
|
else |
|
|
|
if(this.charItemManager != null){ |
|
|
|
amount = sk.getModifiedAmount(); |
|
|
|
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
|
|
|
|
case "Parry": |
|
|
|
amount += this.bonuses.getFloat(modType, SourceType.None); |
|
|
|
if(!fromCombat) |
|
|
|
|
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
|
|
// Add item bonuses and return
|
|
|
|
if(mainHand == null) |
|
|
|
if (type.equals(ModType.Dodge) && !fromCombat) |
|
|
|
return 0; |
|
|
|
return (amount - attackerLevel + this.getLevel()) / 16; // spells
|
|
|
|
int parryBonus = 0; |
|
|
|
else |
|
|
|
|
|
|
|
return (amount - attackerLevel + this.getLevel()) / 4; // combat
|
|
|
|
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) { |
|
|
|
public float getRegenModifier(ModType type) { |
|
|
|