|  |  | @ -527,7 +527,7 @@ public class PlayerCombatStats { | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |         for(String armorUsed : armorsUsed){ |  |  |  |         for(String armorUsed : armorsUsed){ | 
			
		
	
		
		
			
				
					
					|  |  |  |             if(this.owner.skills.containsKey(armorUsed)) { |  |  |  |             if(this.owner.skills.containsKey(armorUsed)) { | 
			
		
	
		
		
			
				
					
					|  |  |  |                 armorSkill += calculateModifiedSkill(armorUsed,this.owner); |  |  |  |                 armorSkill += calculateBuffedSkillLevel(armorUsed,this.owner); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |             } |  |  |  |             } | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |         if(armorsUsed.size() > 0) |  |  |  |         if(armorsUsed.size() > 0) | 
			
		
	
	
		
		
			
				
					|  |  | @ -535,7 +535,7 @@ public class PlayerCombatStats { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         float blockSkill = 0.0f; |  |  |  |         float blockSkill = 0.0f; | 
			
		
	
		
		
			
				
					
					|  |  |  |         if(this.owner.skills.containsKey("Block")) |  |  |  |         if(this.owner.skills.containsKey("Block")) | 
			
		
	
		
		
			
				
					
					|  |  |  |             blockSkill = calculateModifiedSkill("Block",this.owner); |  |  |  |             blockSkill = calculateBuffedSkillLevel("Block",this.owner); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         float shieldDefense = 0.0f; |  |  |  |         float shieldDefense = 0.0f; | 
			
		
	
		
		
			
				
					
					|  |  |  |         if(this.owner.charItemManager.getEquipped(2) != null && this.owner.charItemManager.getEquipped(2).getItemBase().isShield()){ |  |  |  |         if(this.owner.charItemManager.getEquipped(2) != null && this.owner.charItemManager.getEquipped(2).getItemBase().isShield()){ | 
			
		
	
	
		
		
			
				
					|  |  | @ -631,85 +631,6 @@ public class PlayerCombatStats { | 
			
		
	
		
		
			
				
					
					|  |  |  |         this.defense = (int) defense; |  |  |  |         this.defense = (int) defense; | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     public static float calculateModifiedSkill(String skillName, PlayerCharacter pc) { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         CharacterSkill skill = null; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (pc.skills.containsKey(skillName)) { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             skill = pc.skills.get(skillName); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         SkillsBase skillBase = skill.getSkillsBase(); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if(skillBase == null) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             return 0; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         //Get any rune bonus
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         float bonus = 0f; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (pc.getBonuses() != null) { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             //Get bonuses from runes
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             bonus = pc.getBonuses().getSkillBonus(skillBase.sourceType); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         //Get Base skill for modified stats
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         float base = 7f; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if(skillBase.getToken() == -660435875){ |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             base = 0; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         float statMod = 0.5f; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (skillBase.getStrMod() > 0) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             statMod += (float) skillBase.getStrMod() * (float) pc.getStatStrCurrent() / 100f; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (skillBase.getDexMod() > 0) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             statMod += (float) skillBase.getDexMod() * (float) getDexAfterPenalty(pc) / 100f; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (skillBase.getConMod() > 0) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             statMod += (float) skillBase.getConMod() * (float) pc.getStatConCurrent() / 100f; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (skillBase.getIntMod() > 0) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             statMod += (float) skillBase.getIntMod() * (float) pc.getStatIntCurrent() / 100f; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (skillBase.getSpiMod() > 0) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             statMod += (float) skillBase.getSpiMod() * (float) pc.getStatSpiCurrent() / 100f; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (statMod < 1) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             statMod = 1f; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if(skillBase.getToken() == -660435875){ |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             statMod = 0; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         base += CharacterSkill.baseSkillValues[(int) statMod]; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         Enum.SourceType sourceType = Enum.SourceType.GetSourceType(skillBase.getNameNoSpace()); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         //Get any rune, effect and item bonus
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (pc.getBonuses() != null) { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             //add bonuses from effects/items and runes
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             base += bonus + pc.getBonuses().getFloat(Enum.ModType.Skill, sourceType); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         float baseAmount; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (base < 1f && skillBase.getToken() != -660435875) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             baseAmount = 1f; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         else |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             baseAmount = base; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         int amount; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         int trains = skill.getNumTrains(); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (trains < 10) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             amount = (trains * 2); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         else if (trains < 90) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             amount = 10 + trains; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         else if (trains < 134) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             amount = 100 + ((trains - 90) / 2); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         else |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             amount = 122 + ((trains - 134) / 3); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         float modAmount = baseAmount + amount; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (pc.getBonuses() != null) { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             //Multiply any percent bonuses
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             modAmount *= (1 + pc.getBonuses().getFloatPercentAll(Enum.ModType.Skill, sourceType)); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         float modifiedAmount = (float) Math.round(modAmount); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         return modifiedAmount; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     public static int getDexAfterPenalty(PlayerCharacter pc){ |  |  |  |     public static int getDexAfterPenalty(PlayerCharacter pc){ | 
			
		
	
		
		
			
				
					
					|  |  |  |         if(pc.charItemManager == null) |  |  |  |         if(pc.charItemManager == null) | 
			
		
	
		
		
			
				
					
					|  |  |  |             return pc.statDexCurrent; |  |  |  |             return pc.statDexCurrent; | 
			
		
	
	
		
		
			
				
					|  |  | @ -776,4 +697,83 @@ public class PlayerCombatStats { | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |         return (def * (1 + ((int) armorSkill.getModifiedAmount() / 50f))); |  |  |  |         return (def * (1 + ((int) armorSkill.getModifiedAmount() / 50f))); | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     public static int calculateBaseSkillLevel(String skillName, PlayerCharacter pc){ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         //calculates the base level of any skill
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if(!pc.skills.containsKey(skillName)) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             return 0; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         CharacterSkill skill = pc.skills.get(skillName); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         SkillsBase skillBase = skill.getSkillsBase(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         //get amounts from skills
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         float level  = 0; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         level  += pc.statStrBase * skillBase.getStrMod(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         level  += pc.statDexBase * skillBase.getDexMod(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         level  += pc.statIntBase * skillBase.getIntMod(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         level  += pc.statConBase * skillBase.getConMod(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         level  += pc.statSpiBase * skillBase.getSpiMod(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         level = level / 100; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         //get amounts from trains
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         int amount; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         int trains = skill.getNumTrains(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if (trains < 10) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             amount = (trains * 2); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         else if (trains < 90) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             amount = 10 + trains; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         else if (trains < 134) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             amount = 100 + ((trains - 90) / 2); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         else | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             amount = 122 + ((trains - 134) / 3); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         level += amount; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         //add any bonuses to the skill
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         Enum.SourceType sourceType = Enum.SourceType.GetSourceType(skillBase.getNameNoSpace()); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if(sourceType != null && pc.bonuses != null) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             level += pc.bonuses.getFloat(Enum.ModType.Skill, sourceType); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             level *= (1 + pc.bonuses.getFloatPercentAll(Enum.ModType.Skill, sourceType)); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         return Math.round(level); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     public static int calculateBuffedSkillLevel(String skillName, PlayerCharacter pc){ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         //calculates the "current" or modified level of any skill
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if(!pc.skills.containsKey(skillName)) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             return 0; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         CharacterSkill skill = pc.skills.get(skillName); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         SkillsBase skillBase = skill.getSkillsBase(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         //get amounts from skills
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         float level  = 0; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         level  += pc.statStrCurrent * skillBase.getStrMod(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         level  += getDexAfterPenalty(pc) * skillBase.getDexMod(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         level  += pc.statIntCurrent * skillBase.getIntMod(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         level  += pc.statConCurrent * skillBase.getConMod(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         level  += pc.statSpiCurrent * skillBase.getSpiMod(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         level = level / 100; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         //get amounts from trains
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         int amount; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         int trains = skill.getNumTrains(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if (trains < 10) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             amount = (trains * 2); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         else if (trains < 90) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             amount = 10 + trains; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         else if (trains < 134) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             amount = 100 + ((trains - 90) / 2); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         else | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             amount = 122 + ((trains - 134) / 3); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         level += amount; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         //add any bonuses to the skill
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         Enum.SourceType sourceType = Enum.SourceType.GetSourceType(skillBase.getNameNoSpace()); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if(sourceType != null && pc.bonuses != null) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             level += pc.bonuses.getFloat(Enum.ModType.Skill, sourceType); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             level *= (1 + pc.bonuses.getFloatPercentAll(Enum.ModType.Skill, sourceType)); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         return Math.round(level); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
	
		
		
			
				
					|  |  | 
 |