public static final int getMaxHit(Player player, int weaponId,
			int attackStyle, boolean ranging, boolean usingSpec,
			double specMultiplier) {
		if (!ranging) {
			int strengthLvl = player.getSkills().getLevel(Skills.STRENGTH);
			double xpStyle = CombatDefinitions
					.getXpStyle(weaponId, attackStyle);
			double styleBonus = xpStyle == Skills.STRENGTH ? 3
					: xpStyle == CombatDefinitions.SHARED ? 1 : 0;
			double otherBonus = 1;
			if (fullDharokEquipped(player)) {
				double hp = player.getHitpoints();
				double maxhp = player.getMaxHitpoints();
				double d = hp / maxhp;
				otherBonus = 2 - d;
			}
			double effectiveStrength = 8 + strengthLvl
					* player.getPrayer().getStrengthMultiplier() + styleBonus;
			if (fullVoidEquipped(player, 11665, 11676))
				effectiveStrength *= 1.1;
			double strengthBonus = player.getCombatDefinitions().getBonuses()[CombatDefinitions.STRENGTH_BONUS];
			double baseDamage = 5 + effectiveStrength
					* (1 + (strengthBonus / 64));
			return (int) (baseDamage * specMultiplier * otherBonus);
		} else {
			double rangedLvl = player.getSkills().getLevel(Skills.RANGE);
			double styleBonus = attackStyle == 0 ? 3 : attackStyle == 1 ? 0 : 1;
			double otherBonus = 1;
			double effectiveStrenght = (rangedLvl
					* player.getPrayer().getRangeMultiplier() * otherBonus)
					+ styleBonus;
			if (fullVoidEquipped(player, 11664, 11675))
				effectiveStrenght += (player.getSkills().getLevelForXp(
						Skills.RANGE) / 5) + 1.6;
			double strengthBonus = player.getCombatDefinitions().getBonuses()[CombatDefinitions.RANGED_STR_BONUS];
			double baseDamage = 5 + (((effectiveStrenght + 8) * (strengthBonus + 64)) / 64);
			return (int) (baseDamage * specMultiplier);
		}
	}