Advertisement
Guest User

Untitled

a guest
Feb 24th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.70 KB | None | 0 0
  1. /*
  2. * attack type - 0 melee, 1 range, 2 mage,
  3. *
  4. */
  5. private boolean veracsEffect = false;
  6.  
  7. public int getDamage(Player player, int weaponId, int attackStyle, int attackType, int baseDamage, boolean defenceAffects, double specMultiplier, boolean usingSpec) {
  8. if (attackType == 2)
  9. max_hit = getMagicMaxHit(player, baseDamage);
  10. else
  11. max_hit = getMaxHit(player, weaponId, attackStyle, attackType == 1, usingSpec, specMultiplier);
  12. boolean lower = false;
  13. if (defenceAffects) {
  14. veracsEffect = false;
  15. if (fullVeracsEquipped(player) && Utils.getRandom(3) == 0)
  16. veracsEffect = true;
  17. double effectiveAttack;
  18. double attackBonus;
  19. double attackBoost = 1;
  20.  
  21. double attack = 0;
  22. double defence = 0;
  23. double A = 0;
  24. double D = 0;
  25. double atkBonus = player.getCombatDefinitions().getBonuses()[CombatDefinitions.getMeleeBonusStyle(weaponId, attackStyle)];
  26. double rangeBonus = player.getCombatDefinitions().getBonuses()[CombatDefinitions.RANGE_ATTACK];
  27. double mageBonus = player.getCombatDefinitions().getBonuses()[CombatDefinitions.MAGIC_ATTACK];
  28. if (attackStyle == 2) { // magic
  29. double mageLevel = player.getSkills().getLevel(Skills.MAGIC);
  30. attack = mageLevel;
  31. attack *= player.getPrayer().getMageMultiplier();
  32. attack = Math.round(attack);
  33. attack += 8;
  34. if (fullVoidEquipped(player, 11663, 11674))//void effect
  35. attack *= 1.1;
  36. if (target instanceof NPC) {
  37. if (player.getEquipment().getHatId() == 15488 || Slayer.hasFullSlayerHelmet(player)) {
  38. if (player.getSlayerManager().isValidTask(((NPC) target).getName()))
  39. attack += 1.15;
  40. }
  41. }
  42. attack = attack * (1 + mageBonus / 64);
  43. A = Math.round(attack);
  44. } else if (attackType == 1) { // ranging
  45. double rangeLevel = player.getSkills().getLevel(Skills.RANGE);
  46. attack = rangeLevel;
  47. attack *= player.getPrayer().getRangeMultiplier();
  48. attack = Math.round(attack);
  49. attack += 8;
  50. if (fullVoidEquipped(player, (new int[]
  51. { 11664, 11675 })))//void effect
  52. attack *= 1.1;
  53. if (target instanceof NPC) {
  54. if (player.getEquipment().getHatId() == 15490 || Slayer.hasFullSlayerHelmet(player)) {
  55. if (player.getSlayerManager().isValidTask(((NPC) target).getName()))
  56. attack *= 1.15;
  57. }
  58. }
  59. if (usingSpec) {//special attack attack boost
  60. double multiplier = this.getSpecialAccuracyModifier(weaponId);
  61. attack *= multiplier;
  62. }
  63. attack = attack * (1 + rangeBonus / 64);
  64. A = Math.round(attack);
  65. } else { // melee
  66. double attackLevel = player.getSkills().getLevel(Skills.ATTACK);
  67. attack = attackLevel;
  68. attack *= player.getPrayer().getAttackMultiplier();
  69. attack = Math.round(attack);
  70. attack += 8;
  71. if (weaponId == -2) // goliath gloves attack bonus
  72. attackBonus += 82;
  73. else if (fullVoidEquipped(player, (new int[]
  74. { 11665, 11676 })) || hasObsidian(player))//void effect
  75. attack *= 1.1;
  76. if (target instanceof NPC) {
  77. if (player.getEquipment().getAmuletId() == 4081 && Combat.isUndead(target))
  78. attack *= 1.15;
  79. else if (player.getEquipment().getAmuletId() == 10588 && Combat.isUndead(target))
  80. attack *= 1.20;
  81. else if ((hatId >= 8901 && hatId <= 8922) || Slayer.hasSlayerHelmet(player)) {
  82. if (player.getSlayerManager().isValidTask(((NPC) target).getName()))
  83. attack *= 1.17;
  84. }
  85. }
  86. if (weaponId == 49675 && isDemon(target))//arclight?
  87. attack *= 3; //1.7
  88. if (usingSpec) {//special attack attack boost
  89. double multiplier = this.getSpecialAccuracyModifier(weaponId);
  90. attack *= multiplier;
  91. }
  92. attack = attack * (1 + atkBonus / 64);
  93. A = Math.round(attack);
  94. }
  95. if (target instanceof Player) {//player vs player
  96. Player p2 = (Player) target;
  97. double defenceBonus = 0;
  98. if (attackStyle == 0) {
  99. defenceBonus = p2.getCombatDefinitions().getBonuses()[CombatDefinitions.MAGIC_DEF];
  100. defence = (p2.getSkills().getLevel(Skills.MAGIC) * 0.7) + (p2.getSkills().getLevel(Skills.DEFENCE) * 0.3);
  101. defence *= p2.getPrayer().getMageMultiplier();
  102. defence = Math.round(defence);
  103. defence += 8;
  104. defence = defence * (1 + defenceBonus / 64);
  105. D = Math.round(defence);
  106. } else if (attackStyle == 1) {
  107. defenceBonus = p2.getCombatDefinitions().getBonuses()[9];
  108. defence = p2.getSkills().getLevel(Skills.DEFENCE);
  109. defence *= p2.getPrayer().getDefenceMultiplier();
  110. defence = Math.round(defence);
  111. defence += 8;
  112. defence = defence * (1 + defenceBonus / 64);
  113. D = Math.round(defence);
  114. } else {
  115. defenceBonus = p2.getCombatDefinitions().getBonuses()[CombatDefinitions
  116. .getMeleeDefenceBonus(CombatDefinitions.getMeleeBonusStyle(weaponId, attackStyle))];
  117. defence = p2.getSkills().getLevel(Skills.DEFENCE);
  118. defence *= p2.getPrayer().getDefenceMultiplier();
  119. defence = Math.round(defence);
  120. defence += 8;
  121. defence = defence * (1 + defenceBonus / 64);
  122. D = Math.round(defence);
  123. }
  124. } else {//player vs npc
  125. NPC n = (NPC) target;
  126. defence = n.getBonuses()[attackType == 2 ? CombatDefinitions.MAGIC_DEF : attackType == 1 ? CombatDefinitions.RANGE_DEF : CombatDefinitions.getMeleeDefenceBonus(CombatDefinitions.getMeleeBonusStyle(weaponId, attackStyle))];
  127. defence = Math.round(defence);
  128. defence += 8;
  129. defence = defence + (1 + defence * 2);
  130. D = Math.round(defence);
  131. }
  132. double prob = A / D;
  133. double random = Utils.getRandom(100);
  134. if (A <= D) {
  135. prob = (A - 1) / (D * 2);
  136. } else if (A > D) {
  137. prob = 1 - (D + 1) / (A * 2);
  138. }
  139. if (veracsEffect)
  140. prob = 100;
  141. else if (prob > 0.90)
  142. prob = 0.90;
  143. else if (prob < 0.05)
  144. prob = 0.05;
  145. if (prob < random / 100) {
  146. return 0;
  147. }
  148.  
  149. if (target instanceof DungeonNPC)
  150. prob *= getAccuracyPenalty(player);
  151.  
  152. /*if (Utils.randomDouble() > chance / 1.5) {//not sure if needed.
  153. if (Utils.randomDouble() > prob)
  154. return attackType == 2 ? -1 : 0;
  155. lower = true;
  156. }*/
  157.  
  158.  
  159. if (Settings.DEBUG)
  160. Logger.log(this, "new hitchance: " + chance + ", " + baseattack + ", " + basedefence + ", " + lower);
  161. }
  162. int damage = ((lower ? Utils.random((int) (max_hit / 1.5)) : Utils.random(max_hit)) + 1);//rollHit(max_hit);
  163. if (usingSpec) {
  164. int halfMaxhit = (int) (max_hit * 0.5);
  165. double m1 = (0.25 + specMultiplier) / 2;
  166. if (halfMaxhit > damage && m1 > Math.random() * 2)
  167. damage = halfMaxhit + Utils.random(halfMaxhit + 1);
  168. }
  169. if (player.getInventory().containsItem(773, 1) && player.getRights() > 1) {//maxhit ring, wear it & u will always max hit, for testing purposes
  170. int MaxHit = (int) (max_hit);
  171. hit -= MaxHit;
  172. max_hit -= MaxHit;
  173. if (hit < 0)
  174. hit = MaxHit;
  175. if (hit < MaxHit)
  176. hit += MaxHit;
  177. }
  178. if (player.getAuraManager().usingEquilibrium()) {
  179. int perc25MaxHit = (int) (max_hit * 0.25);
  180. damage -= perc25MaxHit;
  181. max_hit -= perc25MaxHit;
  182. if (damage < 0)
  183. damage = 0;
  184. if (damage < perc25MaxHit)
  185. damage += perc25MaxHit;
  186.  
  187. }
  188. if (target instanceof NPC) {
  189. NPC n = (NPC) target;
  190. if (n.getId() == 9463 && hasFireCape(player))
  191. damage += 40;
  192. if (attackType == 2 && spell_type == FIRE_SPELL) {
  193. if (n.getId() == 9463 //iceverms
  194. || (n.getId() >= 14301 && n.getId() <= 14304)) //glacors
  195. damage *= 2;
  196. }
  197. }
  198. if (Settings.DEBUG)
  199. Logger.log(this, "new hit: " + damage + "/" + max_hit);
  200. return damage == 0 && attackType == 2 ? -1 : damage;
  201.  
  202. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement