diff --git a/src/engine/gameManager/CombatManager.java b/src/engine/gameManager/CombatManager.java index d3839df1..7c1482c2 100644 --- a/src/engine/gameManager/CombatManager.java +++ b/src/engine/gameManager/CombatManager.java @@ -660,32 +660,11 @@ public enum CombatManager { //calculate hit/miss - //int roll = ThreadLocalRandom.current().nextInt(100); DeferredPowerJob dpj = null; - int max = (int)atr; - if(max < 10) - max = 10; - int min = (int)(max * 0.5f); - if(max < min){ - min = max - 1; - } - int atrRoll = ThreadLocalRandom.current().nextInt(min,max); - int defRoll = 0; - if(AbstractCharacter.IsAbstractCharacter(target)){ - AbstractCharacter tar = (AbstractCharacter) target; - max = tar.defenseRating; - if(max < 1) - max = 10; - min = (int)(max * 0.5f); - if(max < min){ - min = max - 1; - } - defRoll = ThreadLocalRandom.current().nextInt(min,max); - } - if (atrRoll > defRoll) { + if (LandHit((int)atr,(int)defense)) { if (ac.getObjectType().equals(GameObjectType.PlayerCharacter)) updateAttackTimers((PlayerCharacter) ac, target, true); @@ -1464,4 +1443,12 @@ public enum CombatManager { ((AbstractCharacter) awo).getCharItemManager().damageRandomArmor(1); } + public static boolean LandHit(int atr, int defense){ + int roll = ThreadLocalRandom.current().nextInt(100); + float chance = (float)((atr-((atr+defense)*0.315))/((defense-((atr+defense)*0.315))+(atr-((atr+defense)*0.315)))); + boolean hit = false; + if(chance > roll) + hit = true; + return hit; + } } diff --git a/src/engine/gameManager/PowersManager.java b/src/engine/gameManager/PowersManager.java index e198d15e..f4dbb6a1 100644 --- a/src/engine/gameManager/PowersManager.java +++ b/src/engine/gameManager/PowersManager.java @@ -2375,30 +2375,8 @@ public enum PowersManager { //} // calculate hit/miss - //int roll = ThreadLocalRandom.current().nextInt(100); - - boolean disable = true; - int max = (int)atr; - if(max < 10) - max = 10; - int min = (int)(max * 0.5f); - if(max < min){ - min = max - 1; - } - int atrRoll = ThreadLocalRandom.current().nextInt(min,max); - int defRoll = 0; - if(AbstractCharacter.IsAbstractCharacter(awo)){ - AbstractCharacter tar = (AbstractCharacter) awo; - max = tar.defenseRating; - if(max < 10) - max = 10; - min = (int)(max * 0.5f); - if(max < min){ - min = max - 1; - } - defRoll = ThreadLocalRandom.current().nextInt(min,max); - } - if (atrRoll > defRoll) { + + if (CombatManager.LandHit((int)atr,(int)defense)) { // Hit, check if dodge kicked in if (awo instanceof AbstractCharacter) { AbstractCharacter tarAc = (AbstractCharacter) awo; diff --git a/src/engine/mobileAI/utilities/CombatUtilities.java b/src/engine/mobileAI/utilities/CombatUtilities.java index fd52a2e3..7b1c2d29 100644 --- a/src/engine/mobileAI/utilities/CombatUtilities.java +++ b/src/engine/mobileAI/utilities/CombatUtilities.java @@ -139,37 +139,22 @@ public class CombatUtilities { } public static boolean triggerDefense(Mob agent, AbstractWorldObject target) { - int defenseScore = 0; - int attackScore = agent.getAtrHandOne(); + int defense = 0; + int atr = agent.getAtrHandOne(); switch (target.getObjectType()) { case PlayerCharacter: - defenseScore = ((AbstractCharacter) target).getDefenseRating(); + defense = ((AbstractCharacter) target).getDefenseRating(); break; case Mob: Mob mob = (Mob) target; if (mob.isSiege()) - defenseScore = attackScore; + defense = atr; break; case Building: return false; } - - int hitChance; - if (attackScore > defenseScore || defenseScore == 0) - hitChance = 94; - else if (attackScore == defenseScore && target.getObjectType() == GameObjectType.Mob) - hitChance = 10; - else { - float dif = attackScore / defenseScore; - if (dif <= 0.8f) - hitChance = 4; - else - hitChance = ((int) (450 * (dif - 0.8f)) + 4); - if (target.getObjectType() == GameObjectType.Building) - hitChance = 100; - } - return ThreadLocalRandom.current().nextInt(100) > hitChance; + return CombatManager.LandHit(atr,defense); } public static boolean triggerBlock(Mob agent, AbstractWorldObject ac) {