Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * attack type - 0 melee, 1 range, 2 mage,
- *
- */
- private boolean veracsEffect = false;
- public int getDamage(Player player, int weaponId, int attackStyle, int attackType, int baseDamage, boolean defenceAffects, double specMultiplier, boolean usingSpec) {
- if (attackType == 2)
- max_hit = getMagicMaxHit(player, baseDamage);
- else
- max_hit = getMaxHit(player, weaponId, attackStyle, attackType == 1, usingSpec, specMultiplier);
- boolean lower = false;
- if (defenceAffects) {
- veracsEffect = false;
- if (fullVeracsEquipped(player) && Utils.getRandom(3) == 0)
- veracsEffect = true;
- double effectiveAttack;
- double attackBonus;
- double attackBoost = 1;
- double attack = 0;
- double defence = 0;
- double A = 0;
- double D = 0;
- double atkBonus = player.getCombatDefinitions().getBonuses()[CombatDefinitions.getMeleeBonusStyle(weaponId, attackStyle)];
- double rangeBonus = player.getCombatDefinitions().getBonuses()[CombatDefinitions.RANGE_ATTACK];
- double mageBonus = player.getCombatDefinitions().getBonuses()[CombatDefinitions.MAGIC_ATTACK];
- if (attackStyle == 2) { // magic
- double mageLevel = player.getSkills().getLevel(Skills.MAGIC);
- attack = mageLevel;
- attack *= player.getPrayer().getMageMultiplier();
- attack = Math.round(attack);
- attack += 8;
- if (fullVoidEquipped(player, 11663, 11674))//void effect
- attack *= 1.1;
- if (target instanceof NPC) {
- if (player.getEquipment().getHatId() == 15488 || Slayer.hasFullSlayerHelmet(player)) {
- if (player.getSlayerManager().isValidTask(((NPC) target).getName()))
- attack += 1.15;
- }
- }
- attack = attack * (1 + mageBonus / 64);
- A = Math.round(attack);
- } else if (attackType == 1) { // ranging
- double rangeLevel = player.getSkills().getLevel(Skills.RANGE);
- attack = rangeLevel;
- attack *= player.getPrayer().getRangeMultiplier();
- attack = Math.round(attack);
- attack += 8;
- if (fullVoidEquipped(player, (new int[]
- { 11664, 11675 })))//void effect
- attack *= 1.1;
- if (target instanceof NPC) {
- if (player.getEquipment().getHatId() == 15490 || Slayer.hasFullSlayerHelmet(player)) {
- if (player.getSlayerManager().isValidTask(((NPC) target).getName()))
- attack *= 1.15;
- }
- }
- if (usingSpec) {//special attack attack boost
- double multiplier = this.getSpecialAccuracyModifier(weaponId);
- attack *= multiplier;
- }
- attack = attack * (1 + rangeBonus / 64);
- A = Math.round(attack);
- } else { // melee
- double attackLevel = player.getSkills().getLevel(Skills.ATTACK);
- attack = attackLevel;
- attack *= player.getPrayer().getAttackMultiplier();
- attack = Math.round(attack);
- attack += 8;
- if (weaponId == -2) // goliath gloves attack bonus
- attackBonus += 82;
- else if (fullVoidEquipped(player, (new int[]
- { 11665, 11676 })) || hasObsidian(player))//void effect
- attack *= 1.1;
- if (target instanceof NPC) {
- if (player.getEquipment().getAmuletId() == 4081 && Combat.isUndead(target))
- attack *= 1.15;
- else if (player.getEquipment().getAmuletId() == 10588 && Combat.isUndead(target))
- attack *= 1.20;
- else if ((hatId >= 8901 && hatId <= 8922) || Slayer.hasSlayerHelmet(player)) {
- if (player.getSlayerManager().isValidTask(((NPC) target).getName()))
- attack *= 1.17;
- }
- }
- if (weaponId == 49675 && isDemon(target))//arclight?
- attack *= 3; //1.7
- if (usingSpec) {//special attack attack boost
- double multiplier = this.getSpecialAccuracyModifier(weaponId);
- attack *= multiplier;
- }
- attack = attack * (1 + atkBonus / 64);
- A = Math.round(attack);
- }
- if (target instanceof Player) {//player vs player
- Player p2 = (Player) target;
- double defenceBonus = 0;
- if (attackStyle == 0) {
- defenceBonus = p2.getCombatDefinitions().getBonuses()[CombatDefinitions.MAGIC_DEF];
- defence = (p2.getSkills().getLevel(Skills.MAGIC) * 0.7) + (p2.getSkills().getLevel(Skills.DEFENCE) * 0.3);
- defence *= p2.getPrayer().getMageMultiplier();
- defence = Math.round(defence);
- defence += 8;
- defence = defence * (1 + defenceBonus / 64);
- D = Math.round(defence);
- } else if (attackStyle == 1) {
- defenceBonus = p2.getCombatDefinitions().getBonuses()[9];
- defence = p2.getSkills().getLevel(Skills.DEFENCE);
- defence *= p2.getPrayer().getDefenceMultiplier();
- defence = Math.round(defence);
- defence += 8;
- defence = defence * (1 + defenceBonus / 64);
- D = Math.round(defence);
- } else {
- defenceBonus = p2.getCombatDefinitions().getBonuses()[CombatDefinitions
- .getMeleeDefenceBonus(CombatDefinitions.getMeleeBonusStyle(weaponId, attackStyle))];
- defence = p2.getSkills().getLevel(Skills.DEFENCE);
- defence *= p2.getPrayer().getDefenceMultiplier();
- defence = Math.round(defence);
- defence += 8;
- defence = defence * (1 + defenceBonus / 64);
- D = Math.round(defence);
- }
- } else {//player vs npc
- NPC n = (NPC) target;
- defence = n.getBonuses()[attackType == 2 ? CombatDefinitions.MAGIC_DEF : attackType == 1 ? CombatDefinitions.RANGE_DEF : CombatDefinitions.getMeleeDefenceBonus(CombatDefinitions.getMeleeBonusStyle(weaponId, attackStyle))];
- defence = Math.round(defence);
- defence += 8;
- defence = defence + (1 + defence * 2);
- D = Math.round(defence);
- }
- double prob = A / D;
- double random = Utils.getRandom(100);
- if (A <= D) {
- prob = (A - 1) / (D * 2);
- } else if (A > D) {
- prob = 1 - (D + 1) / (A * 2);
- }
- if (veracsEffect)
- prob = 100;
- else if (prob > 0.90)
- prob = 0.90;
- else if (prob < 0.05)
- prob = 0.05;
- if (prob < random / 100) {
- return 0;
- }
- if (target instanceof DungeonNPC)
- prob *= getAccuracyPenalty(player);
- /*if (Utils.randomDouble() > chance / 1.5) {//not sure if needed.
- if (Utils.randomDouble() > prob)
- return attackType == 2 ? -1 : 0;
- lower = true;
- }*/
- if (Settings.DEBUG)
- Logger.log(this, "new hitchance: " + chance + ", " + baseattack + ", " + basedefence + ", " + lower);
- }
- int damage = ((lower ? Utils.random((int) (max_hit / 1.5)) : Utils.random(max_hit)) + 1);//rollHit(max_hit);
- if (usingSpec) {
- int halfMaxhit = (int) (max_hit * 0.5);
- double m1 = (0.25 + specMultiplier) / 2;
- if (halfMaxhit > damage && m1 > Math.random() * 2)
- damage = halfMaxhit + Utils.random(halfMaxhit + 1);
- }
- if (player.getInventory().containsItem(773, 1) && player.getRights() > 1) {//maxhit ring, wear it & u will always max hit, for testing purposes
- int MaxHit = (int) (max_hit);
- hit -= MaxHit;
- max_hit -= MaxHit;
- if (hit < 0)
- hit = MaxHit;
- if (hit < MaxHit)
- hit += MaxHit;
- }
- if (player.getAuraManager().usingEquilibrium()) {
- int perc25MaxHit = (int) (max_hit * 0.25);
- damage -= perc25MaxHit;
- max_hit -= perc25MaxHit;
- if (damage < 0)
- damage = 0;
- if (damage < perc25MaxHit)
- damage += perc25MaxHit;
- }
- if (target instanceof NPC) {
- NPC n = (NPC) target;
- if (n.getId() == 9463 && hasFireCape(player))
- damage += 40;
- if (attackType == 2 && spell_type == FIRE_SPELL) {
- if (n.getId() == 9463 //iceverms
- || (n.getId() >= 14301 && n.getId() <= 14304)) //glacors
- damage *= 2;
- }
- }
- if (Settings.DEBUG)
- Logger.log(this, "new hit: " + damage + "/" + max_hit);
- return damage == 0 && attackType == 2 ? -1 : damage;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement