|  |  | @ -6,6 +6,7 @@ import engine.powers.EffectsBase; | 
			
		
	
		
		
			
				
					
					|  |  |  | import engine.powers.PowersBase; |  |  |  | import engine.powers.PowersBase; | 
			
		
	
		
		
			
				
					
					|  |  |  | import engine.powers.effectmodifiers.AbstractEffectModifier; |  |  |  | import engine.powers.effectmodifiers.AbstractEffectModifier; | 
			
		
	
		
		
			
				
					
					|  |  |  | import engine.server.MBServerStatics; |  |  |  | import engine.server.MBServerStatics; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | import org.pmw.tinylog.Logger; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | import java.math.BigDecimal; |  |  |  | import java.math.BigDecimal; | 
			
		
	
		
		
			
				
					
					|  |  |  | import java.math.RoundingMode; |  |  |  | import java.math.RoundingMode; | 
			
		
	
	
		
		
			
				
					|  |  | @ -384,9 +385,10 @@ public class PlayerCombatStats { | 
			
		
	
		
		
			
				
					
					|  |  |  |                     } |  |  |  |                     } | 
			
		
	
		
		
			
				
					
					|  |  |  |                 } |  |  |  |                 } | 
			
		
	
		
		
			
				
					
					|  |  |  |             } else { |  |  |  |             } else { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 try { | 
			
		
	
		
		
			
				
					
					|  |  |  |                     for (AbstractEffectModifier mod : this.owner.effects.get(effID).getEffectModifiers()) { |  |  |  |                     for (AbstractEffectModifier mod : this.owner.effects.get(effID).getEffectModifiers()) { | 
			
		
	
		
		
			
				
					
					|  |  |  |                         if (mod.modType.equals(Enum.ModType.OCV)) { |  |  |  |                         if (mod.modType.equals(Enum.ModType.OCV)) { | 
			
		
	
		
		
			
				
					
					|  |  |  |                         if(mod.getPercentMod() == 0) { |  |  |  |                             if (mod.getPercentMod() == 0) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |                                 float value = mod.getMinMod(); |  |  |  |                                 float value = mod.getMinMod(); | 
			
		
	
		
		
			
				
					
					|  |  |  |                                 int trains = this.owner.effects.get(effID).getTrains(); |  |  |  |                                 int trains = this.owner.effects.get(effID).getTrains(); | 
			
		
	
		
		
			
				
					
					|  |  |  |                                 float modValue = value + (trains * mod.getRamp()); |  |  |  |                                 float modValue = value + (trains * mod.getRamp()); | 
			
		
	
	
		
		
			
				
					|  |  | @ -394,6 +396,9 @@ public class PlayerCombatStats { | 
			
		
	
		
		
			
				
					
					|  |  |  |                             } |  |  |  |                             } | 
			
		
	
		
		
			
				
					
					|  |  |  |                         } |  |  |  |                         } | 
			
		
	
		
		
			
				
					
					|  |  |  |                     } |  |  |  |                     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 }catch(Exception e){ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                     //Logger.error(e.getMessage());
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 } | 
			
		
	
		
		
			
				
					
					|  |  |  |             } |  |  |  |             } | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -434,16 +439,35 @@ public class PlayerCombatStats { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |             atr *= 1.0f + stanceValue; |  |  |  |             atr *= 1.0f + stanceValue; | 
			
		
	
		
		
			
				
					
					|  |  |  |         if(this.owner.bonuses != null) { |  |  |  |         if(this.owner.bonuses != null) { | 
			
		
	
		
		
			
				
					
					|  |  |  |             float positivePercentBonuses = this.owner.bonuses.getFloatPercentPositive(Enum.ModType.OCV, Enum.SourceType.None) - stanceValue; |  |  |  | 
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             float negativePercentBonuses = this.owner.bonuses.getFloatPercentNegative(Enum.ModType.OCV, Enum.SourceType.None); |  |  |  | 
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             float modifier = 1 + (positivePercentBonuses + negativePercentBonuses); |  |  |  | 
 | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             //float positivePercentBonuses = this.owner.bonuses.getFloatPercentPositive(Enum.ModType.OCV, Enum.SourceType.None) - stanceValue;
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             //float negativePercentBonuses = this.owner.bonuses.getFloatPercentNegative(Enum.ModType.OCV, Enum.SourceType.None);
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             //float modifier = 1 + (positivePercentBonuses + negativePercentBonuses);
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             float modifier = this.owner.bonuses.getFloatPercentAll(Enum.ModType.OCV, Enum.SourceType.None); | 
			
		
	
		
		
			
				
					
					|  |  |  |             if(preciseRune > 1.0f) |  |  |  |             if(preciseRune > 1.0f) | 
			
		
	
		
		
			
				
					
					|  |  |  |                 modifier -= 0.05f; |  |  |  |                 modifier -= 0.05f; | 
			
		
	
		
		
			
				
					
					|  |  |  |             if(stanceValue > 0.0f){ |  |  |  |             if(stanceValue != 0.0f){ | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |                 modifier -= (stanceValue); |  |  |  |                 modifier -= (stanceValue); | 
			
		
	
		
		
			
				
					
					|  |  |  |             } |  |  |  |             } | 
			
		
	
		
		
			
				
					
					|  |  |  |             modifier -= healerDefStance; |  |  |  |             modifier -= healerDefStance; | 
			
		
	
		
		
			
				
					
					|  |  |  |             atr *= modifier; |  |  |  |             modifier += 1.0f; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             float weaponMoveBonus = 0.0f; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             if(this.owner.effects != null){ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 if(this.owner.effects.containsKey("WeaponMove")){ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                     Effect eff = this.owner.effects.get("WeaponMove"); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                     for(AbstractEffectModifier mod : eff.getEffectModifiers()){ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                         if(mod.modType.equals(Enum.ModType.OCV)){ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                             float min = mod.getPercentMod(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                             float ramp = mod.getRamp() * eff.getTrains(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                             weaponMoveBonus += (min + ramp) * 0.01f; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             atr *= modifier - weaponMoveBonus; | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |             atr = (float) Math.round(atr); |  |  |  |             atr = (float) Math.round(atr); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -1056,15 +1080,28 @@ public class PlayerCombatStats { | 
			
		
	
		
		
			
				
					
					|  |  |  |         atr += (modifiedDexterity * 0.5f) + weaponATR1 + weaponATR2; |  |  |  |         atr += (modifiedDexterity * 0.5f) + weaponATR1 + weaponATR2; | 
			
		
	
		
		
			
				
					
					|  |  |  |         atr *= precise; |  |  |  |         atr *= precise; | 
			
		
	
		
		
			
				
					
					|  |  |  |         atr += atrBuffs; |  |  |  |         atr += atrBuffs; | 
			
		
	
		
		
			
				
					
					|  |  |  |         if(pc.getWeaponPower() != null){ |  |  |  | 
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             DeferredPowerJob dpj = pc.getWeaponPower(); |  |  |  |         float weaponMoveBonus = 0.0f; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             dpj.endEffect(); |  |  |  |         if(pc.effects != null){ | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             if(pc.effects.containsKey("WeaponMove")){ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 Effect eff = pc.effects.get("WeaponMove"); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 for(AbstractEffectModifier mod : eff.getEffectModifiers()){ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                     if(mod.modType.equals(Enum.ModType.OCV)){ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                         float min = mod.getPercentMod(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                         float ramp = mod.getRamp() * eff.getTrains(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                         weaponMoveBonus += (min + ramp) * 0.01f; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             } | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         float subtraction = (stanceMod - 1) - (precise - 1) - healerDefStance; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         float bonuses = 0.0f; | 
			
		
	
		
		
			
				
					
					|  |  |  |         if(pc.bonuses != null) |  |  |  |         if(pc.bonuses != null) | 
			
		
	
		
		
			
				
					
					|  |  |  |             atr *= 1 + (pc.bonuses.getFloatPercentAll(Enum.ModType.OCV, Enum.SourceType.None) - (stanceMod - 1) - (precise - 1) - healerDefStance); |  |  |  |             bonuses = pc.bonuses.getFloatPercentAll(Enum.ModType.OCV, Enum.SourceType.None) - subtraction - weaponMoveBonus; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         atr *= stanceMod; |  |  |  |         atr *= 1+ bonuses; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         atr *= stanceMod - healerDefStance; | 
			
		
	
		
		
			
				
					
					|  |  |  |         return atr; |  |  |  |         return atr; | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | 
 |