Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package org.fury.rs2.model.content.combat.melee;
- import org.fury.rs2.model.container.Equipment;
- import org.fury.rs2.model.content.combat.AbstractCombat.AttackType;
- import org.fury.rs2.model.content.combat.PrayerHandler.Prayer;
- import org.fury.rs2.model.content.skill.SkillConstants;
- import org.fury.rs2.model.player.Player;
- /**
- * Calculates the melee bonuses
- *
- * @author Arithium
- *
- */
- public class MeleeCalculations {
- public static int calculateMeleeMaxHit(Player player, boolean special) {
- double specialMultiplier = 1;
- double prayerMultiplier = 1;
- double strengthBonus = player.getBonuses()[10];
- int strengthLevel = player.getSkills().getLevel(SkillConstants.STRENGTH);
- int combatStyleBonus = weaponBonus(player);
- int currentHitpoints = player.getSkills().getLevel(SkillConstants.HITPOINTS);
- int maximumHitpoints = player.getSkills().getLevelForExperience(SkillConstants.HITPOINTS);
- if (player.isActivePrayer(Prayer.BURST_OF_STRENGTH)) {
- prayerMultiplier = 1.05;
- } else if (player.isActivePrayer(Prayer.SUPERHUMAN_STRENGTH)) {
- prayerMultiplier = 1.1;
- } else if (player.isActivePrayer(Prayer.ULTIMATE_STRENGTH)) {
- prayerMultiplier = 1.15;
- } else if (player.isActivePrayer(Prayer.CHIVALRY)) {
- prayerMultiplier = 1.18;
- } else if (player.isActivePrayer(Prayer.PIETY)) {
- prayerMultiplier = 1.23;
- }
- int effectiveStrengthDamage = (int) ((strengthLevel * prayerMultiplier) + combatStyleBonus);
- double base = (13 + effectiveStrengthDamage + (strengthBonus / 8) + ((effectiveStrengthDamage * strengthBonus) * 0.016865)) / 10;
- if (Equipment.fullDharok(player)) {
- double dharokEffect = ((maximumHitpoints - currentHitpoints) * 0.01) + 1;
- base *= dharokEffect;
- }
- if (special) {
- switch (player.getEquipment().get(3).getId()) {
- case 3101:
- case 3204:
- case 1215:
- case 1231:
- case 5680:
- case 5698:
- case 11694:
- specialMultiplier = 1.1;
- break;
- case 1305:
- specialMultiplier = 1.15;
- break;
- case 1434:
- specialMultiplier = 1.45;
- break;
- }
- base *= specialMultiplier;
- }
- if (Equipment.wearingFullVoid(player, AttackType.MELEE)) {
- base *= 1.05;
- }
- return (int) Math.floor(base);
- }
- public static final int weaponBonus(Player player) {
- switch (player.getCombat().getAttackStyle()) {
- case AGGRESSIVE:
- return 3;
- case CONTROLLED:
- return 1;
- default:
- break;
- }
- return 0;
- }
- public static int bestMeleeDef(Player player) {
- if (player.getBonuses()[5] > player.getBonuses()[6] && player.getBonuses()[5] > player.getBonuses()[7]) {
- return 5;
- }
- if (player.getBonuses()[6] > player.getBonuses()[5] && player.getBonuses()[6] > player.getBonuses()[7]) {
- return 6;
- }
- return player.getBonuses()[7] <= player.getBonuses()[5] || player.getBonuses()[7] <= player.getBonuses()[6] ? 5 : 7;
- }
- public static int calculateMeleeDefence(Player player) {
- int defenceLevel = player.getSkills().getLevel(1);
- int i = player.getBonuses()[bestMeleeDef(player)];
- if (player.isActivePrayer(Prayer.THICK_SKIN)) {
- defenceLevel += player.getSkills().getLevelForExperience(SkillConstants.DEFENCE) * 0.05;
- } else if (player.isActivePrayer(Prayer.ROCK_SKIN)) {
- defenceLevel += player.getSkills().getLevelForExperience(SkillConstants.DEFENCE) * 0.1;
- } else if (player.isActivePrayer(Prayer.STEEL_SKIN)) {
- defenceLevel += player.getSkills().getLevelForExperience(SkillConstants.DEFENCE) * 0.15;
- } else if (player.isActivePrayer(Prayer.CHIVALRY)) {
- defenceLevel += player.getSkills().getLevelForExperience(SkillConstants.DEFENCE) * 0.20;
- } else if (player.isActivePrayer(Prayer.PIETY)) {
- defenceLevel += player.getSkills().getLevelForExperience(SkillConstants.DEFENCE) * 0.25;
- }
- return (int) (defenceLevel + (defenceLevel * 0.15) + (i + i * 0.05));
- }
- public static int bestMeleeAtk(Player player) {
- if (player.getBonuses()[0] > player.getBonuses()[1] && player.getBonuses()[0] > player.getBonuses()[2]) {
- return 0;
- }
- if (player.getBonuses()[1] > player.getBonuses()[0] && player.getBonuses()[1] > player.getBonuses()[2]) {
- return 1;
- }
- return player.getBonuses()[2] <= player.getBonuses()[1] || player.getBonuses()[2] <= player.getBonuses()[0] ? 0 : 2;
- }
- public static int calculateMeleeAttack(Player player, boolean special) {
- int attackLevel = player.getSkills().getLevel(0);
- double specialMultiplier = 1.0;
- if (player.isActivePrayer(Prayer.CLARITY_OF_THOUGHT)) {
- attackLevel += player.getSkills().getLevelForExperience(SkillConstants.ATTACK) * 1.05;
- } else if (player.isActivePrayer(Prayer.IMPROVED_REFLEXES)) {
- attackLevel += player.getSkills().getLevelForExperience(SkillConstants.ATTACK) * 1.1;
- } else if (player.isActivePrayer(Prayer.INCREDIBLE_REFLEXES)) {
- attackLevel += player.getSkills().getLevelForExperience(SkillConstants.ATTACK) * 1.15;
- } else if (player.isActivePrayer(Prayer.CHIVALRY)) {
- attackLevel += player.getSkills().getLevelForExperience(SkillConstants.ATTACK) * 1.15;
- } else if (player.isActivePrayer(Prayer.PIETY)) {
- attackLevel += player.getSkills().getLevelForExperience(SkillConstants.ATTACK) * 1.20;
- }
- if (special) {
- switch (player.getEquipment().get(3).getId()) {
- case 3101:
- case 3204:
- case 1215:
- case 1231:
- case 5680:
- case 5698:
- case 11694:
- specialMultiplier = 1.1;
- break;
- case 1305:
- specialMultiplier = 1.15;
- break;
- case 1434:
- specialMultiplier = 1.45;
- break;
- }
- }
- attackLevel *= specialMultiplier;
- double i = player.getBonuses()[bestMeleeAtk(player)];
- if (Equipment.wearingFullVoid(player, AttackType.MELEE)) {
- i *= 1.1;
- }
- int outcome = (int) (attackLevel + (attackLevel * 0.15) + (i + i * 0.05));
- return outcome;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment