57 public static final SecureRandom srand =
new SecureRandom();
59 public static boolean successful(
Mob attacker,
Mob defender,
CombatType style) {
62 double successfulRoll;
63 double selectedChance = srand.nextDouble();
65 if (attackBonus > defenceBonus)
66 successfulRoll = 1D - (defenceBonus + 2D) / (2D * (attackBonus + 1D));
68 successfulRoll = attackBonus / (2D * (defenceBonus + 1D));
71 return successfulRoll > selectedChance;
74 public static double getPrayerAttackBonus(
Mob attacker) {
75 double prayerBonus = 1;
89 public static int getDefenceNpc(
Mob defender) {
90 return defender.getNpc().definition.
getSkills()[1];
93 public static double getEffectiveRanged(
Mob attacker,
CombatType style) {
94 double effectiveLevel = Math.floor(getRangeLevel(attacker)) * getPrayerAttackBonus(attacker);
98 effectiveLevel += 3.0D;
107 effectiveLevel *= 1.10D;
108 effectiveLevel = Math.floor(effectiveLevel);
111 if (((
Player) attacker).equipment.contains(
Items.SALVE_AMULET)) {
112 effectiveLevel *= 1.10D;
114 if (
Area.inWilderness(attacker)) {
115 if (((
Player) attacker).equipment.contains(22550)) {
116 effectiveLevel *= 1.50D;
119 if (attacker.
isNpc()) {
120 if (((
Player) attacker).equipment.contains(
Items.SLAYER_HELMET)) {
121 effectiveLevel *= 1.05D;
123 if (((
Player) attacker).equipment.contains(
Items.BLACK_SLAYER_HELMET) || ((
Player) attacker).equipment.contains(
Items.GREEN_SLAYER_HELMET) || ((
Player) attacker).equipment.contains(
Items.PURPLE_SLAYER_HELMET) || ((
Player) attacker).equipment.contains(
Items.RED_SLAYER_HELMET) || ((
Player) attacker).equipment.contains(21888)) {
124 effectiveLevel *= 1.10D;
129 return Math.floor(effectiveLevel);
132 public static double getEffectiveLevelDefender(
Mob defender) {
133 return getDefenceNpc(defender) + 9;
136 public static int getRangeLevel(
Mob attacker) {
138 if (attacker instanceof
Npc npc) {
139 if (npc.definition.getSkills() !=
null)
140 rangeLevel = npc.definition.getSkills()[4];
147 public static double twistedBowBonus(
Mob attacker,
Mob defender) {
149 double magicLevel = 1;
152 final Item weapon = player.equipment.getWeapon();
153 if (weapon !=
null) {
154 if (player.equipment.contains(20997)) {
156 if (defender instanceof
Npc n) {
157 if (n.definition.getSkills() !=
null)
160 magicLevel = getMagicLevel;
162 bonus += ((140 + (((10 * 3) * magicLevel) - 10) / 100D) - ((((3 * magicLevel) - 100D) * 2)) / 100D);
171 public static int getGearAttackBonus(
Mob attacker,
Mob defender,
CombatType style) {
174 bonus = attacker.getBonus(4);
176 if (attacker.getPlayer().equipment.contains(20997)) {
177 bonus *= twistedBowBonus(attacker, defender);
182 public static int getRangeDefenceLevelNpc(
Mob defender,
CombatType style) {
184 if (defender instanceof
Npc) {
186 bonus = defender.getNpc().getBonus(9);
192 public static double getAttackRoll(
Mob attacker,
Mob defender,
CombatType style) {
193 double effectiveRangeLevel = getEffectiveRanged(attacker, style);
195 double equipmentRangeBonus = getGearAttackBonus(attacker, defender, style);
197 double maxRoll = effectiveRangeLevel * (equipmentRangeBonus);
199 return (
int) (maxRoll);
202 public static double getDefenceRoll(
Mob defender,
CombatType style) {
203 double effectiveDefenceLevel = getEffectiveLevelDefender(defender);
205 int equipmentRangeBonus = getRangeDefenceLevelNpc(defender, style);
207 double maxRoll = effectiveDefenceLevel * (equipmentRangeBonus);
209 return (
int) maxRoll;