Guest User

Untitled

a guest
Jan 30th, 2014
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.76 KB | None | 0 0
  1. package org.fury.rs2.model.content.combat.melee;
  2.  
  3. import org.fury.rs2.model.container.Equipment;
  4. import org.fury.rs2.model.content.combat.AbstractCombat.AttackType;
  5. import org.fury.rs2.model.content.combat.PrayerHandler.Prayer;
  6. import org.fury.rs2.model.content.skill.SkillConstants;
  7. import org.fury.rs2.model.player.Player;
  8.  
  9. /**
  10.  * Calculates the melee bonuses
  11.  *
  12.  * @author Arithium
  13.  *
  14.  */
  15. public class MeleeCalculations {
  16.  
  17.     public static int calculateMeleeMaxHit(Player player, boolean special) {
  18.         double specialMultiplier = 1;
  19.         double prayerMultiplier = 1;
  20.         double strengthBonus = player.getBonuses()[10];
  21.         int strengthLevel = player.getSkills().getLevel(SkillConstants.STRENGTH);
  22.         int combatStyleBonus = weaponBonus(player);
  23.         int currentHitpoints = player.getSkills().getLevel(SkillConstants.HITPOINTS);
  24.         int maximumHitpoints = player.getSkills().getLevelForExperience(SkillConstants.HITPOINTS);
  25.  
  26.         if (player.isActivePrayer(Prayer.BURST_OF_STRENGTH)) {
  27.             prayerMultiplier = 1.05;
  28.         } else if (player.isActivePrayer(Prayer.SUPERHUMAN_STRENGTH)) {
  29.             prayerMultiplier = 1.1;
  30.         } else if (player.isActivePrayer(Prayer.ULTIMATE_STRENGTH)) {
  31.             prayerMultiplier = 1.15;
  32.         } else if (player.isActivePrayer(Prayer.CHIVALRY)) {
  33.             prayerMultiplier = 1.18;
  34.         } else if (player.isActivePrayer(Prayer.PIETY)) {
  35.             prayerMultiplier = 1.23;
  36.         }
  37.  
  38.         int effectiveStrengthDamage = (int) ((strengthLevel * prayerMultiplier) + combatStyleBonus);
  39.         double base = (13 + effectiveStrengthDamage + (strengthBonus / 8) + ((effectiveStrengthDamage * strengthBonus) * 0.016865)) / 10;
  40.        
  41.         if (Equipment.fullDharok(player)) {
  42.             double dharokEffect = ((maximumHitpoints - currentHitpoints) * 0.01) + 1;
  43.             base *= dharokEffect;
  44.         }
  45.  
  46.         if (special) {
  47.             switch (player.getEquipment().get(3).getId()) {
  48.             case 3101:
  49.             case 3204:
  50.             case 1215:
  51.             case 1231:
  52.             case 5680:
  53.             case 5698:
  54.             case 11694:
  55.                 specialMultiplier = 1.1;
  56.                 break;
  57.             case 1305:
  58.                 specialMultiplier = 1.15;
  59.                 break;
  60.             case 1434:
  61.                 specialMultiplier = 1.45;
  62.                 break;
  63.             }
  64.             base *= specialMultiplier;
  65.         }
  66.        
  67.         if (Equipment.wearingFullVoid(player, AttackType.MELEE)) {
  68.             base *= 1.05;
  69.         }
  70.         return (int) Math.floor(base);
  71.     }
  72.  
  73.     public static final int weaponBonus(Player player) {
  74.         switch (player.getCombat().getAttackStyle()) {
  75.         case AGGRESSIVE:
  76.             return 3;
  77.         case CONTROLLED:
  78.             return 1;
  79.         default:
  80.             break;
  81.         }
  82.         return 0;
  83.     }
  84.  
  85.     public static int bestMeleeDef(Player player) {
  86.         if (player.getBonuses()[5] > player.getBonuses()[6] && player.getBonuses()[5] > player.getBonuses()[7]) {
  87.             return 5;
  88.         }
  89.         if (player.getBonuses()[6] > player.getBonuses()[5] && player.getBonuses()[6] > player.getBonuses()[7]) {
  90.             return 6;
  91.         }
  92.         return player.getBonuses()[7] <= player.getBonuses()[5] || player.getBonuses()[7] <= player.getBonuses()[6] ? 5 : 7;
  93.     }
  94.  
  95.     public static int calculateMeleeDefence(Player player) {
  96.         int defenceLevel = player.getSkills().getLevel(1);
  97.         int i = player.getBonuses()[bestMeleeDef(player)];
  98.         if (player.isActivePrayer(Prayer.THICK_SKIN)) {
  99.             defenceLevel += player.getSkills().getLevelForExperience(SkillConstants.DEFENCE) * 0.05;
  100.         } else if (player.isActivePrayer(Prayer.ROCK_SKIN)) {
  101.             defenceLevel += player.getSkills().getLevelForExperience(SkillConstants.DEFENCE) * 0.1;
  102.         } else if (player.isActivePrayer(Prayer.STEEL_SKIN)) {
  103.             defenceLevel += player.getSkills().getLevelForExperience(SkillConstants.DEFENCE) * 0.15;
  104.         } else if (player.isActivePrayer(Prayer.CHIVALRY)) {
  105.             defenceLevel += player.getSkills().getLevelForExperience(SkillConstants.DEFENCE) * 0.20;
  106.         } else if (player.isActivePrayer(Prayer.PIETY)) {
  107.             defenceLevel += player.getSkills().getLevelForExperience(SkillConstants.DEFENCE) * 0.25;
  108.         }
  109.         return (int) (defenceLevel + (defenceLevel * 0.15) + (i + i * 0.05));
  110.     }
  111.  
  112.     public static int bestMeleeAtk(Player player) {
  113.         if (player.getBonuses()[0] > player.getBonuses()[1] && player.getBonuses()[0] > player.getBonuses()[2]) {
  114.             return 0;
  115.         }
  116.         if (player.getBonuses()[1] > player.getBonuses()[0] && player.getBonuses()[1] > player.getBonuses()[2]) {
  117.             return 1;
  118.         }
  119.         return player.getBonuses()[2] <= player.getBonuses()[1] || player.getBonuses()[2] <= player.getBonuses()[0] ? 0 : 2;
  120.     }
  121.  
  122.     public static int calculateMeleeAttack(Player player, boolean special) {
  123.         int attackLevel = player.getSkills().getLevel(0);
  124.         double specialMultiplier = 1.0;
  125.         if (player.isActivePrayer(Prayer.CLARITY_OF_THOUGHT)) {
  126.             attackLevel += player.getSkills().getLevelForExperience(SkillConstants.ATTACK) * 1.05;
  127.         } else if (player.isActivePrayer(Prayer.IMPROVED_REFLEXES)) {
  128.             attackLevel += player.getSkills().getLevelForExperience(SkillConstants.ATTACK) * 1.1;
  129.         } else if (player.isActivePrayer(Prayer.INCREDIBLE_REFLEXES)) {
  130.             attackLevel += player.getSkills().getLevelForExperience(SkillConstants.ATTACK) * 1.15;
  131.         } else if (player.isActivePrayer(Prayer.CHIVALRY)) {
  132.             attackLevel += player.getSkills().getLevelForExperience(SkillConstants.ATTACK) * 1.15;
  133.         } else if (player.isActivePrayer(Prayer.PIETY)) {
  134.             attackLevel += player.getSkills().getLevelForExperience(SkillConstants.ATTACK) * 1.20;
  135.         }
  136.        
  137.         if (special) {
  138.             switch (player.getEquipment().get(3).getId()) {
  139.             case 3101:
  140.             case 3204:
  141.             case 1215:
  142.             case 1231:
  143.             case 5680:
  144.             case 5698:
  145.             case 11694:
  146.                 specialMultiplier = 1.1;
  147.                 break;
  148.             case 1305:
  149.                 specialMultiplier = 1.15;
  150.                 break;
  151.             case 1434:
  152.                 specialMultiplier = 1.45;
  153.                 break;
  154.             }
  155.         }
  156.         attackLevel *= specialMultiplier;
  157.         double i = player.getBonuses()[bestMeleeAtk(player)];
  158.         if (Equipment.wearingFullVoid(player, AttackType.MELEE)) {
  159.             i *= 1.1;
  160.         }
  161.         int outcome = (int) (attackLevel + (attackLevel * 0.15) + (i + i * 0.05));
  162.         return outcome;
  163.     }
  164.  
  165. }
Advertisement
Add Comment
Please, Sign In to add comment