54 public static final SecureRandom srand =
new SecureRandom();
56 public static boolean successful(
Mob attacker,
Mob defender) {
57 double attackRoll = getAttackRoll(attacker);
58 double defenceRoll = getDefenceRoll(defender);
61 if (attackRoll > defenceRoll)
62 chance = 1D - (defenceRoll + 2D) / (2D * (attackRoll + 1D));
64 chance = attackRoll / (2D * (defenceRoll + 1D));
66 double roll = srand.nextDouble();
72 public static double getDefenceRoll(
Mob defender) {
74 double defenceBonus = getDefenceBonus(defender);
76 if (defender instanceof
Player) {
77 defenceLevel *= getPrayerDefenseBonus(defender);
79 switch (defender.
getCombat().getFightType().getStyle()) {
80 case DEFENSIVE -> defenceLevel += 3;
81 case CONTROLLED -> defenceLevel += 1;
87 return defenceLevel * (defenceBonus + 64);
90 public static double getAttackRoll(
Mob attacker) {
91 double effectiveLevel = getEffectiveLevel(attacker);
92 double attackBonus = getAttackBonus(attacker);
94 double roll = effectiveLevel * (attackBonus + 64);
96 if (attacker instanceof
Player player) {
100 return Math.floor(roll);
103 public static double getEffectiveLevel(
Mob attacker) {
105 if (attacker instanceof
Player) {
106 effectiveLevel *= getPrayerAttackBonus(attacker);
107 effectiveLevel = Math.floor(effectiveLevel);
109 switch (attacker.
getCombat().getFightType().getStyle()) {
110 case ACCURATE -> effectiveLevel += 3;
111 case CONTROLLED -> effectiveLevel += 1;
116 if (attacker instanceof
Player player) {
118 effectiveLevel *= 1.10;
122 return Math.floor(effectiveLevel);
125 private static double getPrayerDefenseBonus(
Mob defender) {
126 double prayerBonus = 1;
128 prayerBonus += 1.05D;
130 prayerBonus += 1.10D;
132 prayerBonus += 1.15D;
134 prayerBonus += 1.20D;
136 prayerBonus += 1.25D;
140 private static int getDefenceBonus(
Mob defender) {
141 return defender.getBonus(defender.
getCombat().getFightType().getCorrespondingBonus());
144 private static int getAttackBonus(
Mob attacker) {
145 return attacker.getBonus(attacker.
getCombat().getFightType().getBonus());
148 private static double getPrayerAttackBonus(
Mob attacker) {
149 double prayerBonus = 1;
151 prayerBonus += 1.05D;
153 prayerBonus += 1.10D;
155 prayerBonus += 1.15D;
157 prayerBonus += 1.20D;
159 prayerBonus += 1.25D;