|  |  | @ -3838,6 +3838,227 @@ public class PlayerCharacter extends AbstractCharacter { | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     public void calculateATR(){ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if(this.charItemManager == null){ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             this.atrHandOne = 1; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             this.atrHandTwo = 1; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             return; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         Item equippedRight = this.charItemManager.getItemFromEquipped(ItemSlotType.RHELD.ordinal()); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         int weaponSkill1 = this.skills.get("Unarmed Combat").getTotalSkillPercet(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         int weaponMastery1 = this.skills.get("Unarmed Combat Mastery").getTotalSkillPercet(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         float atr1 = 0; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         int primaryStat1; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if(equippedRight != null && equippedRight.getItemBase().isStrBased()){ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             primaryStat1 = this.statStrCurrent; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         }else{ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             primaryStat1 = this.statDexCurrent; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         atr1 = (primaryStat1 * 0.5f) + (weaponSkill1 * 4) + (weaponMastery1 * 3); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if (this.bonuses != null) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             atr1 += this.bonuses.getFloat(ModType.OCV, SourceType.None); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             float pos_Bonus = (1 + this.bonuses.getFloatPercentPositive(ModType.OCV, SourceType.None)); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             atr1 *= pos_Bonus; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             float neg_Bonus = this.bonuses.getFloatPercentNegative(ModType.OCV, SourceType.None); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             atr1 *= (1 + neg_Bonus); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         atr1 = (atr1 < 1) ? 1 : atr1; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         this.atrHandOne = (short) (atr1 + 0.5f); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         Item equippedLeft = this.charItemManager.getItemFromEquipped(ItemSlotType.LHELD.ordinal()); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         int weaponSkill2 = this.skills.get("Unarmed Combat").getTotalSkillPercet(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         int weaponMastery2 = this.skills.get("Unarmed Combat Mastery").getTotalSkillPercet(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         float atr2 = 0; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         int primaryStat2; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if (equippedLeft != null && equippedLeft.getItemBase().isStrBased()) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             primaryStat2 = this.statStrCurrent; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } else { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             primaryStat2 = this.statDexCurrent; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         atr2 = (primaryStat2 * 0.5f) + (weaponSkill2 * 4) + (weaponMastery2 * 3); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if (this.bonuses != null) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             atr2 += this.bonuses.getFloat(ModType.OCV, SourceType.None); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             float pos_Bonus = (1 + this.bonuses.getFloatPercentPositive(ModType.OCV, SourceType.None)); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             atr2 *= pos_Bonus; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             float neg_Bonus = this.bonuses.getFloatPercentNegative(ModType.OCV, SourceType.None); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             atr2 *= (1 + neg_Bonus); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         atr2 = (atr2 < 1) ? 1 : atr2; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         this.atrHandTwo = (short) (atr2 + 0.5f); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     public void calculateDamage(){ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if(this.charItemManager == null){ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             this.minDamageHandOne = 1; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             this.maxDamageHandOne = 5; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             this.minDamageHandTwo = 1; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             this.maxDamageHandTwo = 5; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             return; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         this.calculateMinDamage(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         this.calculateMaxDamage(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     public void calculateMinDamage(){ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         int baseDMG1 = 1; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         int baseDMG2 = 1; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         int weaponSkill1 = this.skills.get("Unarmed Combat").getTotalSkillPercet(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         int weaponSkill2 = this.skills.get("Unarmed Combat").getTotalSkillPercet(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         int weaponMastery1 = this.skills.get("Unarmed Combat Mastery").getTotalSkillPercet(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         int weaponMastery2 = this.skills.get("Unarmed Combat Mastery").getTotalSkillPercet(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         Item equippedRight = this.charItemManager.getItemFromEquipped(ItemSlotType.RHELD.ordinal()); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         Item equippedLeft = this.charItemManager.getItemFromEquipped(ItemSlotType.LHELD.ordinal()); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         int primary1 = this.statDexCurrent; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         int secondary1 = this.statStrCurrent; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         int primary2 = this.statDexCurrent; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         int secondary2 = this.statStrCurrent; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if(equippedRight != null){ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             baseDMG1 = equippedRight.getItemBase().getMinDamage(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             weaponSkill1 = this.skills.get(equippedRight.getItemBase().getSkillRequired()).getTotalSkillPercet(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             weaponMastery1 = this.skills.get(equippedRight.getItemBase().getMastery()).getTotalSkillPercet(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             if(equippedRight.getItemBase().isStrBased()) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 primary1 = this.statStrCurrent; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 secondary1 = this.statDexCurrent; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if(equippedLeft != null){ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             baseDMG2 = equippedLeft.getItemBase().getMinDamage(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             weaponSkill2 = this.skills.get(equippedLeft.getItemBase().getSkillRequired()).getTotalSkillPercet(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             weaponMastery2 = this.skills.get(equippedLeft.getItemBase().getMastery()).getTotalSkillPercet(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             if(equippedLeft.getItemBase().isStrBased()) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 primary2 = this.statStrCurrent; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 secondary2 = this.statDexCurrent; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         double primaryComponent1 = 0.0048 * primary1 + 0.049 * Math.sqrt(primary1 - 0.75); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         double secondaryComponent1 = 0.0066 * secondary1 + 0.064 * Math.sqrt(secondary1 - 0.75); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         double skillComponent1 = 0.01 * (weaponSkill1 + weaponMastery1); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         int min1 =  (int)(baseDMG1 * (primaryComponent1 + secondaryComponent1 + skillComponent1)); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         double primaryComponent2 = 0.0048 * primary2 + 0.049 * Math.sqrt(primary2 - 0.75); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         double secondaryComponent2 = 0.0066 * secondary2 + 0.064 * Math.sqrt(secondary2 - 0.75); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         double skillComponent2 = 0.01 * (weaponSkill2 + weaponMastery2); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         int min2 =  (int)(baseDMG2 * (primaryComponent2 + secondaryComponent2 + skillComponent2)); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         this.minDamageHandOne = min1; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         this.minDamageHandTwo = min2; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     public void calculateMaxDamage() { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         int baseDMG1 = 1; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         int baseDMG2 = 1; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         int weaponSkill1 = this.skills.get("Unarmed Combat").getTotalSkillPercet(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         int weaponSkill2 = this.skills.get("Unarmed Combat").getTotalSkillPercet(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         int weaponMastery1 = this.skills.get("Unarmed Combat Mastery").getTotalSkillPercet(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         int weaponMastery2 = this.skills.get("Unarmed Combat Mastery").getTotalSkillPercet(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         Item equippedRight = this.charItemManager.getItemFromEquipped(ItemSlotType.RHELD.ordinal()); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         Item equippedLeft = this.charItemManager.getItemFromEquipped(ItemSlotType.LHELD.ordinal()); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         int primary1 = this.statDexCurrent; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         int secondary1 = this.statStrCurrent; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         int primary2 = this.statDexCurrent; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         int secondary2 = this.statStrCurrent; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if (equippedRight != null) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             baseDMG1 = equippedRight.getItemBase().getMaxDamage(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             weaponSkill1 = this.skills.get(equippedRight.getItemBase().getSkillRequired()).getTotalSkillPercet(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             weaponMastery1 = this.skills.get(equippedRight.getItemBase().getMastery()).getTotalSkillPercet(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             if (equippedRight.getItemBase().isStrBased()) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 primary1 = this.statStrCurrent; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 secondary1 = this.statDexCurrent; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if (equippedLeft != null) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             baseDMG2 = equippedLeft.getItemBase().getMaxDamage(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             weaponSkill2 = this.skills.get(equippedLeft.getItemBase().getSkillRequired()).getTotalSkillPercet(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             weaponMastery2 = this.skills.get(equippedLeft.getItemBase().getMastery()).getTotalSkillPercet(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             if (equippedLeft.getItemBase().isStrBased()) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 primary2 = this.statStrCurrent; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 secondary2 = this.statDexCurrent; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         // Calculate max damage for right hand weapon
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         double primaryComponent1 = 0.0124 * primary1 + 0.118 * Math.sqrt(primary1 - 0.75); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         double secondaryComponent1 = 0.0022 * secondary1 + 0.028 * Math.sqrt(secondary1 - 0.75); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         double skillComponent1 = 0.0075 * (weaponSkill1 + weaponMastery1); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         int max1 = (int) (baseDMG1 * (primaryComponent1 + secondaryComponent1 + skillComponent1)); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         // Calculate max damage for left hand weapon
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         double primaryComponent2 = 0.0124 * primary2 + 0.118 * Math.sqrt(primary2 - 0.75); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         double secondaryComponent2 = 0.0022 * secondary2 + 0.028 * Math.sqrt(secondary2 - 0.75); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         double skillComponent2 = 0.0075 * (weaponSkill2 + weaponMastery2); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         int max2 = (int) (baseDMG2 * (primaryComponent2 + secondaryComponent2 + skillComponent2)); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         this.maxDamageHandOne = max1; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         this.maxDamageHandTwo = max2; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     public void calculateSpeed(){ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if(this.charItemManager == null){ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             this.speedHandOne = 20.0f; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             this.speedHandTwo = 20.0f; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             return; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         ItemBase weaponBase1 = null; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         ItemBase weaponBase2 = null; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if(this.charItemManager.getItemFromEquipped(ItemSlotType.RHELD.ordinal()) != null){ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             weaponBase1 = this.charItemManager.getItemFromEquipped(ItemSlotType.RHELD.ordinal()).getItemBase(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if(this.charItemManager.getItemFromEquipped(ItemSlotType.LHELD.ordinal()) != null){ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             weaponBase2 = this.charItemManager.getItemFromEquipped(ItemSlotType.LHELD.ordinal()).getItemBase(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         float speed1; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         float speed2; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if (weaponBase1 != null) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             speed1 = weaponBase1.getSpeed(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         else | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             speed1 = 20f; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if (weaponBase2 != null) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             speed2 = weaponBase2.getSpeed(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         else | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             speed2 = 20f; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if(this.bonuses!= null){ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             for (AbstractEffectModifier mod : this.bonuses.bonusFloats.keySet()) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 if (mod.modType.equals(ModType.AttackDelay) || mod.modType.equals(ModType.WeaponSpeed)) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                     float modValue = 1 + mod.getPercentMod() * 0.01f; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                     speed1 *= modValue; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if(this.bonuses!= null){ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             for (AbstractEffectModifier mod : this.bonuses.bonusFloats.keySet()) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 if (mod.modType.equals(ModType.AttackDelay) || mod.modType.equals(ModType.WeaponSpeed)) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                     float modValue = 1 + mod.getPercentMod() * 0.01f; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                     speed2 *= modValue; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if (speed1 < 10) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             speed1 = 10; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if (speed2 < 10) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             speed2 = 10; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         this.speedHandOne = speed1; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         this.speedHandTwo= speed2; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     /** |  |  |  |     /** | 
			
		
	
		
		
			
				
					
					|  |  |  |      * @ Calculates Atr, and Damage for each weapon |  |  |  |      * @ Calculates Atr, and Damage for each weapon | 
			
		
	
		
		
			
				
					
					|  |  |  |      */ |  |  |  |      */ | 
			
		
	
	
		
		
			
				
					|  |  | @ -3864,9 +4085,6 @@ public class PlayerCharacter extends AbstractCharacter { | 
			
		
	
		
		
			
				
					
					|  |  |  |         float speed = 20f; |  |  |  |         float speed = 20f; | 
			
		
	
		
		
			
				
					
					|  |  |  |         boolean strBased = false; |  |  |  |         boolean strBased = false; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         ItemBase wbMain = (weapon != null) ? weapon.getItemBase() : null; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         ItemBase wbOff = (otherHand != null) ? otherHand.getItemBase() : null; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         // get skill percentages and min and max damage for weapons
 |  |  |  |         // get skill percentages and min and max damage for weapons
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (noWeapon) { |  |  |  |         if (noWeapon) { | 
			
		
	
		
		
			
				
					
					|  |  |  |             if (mainHand) { |  |  |  |             if (mainHand) { | 
			
		
	
	
		
		
			
				
					|  |  | @ -3930,8 +4148,6 @@ public class PlayerCharacter extends AbstractCharacter { | 
			
		
	
		
		
			
				
					
					|  |  |  |             //(Primary Stat / 2) + (Weapon Skill * 4) + (Weapon Mastery * 3) + (ATR Enchantments) * 1.stance modifier
 |  |  |  |             //(Primary Stat / 2) + (Weapon Skill * 4) + (Weapon Mastery * 3) + (ATR Enchantments) * 1.stance modifier
 | 
			
		
	
		
		
			
				
					
					|  |  |  |             float atr = 0; |  |  |  |             float atr = 0; | 
			
		
	
		
		
			
				
					
					|  |  |  |             int primaryStat; |  |  |  |             int primaryStat; | 
			
		
	
		
		
			
				
					
					|  |  |  |             int dexMod = this.getDexMod(); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             int strMod = this.getStrMod(); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             if(weaponBase != null && weaponBase.isStrBased()){ |  |  |  |             if(weaponBase != null && weaponBase.isStrBased()){ | 
			
		
	
		
		
			
				
					
					|  |  |  |                 primaryStat = this.statStrCurrent; |  |  |  |                 primaryStat = this.statStrCurrent; | 
			
		
	
		
		
			
				
					
					|  |  |  |             }else{ |  |  |  |             }else{ | 
			
		
	
	
		
		
			
				
					|  |  | @ -3953,6 +4169,7 @@ public class PlayerCharacter extends AbstractCharacter { | 
			
		
	
		
		
			
				
					
					|  |  |  |                 float neg_Bonus = this.bonuses.getFloatPercentNegative(ModType.OCV, SourceType.None); |  |  |  |                 float neg_Bonus = this.bonuses.getFloatPercentNegative(ModType.OCV, SourceType.None); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |                 atr *= (1 + neg_Bonus); |  |  |  |                 atr *= (1 + neg_Bonus); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |             } |  |  |  |             } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |             atr = (atr < 1) ? 1 : atr; |  |  |  |             atr = (atr < 1) ? 1 : atr; | 
			
		
	
	
		
		
			
				
					|  |  | @ -4086,6 +4303,10 @@ public class PlayerCharacter extends AbstractCharacter { | 
			
		
	
		
		
			
				
					
					|  |  |  |             this.maxDamageHandTwo = (int) maxDamage; |  |  |  |             this.maxDamageHandTwo = (int) maxDamage; | 
			
		
	
		
		
			
				
					
					|  |  |  |             this.speedHandTwo = speed; |  |  |  |             this.speedHandTwo = speed; | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         this.calculateATR(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         this.calculateDamage(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         this.calculateSpeed(); | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     /** |  |  |  |     /** | 
			
		
	
	
		
		
			
				
					|  |  | @ -4107,9 +4328,15 @@ public class PlayerCharacter extends AbstractCharacter { | 
			
		
	
		
		
			
				
					
					|  |  |  |         float def = ab.getDefense(); |  |  |  |         float def = ab.getDefense(); | 
			
		
	
		
		
			
				
					
					|  |  |  |         //apply item defense bonuses
 |  |  |  |         //apply item defense bonuses
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (shield != null) { |  |  |  |         if (shield != null) { | 
			
		
	
		
		
			
				
					
					|  |  |  |             def += shield.getBonus(ModType.DR, SourceType.None); |  |  |  |             //def += shield.getBonus(ModType.DR, SourceType.None);
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             def *= (1 + shield.getBonusPercent(ModType.DR, SourceType.None)); |  |  |  |             //def *= (1 + shield.getBonusPercent(ModType.DR, SourceType.None));
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |             for(Effect eff : shield.effects.values()) { | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 for (AbstractEffectModifier mod : eff.getEffectModifiers()) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                     if (mod.modType.equals(ModType.DR)) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                         def += mod.minMod * (1 + (eff.getTrains() * mod.getRamp())); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             } | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         // float val = ((float)ab.getDefense()) * (1 + (skillMod / 100));
 |  |  |  |         // float val = ((float)ab.getDefense()) * (1 + (skillMod / 100));
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -4167,8 +4394,10 @@ public class PlayerCharacter extends AbstractCharacter { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (!ib.getType().equals(ItemType.ARMOR)) |  |  |  |         if (!ib.getType().equals(ItemType.ARMOR)) | 
			
		
	
		
		
			
				
					
					|  |  |  |             return 0; |  |  |  |             return 0; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (ib.getSkillRequired().isEmpty()) |  |  |  |         if (ib.getSkillRequired().isEmpty()) | 
			
		
	
		
		
			
				
					
					|  |  |  |             return ib.getDefense(); |  |  |  |             return ib.getDefense(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         CharacterSkill armorSkill = this.skills.get(ib.getSkillRequired()); |  |  |  |         CharacterSkill armorSkill = this.skills.get(ib.getSkillRequired()); | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (armorSkill == null) { |  |  |  |         if (armorSkill == null) { | 
			
		
	
		
		
			
				
					
					|  |  |  |             Logger.error("Player " + this.getObjectUUID() |  |  |  |             Logger.error("Player " + this.getObjectUUID() | 
			
		
	
	
		
		
			
				
					|  |  | @ -4179,8 +4408,18 @@ public class PlayerCharacter extends AbstractCharacter { | 
			
		
	
		
		
			
				
					
					|  |  |  |         float def = ib.getDefense(); |  |  |  |         float def = ib.getDefense(); | 
			
		
	
		
		
			
				
					
					|  |  |  |         //apply item defense bonuses
 |  |  |  |         //apply item defense bonuses
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (armor != null) { |  |  |  |         if (armor != null) { | 
			
		
	
		
		
			
				
					
					|  |  |  |             def += armor.getBonus(ModType.DR, SourceType.None); |  |  |  | 
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             def *= (1 + armor.getBonusPercent(ModType.DR, SourceType.None)); |  |  |  |             for(Effect eff : armor.effects.values()){ | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 for(AbstractEffectModifier mod : eff.getEffectModifiers()){ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                     if(mod.modType.equals(ModType.DR)){ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                         def += mod.minMod * (1+(eff.getTrains() * mod.getRamp())); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             //def += armor.getBonus(ModType.DR, SourceType.None);
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             //def *= (1 + armor.getBonusPercent(ModType.DR, SourceType.None));
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | 
 |