Advertisement
Guest User

Untitled

a guest
Jul 21st, 2017
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 117.96 KB | None | 0 0
  1. package server.model.players;
  2.  
  3. import server.Config;
  4. import server.Server;
  5. import server.util.Misc;
  6.  
  7.  
  8. public class CombatAssistant{
  9.  
  10. private Client c;
  11. public CombatAssistant(Client Client) {
  12. this.c = Client;
  13. }
  14.  
  15.  
  16. public int[][] slayerReqs = {{1648,5},{1612,15},{1643,45},{1618,50},{1624,65},{1610,75},{1613,80},{1615,85},{2783,90}};
  17.  
  18. public boolean goodSlayer(int i) {
  19. for (int j = 0; j < slayerReqs.length; j++) {
  20. if (slayerReqs[j][0] == Server.npcHandler.npcs[i].npcType) {
  21. if (slayerReqs[j][1] > c.playerLevel[c.playerSlayer]) {
  22. c.sendMessage("You need a slayer level of " + slayerReqs[j][1] + " to harm this NPC.");
  23. return false;
  24. }
  25. }
  26. }
  27. return true;
  28. }
  29.  
  30. /**
  31. * Attack Npcs
  32. */
  33. public void attackNpc(int i) {
  34. if (Server.npcHandler.npcs[i] != null) {
  35. if (Server.npcHandler.npcs[i].isDead || Server.npcHandler.npcs[i].MaxHP <= 0) {
  36. c.usingMagic = false;
  37. c.faceUpdate(0);
  38. c.npcIndex = 0;
  39. return;
  40. }
  41. if(c.respawnTimer > 0) {
  42. c.npcIndex = 0;
  43. return;
  44. }
  45. if (Server.npcHandler.npcs[i].underAttackBy > 0 && Server.npcHandler.npcs[i].underAttackBy != c.playerId && !Server.npcHandler.npcs[i].inMulti()) {
  46. c.npcIndex = 0;
  47. c.sendMessage("This monster is already in combat.");
  48. return;
  49. }
  50. if ((c.underAttackBy > 0 || c.underAttackBy2 > 0) && c.underAttackBy2 != i && !c.inMulti()) {
  51. resetPlayerAttack();
  52. c.sendMessage("I am already under attack.");
  53. return;
  54. }
  55. if (!goodSlayer(i)) {
  56. resetPlayerAttack();
  57. return;
  58. }
  59. if (Server.npcHandler.npcs[i].spawnedBy != c.playerId && Server.npcHandler.npcs[i].spawnedBy > 0) {
  60. resetPlayerAttack();
  61. c.sendMessage("This monster was not spawned for you.");
  62. return;
  63. }
  64. c.followId2 = i;
  65. c.followId = 0;
  66. if(c.attackTimer <= 0) {
  67. boolean usingBow = false;
  68. boolean usingArrows = false;
  69. boolean usingOtherRangeWeapons = false;
  70. boolean usingCross = c.playerEquipment[c.playerWeapon] == 9185;
  71. c.bonusAttack = 0;
  72. c.rangeItemUsed = 0;
  73. c.projectileStage = 0;
  74. if (c.autocasting) {
  75. c.spellId = c.autocastId;
  76. c.usingMagic = true;
  77. }
  78. if(c.spellId > 0) {
  79. c.usingMagic = true;
  80. }
  81. c.attackTimer = getAttackDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  82. c.specAccuracy = 1.0;
  83. c.specDamage = 1.0;
  84. if(!c.usingMagic) {
  85. for (int bowId : c.BOWS) {
  86. if(c.playerEquipment[c.playerWeapon] == bowId) {
  87. usingBow = true;
  88. for (int arrowId : c.ARROWS) {
  89. if(c.playerEquipment[c.playerArrows] == arrowId) {
  90. usingArrows = true;
  91. }
  92. }
  93. }
  94. }
  95.  
  96. for (int otherRangeId : c.OTHER_RANGE_WEAPONS) {
  97. if(c.playerEquipment[c.playerWeapon] == otherRangeId) {
  98. usingOtherRangeWeapons = true;
  99. }
  100. }
  101. }
  102. if (armaNpc(i) && !usingCross && !usingBow && !c.usingMagic && !usingCrystalBow() && !usingOtherRangeWeapons) {
  103. resetPlayerAttack();
  104. return;
  105. }
  106. if((!c.goodDistance(c.getX(), c.getY(), Server.npcHandler.npcs[i].getX(), Server.npcHandler.npcs[i].getY(), 2) && (usingHally() && !usingOtherRangeWeapons && !usingBow && !c.usingMagic)) ||(!c.goodDistance(c.getX(), c.getY(), Server.npcHandler.npcs[i].getX(), Server.npcHandler.npcs[i].getY(), 4) && (usingOtherRangeWeapons && !usingBow && !c.usingMagic)) || (!c.goodDistance(c.getX(), c.getY(), Server.npcHandler.npcs[i].getX(), Server.npcHandler.npcs[i].getY(), 1) && (!usingOtherRangeWeapons && !usingHally() && !usingBow && !c.usingMagic)) || ((!c.goodDistance(c.getX(), c.getY(), Server.npcHandler.npcs[i].getX(), Server.npcHandler.npcs[i].getY(), 8) && (usingBow || c.usingMagic)))) {
  107. c.attackTimer = 2;
  108. return;
  109. }
  110.  
  111. if(!usingCross && !usingArrows && usingBow && (c.playerEquipment[c.playerWeapon] < 4212 || c.playerEquipment[c.playerWeapon] > 4223)) {
  112. c.sendMessage("You have run out of arrows!");
  113. c.stopMovement();
  114. c.npcIndex = 0;
  115. return;
  116. }
  117. if(correctBowAndArrows() < c.playerEquipment[c.playerArrows] && Config.CORRECT_ARROWS && usingBow && !usingCrystalBow() && c.playerEquipment[c.playerWeapon] != 9185) {
  118. c.sendMessage("You can't use "+c.getItems().getItemName(c.playerEquipment[c.playerArrows]).toLowerCase()+"s with a "+c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase()+".");
  119. c.stopMovement();
  120. c.npcIndex = 0;
  121. return;
  122. }
  123.  
  124.  
  125. if (c.playerEquipment[c.playerWeapon] == 9185 && !properBolts()) {
  126. c.sendMessage("You must use bolts with a crossbow.");
  127. c.stopMovement();
  128. resetPlayerAttack();
  129. return;
  130. }
  131.  
  132. if(usingBow || c.usingMagic || usingOtherRangeWeapons || (c.goodDistance(c.getX(), c.getY(), Server.npcHandler.npcs[i].getX(), Server.npcHandler.npcs[i].getY(), 2) && usingHally())) {
  133. c.stopMovement();
  134. }
  135.  
  136. if(!checkMagicReqs(c.spellId)) {
  137. c.stopMovement();
  138. c.npcIndex = 0;
  139. return;
  140. }
  141.  
  142. c.faceUpdate(i);
  143. //c.specAccuracy = 1.0;
  144. //c.specDamage = 1.0;
  145. Server.npcHandler.npcs[i].underAttackBy = c.playerId;
  146. Server.npcHandler.npcs[i].lastDamageTaken = System.currentTimeMillis();
  147. if(c.usingSpecial && !c.usingMagic) {
  148. if(checkSpecAmount(c.playerEquipment[c.playerWeapon])){
  149. c.lastWeaponUsed = c.playerEquipment[c.playerWeapon];
  150. c.lastArrowUsed = c.playerEquipment[c.playerArrows];
  151. activateSpecial(c.playerEquipment[c.playerWeapon], i);
  152. return;
  153. } else {
  154. c.sendMessage("You don't have the required special energy to use this attack.");
  155. c.usingSpecial = false;
  156. c.getItems().updateSpecialBar();
  157. c.npcIndex = 0;
  158. return;
  159. }
  160. }
  161. c.specMaxHitIncrease = 0;
  162. if(!c.usingMagic) {
  163. c.startAnimation(getWepAnim(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase()));
  164. } else {
  165. c.startAnimation(c.MAGIC_SPELLS[c.spellId][2]);
  166. }
  167. c.lastWeaponUsed = c.playerEquipment[c.playerWeapon];
  168. c.lastArrowUsed = c.playerEquipment[c.playerArrows];
  169. if(!usingBow && !c.usingMagic && !usingOtherRangeWeapons) { // melee hit delay
  170. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  171. c.projectileStage = 0;
  172. c.oldNpcIndex = i;
  173. }
  174.  
  175. if(usingBow && !usingOtherRangeWeapons && !c.usingMagic || usingCross) { // range hit delay
  176. if (usingCross)
  177. c.usingBow = true;
  178. if (c.fightMode == 2)
  179. c.attackTimer--;
  180. c.lastArrowUsed = c.playerEquipment[c.playerArrows];
  181. c.lastWeaponUsed = c.playerEquipment[c.playerWeapon];
  182. c.gfx100(getRangeStartGFX());
  183. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  184. c.projectileStage = 1;
  185. c.oldNpcIndex = i;
  186. if(c.playerEquipment[c.playerWeapon] >= 4212 && c.playerEquipment[c.playerWeapon] <= 4223) {
  187. c.rangeItemUsed = c.playerEquipment[c.playerWeapon];
  188. c.crystalBowArrowCount++;
  189. c.lastArrowUsed = 0;
  190. } else {
  191. c.rangeItemUsed = c.playerEquipment[c.playerArrows];
  192. c.getItems().deleteArrow();
  193. }
  194. fireProjectileNpc();
  195. }
  196.  
  197.  
  198. if(usingOtherRangeWeapons && !c.usingMagic && !usingBow) { // knives, darts, etc hit delay
  199. c.rangeItemUsed = c.playerEquipment[c.playerWeapon];
  200. c.getItems().deleteEquipment();
  201. c.gfx100(getRangeStartGFX());
  202. c.lastArrowUsed = 0;
  203. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  204. c.projectileStage = 1;
  205. c.oldNpcIndex = i;
  206. if (c.fightMode == 2)
  207. c.attackTimer--;
  208. fireProjectileNpc();
  209. }
  210.  
  211. if(c.usingMagic) { // magic hit delay
  212. int pX = c.getX();
  213. int pY = c.getY();
  214. int nX = Server.npcHandler.npcs[i].getX();
  215. int nY = Server.npcHandler.npcs[i].getY();
  216. int offX = (pY - nY)* -1;
  217. int offY = (pX - nX)* -1;
  218. c.castingMagic = true;
  219. c.projectileStage = 2;
  220. if(c.MAGIC_SPELLS[c.spellId][3] > 0) {
  221. if(getStartGfxHeight() == 100) {
  222. c.gfx100(c.MAGIC_SPELLS[c.spellId][3]);
  223. } else {
  224. c.gfx0(c.MAGIC_SPELLS[c.spellId][3]);
  225. }
  226. }
  227. if(c.MAGIC_SPELLS[c.spellId][4] > 0) {
  228. c.getPA().createPlayersProjectile(pX, pY, offX, offY, 50, 78, c.MAGIC_SPELLS[c.spellId][4], getStartHeight(), getEndHeight(), i + 1, 50);
  229. }
  230. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  231. c.oldNpcIndex = i;
  232. c.oldSpellId = c.spellId;
  233. c.spellId = 0;
  234. if (!c.autocasting)
  235. c.npcIndex = 0;
  236. }
  237.  
  238. if(usingBow && Config.CRYSTAL_BOW_DEGRADES) { // crystal bow degrading
  239. if(c.playerEquipment[c.playerWeapon] == 4212) { // new crystal bow becomes full bow on the first shot
  240. c.getItems().wearItem(4214, 1, 3);
  241. }
  242.  
  243. if(c.crystalBowArrowCount >= 250){
  244. switch(c.playerEquipment[c.playerWeapon]) {
  245.  
  246. case 4223: // 1/10 bow
  247. c.getItems().wearItem(-1, 1, 3);
  248. c.sendMessage("Your crystal bow has fully degraded.");
  249. if(!c.getItems().addItem(4207, 1)) {
  250. Server.itemHandler.createGroundItem(c, 4207, c.getX(), c.getY(), 1, c.getId());
  251. }
  252. c.crystalBowArrowCount = 0;
  253. break;
  254.  
  255. default:
  256. c.getItems().wearItem(++c.playerEquipment[c.playerWeapon], 1, 3);
  257. c.sendMessage("Your crystal bow degrades.");
  258. c.crystalBowArrowCount = 0;
  259. break;
  260.  
  261.  
  262. }
  263. }
  264. }
  265. }
  266. }
  267. }
  268.  
  269.  
  270. public void delayedHit(int i) { // npc hit delay
  271. if (Server.npcHandler.npcs[i] != null) {
  272. if (Server.npcHandler.npcs[i].isDead) {
  273. c.npcIndex = 0;
  274. return;
  275. }
  276. Server.npcHandler.npcs[i].facePlayer(c.playerId);
  277.  
  278. if (Server.npcHandler.npcs[i].underAttackBy > 0 && Server.npcHandler.getsPulled(i)) {
  279. Server.npcHandler.npcs[i].killerId = c.playerId;
  280. } else if (Server.npcHandler.npcs[i].underAttackBy < 0 && !Server.npcHandler.getsPulled(i)) {
  281. Server.npcHandler.npcs[i].killerId = c.playerId;
  282. }
  283. c.lastNpcAttacked = i;
  284. if(c.projectileStage == 0 && !c.usingMagic && !c.castingMagic) { // melee hit damage
  285. applyNpcMeleeDamage(i, 1, Misc.random(calculateMeleeMaxHit()));
  286. if(c.doubleHit && !c.usingClaws) {
  287. applyNpcMeleeDamage(i, 2, Misc.random(calculateMeleeMaxHit()));
  288. }
  289. if(c.doubleHit && c.usingClaws) {
  290. applyNpcMeleeDamage(i, 2, c.previousDamage / 2);
  291. }
  292. }
  293.  
  294. if(!c.castingMagic && c.projectileStage > 0) { // range hit damage
  295. int damage = Misc.random(rangeMaxHit());
  296. int damage2 = -1;
  297. if (c.lastWeaponUsed == 11235 || c.bowSpecShot == 1)
  298. damage2 = Misc.random(rangeMaxHit());
  299. boolean ignoreDef = false;
  300. if(c.playerEquipment[c.playerWeapon] == 9185) {
  301. if (Misc.random(5) == 1 && c.lastArrowUsed == 9243) {
  302. ignoreDef = true;
  303. Server.npcHandler.npcs[i].gfx0(758);
  304. }
  305. }
  306.  
  307. if(Misc.random(Server.npcHandler.npcs[i].defence) > Misc.random(10+calculateRangeAttack()) && !ignoreDef) {
  308. damage = 0;
  309. } else if (Server.npcHandler.npcs[i].npcType == 2881 || Server.npcHandler.npcs[i].npcType == 2883 && !ignoreDef) {
  310. damage = 0;
  311. }
  312.  
  313. if (Misc.random(4) == 1 && c.lastArrowUsed == 9242 && damage > 0) {
  314. Server.npcHandler.npcs[i].gfx0(754);
  315. damage = Server.npcHandler.npcs[i].HP/5;
  316. c.handleHitMask(c.playerLevel[3]/10);
  317. c.dealDamage(c.playerLevel[3]/10);
  318. c.gfx0(754);
  319. }
  320.  
  321. if (c.lastWeaponUsed == 11235 || c.bowSpecShot == 1) {
  322. if (Misc.random(Server.npcHandler.npcs[i].defence) > Misc.random(10+calculateRangeAttack()))
  323. damage2 = 0;
  324. }
  325. if (c.dbowSpec) {
  326. Server.npcHandler.npcs[i].gfx100(1100);
  327. if (damage < 8)
  328. damage = 8;
  329. if (damage2 < 8)
  330. damage2 = 8;
  331. c.dbowSpec = false;
  332. }
  333. if(c.playerEquipment[c.playerWeapon] == 9185) {
  334. if (damage > 0 && Misc.random(5) == 1 && c.lastArrowUsed == 9244) {
  335. damage *= 1.45;
  336. Server.npcHandler.npcs[i].gfx0(756);
  337. }
  338. }
  339. if (Server.npcHandler.npcs[i].HP - damage < 0) {
  340. damage = Server.npcHandler.npcs[i].HP;
  341. }
  342. if (Server.npcHandler.npcs[i].HP - damage <= 0 && damage2 > 0) {
  343. damage2 = 0;
  344. }
  345. if(c.fightMode == 3) {
  346. c.getPA().addSkillXP((damage*Config.RANGE_EXP_RATE/3), 4);
  347. c.getPA().addSkillXP((damage*Config.RANGE_EXP_RATE/3), 1);
  348. c.getPA().addSkillXP((damage*Config.RANGE_EXP_RATE/3), 3);
  349. c.getPA().refreshSkill(1);
  350. c.getPA().refreshSkill(3);
  351. c.getPA().refreshSkill(4);
  352. } else {
  353. c.getPA().addSkillXP((damage*Config.RANGE_EXP_RATE), 4);
  354. c.getPA().addSkillXP((damage*Config.RANGE_EXP_RATE/3), 3);
  355. c.getPA().refreshSkill(3);
  356. c.getPA().refreshSkill(4);
  357. }
  358. if (damage > 0) {
  359. if (Server.npcHandler.npcs[i].npcType >= 3777 && Server.npcHandler.npcs[i].npcType <= 3780) {
  360. c.pcDamage += damage;
  361. }
  362. }
  363. boolean dropArrows = true;
  364.  
  365. for(int noArrowId : c.NO_ARROW_DROP) {
  366. if(c.lastWeaponUsed == noArrowId) {
  367. dropArrows = false;
  368. break;
  369. }
  370. }
  371. if(dropArrows) {
  372. c.getItems().dropArrowNpc();
  373. }
  374. Server.npcHandler.npcs[i].underAttack = true;
  375. Server.npcHandler.npcs[i].hitDiff = damage;
  376. Server.npcHandler.npcs[i].HP -= damage;
  377. if (damage2 > -1) {
  378. Server.npcHandler.npcs[i].hitDiff2 = damage2;
  379. Server.npcHandler.npcs[i].HP -= damage2;
  380. c.totalDamageDealt += damage2;
  381. }
  382. if (c.killingNpcIndex != c.oldNpcIndex) {
  383. c.totalDamageDealt = 0;
  384. }
  385. c.killingNpcIndex = c.oldNpcIndex;
  386. c.totalDamageDealt += damage;
  387. Server.npcHandler.npcs[i].hitUpdateRequired = true;
  388. if (damage2 > -1)
  389. Server.npcHandler.npcs[i].hitUpdateRequired2 = true;
  390. Server.npcHandler.npcs[i].updateRequired = true;
  391.  
  392. } else if (c.projectileStage > 0) { // magic hit damage
  393. int damage = Misc.random((c.MAGIC_SPELLS[c.oldSpellId][6]) + c.totalMagicBonus());
  394. if(godSpells()) {
  395. if(System.currentTimeMillis() - c.godSpellDelay < Config.GOD_SPELL_CHARGE) {
  396. damage += Misc.random(10);
  397. }
  398. }
  399. boolean magicFailed = false;
  400. //c.npcIndex = 0;
  401. int bonusAttack = getBonusAttack(i);
  402. if (Misc.random(Server.npcHandler.npcs[i].defence) > 10+ Misc.random(mageAtk()) + bonusAttack) {
  403. damage = 0;
  404. magicFailed = true;
  405. } else if (Server.npcHandler.npcs[i].npcType == 2881 || Server.npcHandler.npcs[i].npcType == 2882) {
  406. damage = 0;
  407. magicFailed = true;
  408. }
  409.  
  410. if (Server.npcHandler.npcs[i].HP - damage < 0) {
  411. damage = Server.npcHandler.npcs[i].HP;
  412. }
  413.  
  414. c.getPA().addSkillXP((c.MAGIC_SPELLS[c.oldSpellId][7] + damage*Config.MAGIC_EXP_RATE), 6);
  415. c.getPA().addSkillXP((c.MAGIC_SPELLS[c.oldSpellId][7] + damage*Config.MAGIC_EXP_RATE/3), 3);
  416. c.getPA().refreshSkill(3);
  417. c.getPA().refreshSkill(6);
  418. if (damage > 0) {
  419. if (Server.npcHandler.npcs[i].npcType >= 3777 && Server.npcHandler.npcs[i].npcType <= 3780) {
  420. c.pcDamage += damage;
  421. }
  422. }
  423. if(getEndGfxHeight() == 100 && !magicFailed){ // end GFX
  424. Server.npcHandler.npcs[i].gfx100(c.MAGIC_SPELLS[c.oldSpellId][5]);
  425. } else if (!magicFailed){
  426. Server.npcHandler.npcs[i].gfx0(c.MAGIC_SPELLS[c.oldSpellId][5]);
  427. }
  428.  
  429. if(magicFailed) {
  430. Server.npcHandler.npcs[i].gfx100(85);
  431. }
  432. if(!magicFailed) {
  433. int freezeDelay = getFreezeTime();//freeze
  434. if(freezeDelay > 0 && Server.npcHandler.npcs[i].freezeTimer == 0) {
  435. Server.npcHandler.npcs[i].freezeTimer = freezeDelay;
  436. }
  437. switch(c.MAGIC_SPELLS[c.oldSpellId][0]) {
  438. case 12901:
  439. case 12919: // blood spells
  440. case 12911:
  441. case 12929:
  442. int heal = Misc.random(damage / 2);
  443. if(c.playerLevel[3] + heal >= c.getPA().getLevelForXP(c.playerXP[3])) {
  444. c.playerLevel[3] = c.getPA().getLevelForXP(c.playerXP[3]);
  445. } else {
  446. c.playerLevel[3] += heal;
  447. }
  448. c.getPA().refreshSkill(3);
  449. break;
  450. }
  451.  
  452. }
  453. Server.npcHandler.npcs[i].underAttack = true;
  454. if(c.MAGIC_SPELLS[c.oldSpellId][6] != 0) {
  455. Server.npcHandler.npcs[i].hitDiff = damage;
  456. Server.npcHandler.npcs[i].HP -= damage;
  457. Server.npcHandler.npcs[i].hitUpdateRequired = true;
  458. c.totalDamageDealt += damage;
  459. }
  460. c.killingNpcIndex = c.oldNpcIndex;
  461. Server.npcHandler.npcs[i].updateRequired = true;
  462. c.usingMagic = false;
  463. c.castingMagic = false;
  464. c.oldSpellId = 0;
  465. }
  466. }
  467.  
  468. if(c.bowSpecShot <= 0) {
  469. c.oldNpcIndex = 0;
  470. c.projectileStage = 0;
  471. c.doubleHit = false;
  472. c.lastWeaponUsed = 0;
  473. c.bowSpecShot = 0;
  474. }
  475. if(c.bowSpecShot >= 2) {
  476. c.bowSpecShot = 0;
  477. //c.attackTimer = getAttackDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  478. }
  479. if(c.bowSpecShot == 1) {
  480. fireProjectileNpc();
  481. c.hitDelay = 2;
  482. c.bowSpecShot = 0;
  483. }
  484. }
  485.  
  486.  
  487. public void applyNpcMeleeDamage(int i, int damageMask, int damage) {
  488. c.previousDamage = damage;
  489. boolean fullVeracsEffect = c.getPA().fullVeracs() && Misc.random(3) == 1;
  490. if (Server.npcHandler.npcs[i].HP - damage < 0) {
  491. damage = Server.npcHandler.npcs[i].HP;
  492. }
  493.  
  494. if (!fullVeracsEffect) {
  495. if (Misc.random(Server.npcHandler.npcs[i].defence) > 10 + Misc.random(calculateMeleeAttack())) {
  496. damage = 0;
  497. } else if (Server.npcHandler.npcs[i].npcType == 2882 || Server.npcHandler.npcs[i].npcType == 2883) {
  498. damage = 0;
  499. }
  500. }
  501. boolean guthansEffect = false;
  502. if (c.getPA().fullGuthans()) {
  503. if (Misc.random(3) == 1) {
  504. guthansEffect = true;
  505. }
  506. }
  507. if(c.fightMode == 3) {
  508. c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 0);
  509. c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 1);
  510. c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 2);
  511. c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 3);
  512. c.getPA().refreshSkill(0);
  513. c.getPA().refreshSkill(1);
  514. c.getPA().refreshSkill(2);
  515. c.getPA().refreshSkill(3);
  516. } else {
  517. c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE), c.fightMode);
  518. c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 3);
  519. c.getPA().refreshSkill(c.fightMode);
  520. c.getPA().refreshSkill(3);
  521. }
  522. if (damage > 0) {
  523. if (Server.npcHandler.npcs[i].npcType >= 3777 && Server.npcHandler.npcs[i].npcType <= 3780) {
  524. c.pcDamage += damage;
  525. }
  526. }
  527. if (damage > 0 && guthansEffect) {
  528. c.playerLevel[3] += damage;
  529. if (c.playerLevel[3] > c.getLevelForXP(c.playerXP[3]))
  530. c.playerLevel[3] = c.getLevelForXP(c.playerXP[3]);
  531. c.getPA().refreshSkill(3);
  532. Server.npcHandler.npcs[i].gfx0(398);
  533. }
  534. Server.npcHandler.npcs[i].underAttack = true;
  535. //Server.npcHandler.npcs[i].killerId = c.playerId;
  536. c.killingNpcIndex = c.npcIndex;
  537. c.lastNpcAttacked = i;
  538. switch (c.specEffect) {
  539. case 4:
  540. if (damage > 0) {
  541. if (c.playerLevel[3] + damage > c.getLevelForXP(c.playerXP[3]))
  542. if (c.playerLevel[3] > c.getLevelForXP(c.playerXP[3]));
  543. else
  544. c.playerLevel[3] = c.getLevelForXP(c.playerXP[3]);
  545. else
  546. c.playerLevel[3] += damage;
  547. c.getPA().refreshSkill(3);
  548. }
  549. break;
  550. case 5:
  551. c.clawDelay = 2;
  552. break;
  553.  
  554. }
  555. switch(damageMask) {
  556. case 1:
  557. Server.npcHandler.npcs[i].hitDiff = damage;
  558. Server.npcHandler.npcs[i].HP -= damage;
  559. c.totalDamageDealt += damage;
  560. Server.npcHandler.npcs[i].hitUpdateRequired = true;
  561. Server.npcHandler.npcs[i].updateRequired = true;
  562. break;
  563.  
  564. case 2:
  565. Server.npcHandler.npcs[i].hitDiff2 = damage;
  566. Server.npcHandler.npcs[i].HP -= damage;
  567. c.totalDamageDealt += damage;
  568. Server.npcHandler.npcs[i].hitUpdateRequired2 = true;
  569. Server.npcHandler.npcs[i].updateRequired = true;
  570. c.doubleHit = false;
  571. break;
  572.  
  573. }
  574. }
  575.  
  576. public void fireProjectileNpc() {
  577. if(c.oldNpcIndex > 0) {
  578. if(Server.npcHandler.npcs[c.oldNpcIndex] != null) {
  579. c.projectileStage = 2;
  580. int pX = c.getX();
  581. int pY = c.getY();
  582. int nX = Server.npcHandler.npcs[c.oldNpcIndex].getX();
  583. int nY = Server.npcHandler.npcs[c.oldNpcIndex].getY();
  584. int offX = (pY - nY)* -1;
  585. int offY = (pX - nX)* -1;
  586. c.getPA().createPlayersProjectile(pX, pY, offX, offY, 50, getProjectileSpeed(), getRangeProjectileGFX(), 43, 31, c.oldNpcIndex + 1, getStartDelay());
  587. if (usingDbow())
  588. c.getPA().createPlayersProjectile2(pX, pY, offX, offY, 50, getProjectileSpeed(), getRangeProjectileGFX(), 60, 31, c.oldNpcIndex + 1, getStartDelay(), 35);
  589. }
  590. }
  591. }
  592.  
  593.  
  594.  
  595. /**
  596. * Attack Players, same as npc tbh xD
  597. **/
  598.  
  599. public void attackPlayer(int i) {
  600. Client e2 = (Client)Server.playerHandler.players[i];
  601. if(c.combatTimer >= 0 && !c.inWild() && !e2.Wild()) {
  602. c.combatTimer = 10;
  603. e2.combatTimer = 10;
  604. }
  605. if (Server.playerHandler.players[i] != null) {
  606.  
  607. if (Server.playerHandler.players[i].isDead) {
  608. resetPlayerAttack();
  609. return;
  610. }
  611.  
  612. if(c.respawnTimer > 0 || Server.playerHandler.players[i].respawnTimer > 0) {
  613. resetPlayerAttack();
  614. return;
  615. }
  616.  
  617. /*if (c.teleTimer > 0 || Server.playerHandler.players[i].teleTimer > 0) {
  618. resetPlayerAttack();
  619. return;
  620. }*/
  621.  
  622. if(!c.getCombat().checkReqs()) {
  623. return;
  624. }
  625.  
  626. //if (c.getPA().getWearingAmount() < 4 && c.duelStatus < 1) {
  627. // c.sendMessage("You must be wearing at least 4 items to attack someone.");
  628. // resetPlayerAttack();
  629. // return;
  630. //}
  631. boolean sameSpot = c.absX == Server.playerHandler.players[i].getX() && c.absY == Server.playerHandler.players[i].getY();
  632. if(!c.goodDistance(Server.playerHandler.players[i].getX(), Server.playerHandler.players[i].getY(), c.getX(), c.getY(), 25) && !sameSpot) {
  633. resetPlayerAttack();
  634. return;
  635. }
  636.  
  637. if(Server.playerHandler.players[i].respawnTimer > 0) {
  638. Server.playerHandler.players[i].playerIndex = 0;
  639. resetPlayerAttack();
  640. return;
  641. }
  642.  
  643. if (Server.playerHandler.players[i].heightLevel != c.heightLevel) {
  644. resetPlayerAttack();
  645. return;
  646. }
  647. //c.sendMessage("Made it here0.");
  648. c.followId = i;
  649. c.followId2 = 0;
  650. if(c.attackTimer <= 0) {
  651. c.usingBow = false;
  652. c.specEffect = 0;
  653. c.usingRangeWeapon = false;
  654. c.rangeItemUsed = 0;
  655. boolean usingBow = false;
  656. boolean usingArrows = false;
  657. boolean usingOtherRangeWeapons = false;
  658. boolean usingCross = c.playerEquipment[c.playerWeapon] == 9185;
  659. c.projectileStage = 0;
  660.  
  661. if (c.absX == Server.playerHandler.players[i].absX && c.absY == Server.playerHandler.players[i].absY) {
  662. if (c.freezeTimer > 0) {
  663. resetPlayerAttack();
  664. return;
  665. }
  666. c.followId = i;
  667. c.attackTimer = 0;
  668. return;
  669. }
  670.  
  671. if ((c.inPirateHouse() && !Server.playerHandler.players[i].inPirateHouse()) || (Server.playerHandler.players[i].inPirateHouse() && !c.inPirateHouse())) {
  672. resetPlayerAttack();
  673. return;
  674. }
  675. //c.sendMessage("Made it here1.");
  676. if(!c.usingMagic) {
  677. for (int bowId : c.BOWS) {
  678. if(c.playerEquipment[c.playerWeapon] == bowId) {
  679. usingBow = true;
  680. for (int arrowId : c.ARROWS) {
  681. if(c.playerEquipment[c.playerArrows] == arrowId) {
  682. usingArrows = true;
  683. }
  684. }
  685. }
  686. }
  687.  
  688. for (int otherRangeId : c.OTHER_RANGE_WEAPONS) {
  689. if(c.playerEquipment[c.playerWeapon] == otherRangeId) {
  690. usingOtherRangeWeapons = true;
  691. }
  692. }
  693. }
  694. if (c.autocasting) {
  695. c.spellId = c.autocastId;
  696. c.usingMagic = true;
  697. }
  698. //c.sendMessage("Made it here2.");
  699. if(c.spellId > 0) {
  700. c.usingMagic = true;
  701. }
  702. c.attackTimer = getAttackDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  703.  
  704. if(c.duelRule[9]){
  705. boolean canUseWeapon = false;
  706. for(int funWeapon: Config.FUN_WEAPONS) {
  707. if(c.playerEquipment[c.playerWeapon] == funWeapon) {
  708. canUseWeapon = true;
  709. }
  710. }
  711. if(!canUseWeapon) {
  712. c.sendMessage("You can only use fun weapons in this duel!");
  713. resetPlayerAttack();
  714. return;
  715. }
  716. }
  717. //c.sendMessage("Made it here3.");
  718. if(c.duelRule[2] && (usingBow || usingOtherRangeWeapons)) {
  719. c.sendMessage("Range has been disabled in this duel!");
  720. return;
  721. }
  722. if(c.duelRule[3] && (!usingBow && !usingOtherRangeWeapons && !c.usingMagic)) {
  723. c.sendMessage("Melee has been disabled in this duel!");
  724. return;
  725. }
  726.  
  727. if(c.duelRule[4] && c.usingMagic) {
  728. c.sendMessage("Magic has been disabled in this duel!");
  729. resetPlayerAttack();
  730. return;
  731. }
  732.  
  733. if((!c.goodDistance(c.getX(), c.getY(), Server.playerHandler.players[i].getX(), Server.playerHandler.players[i].getY(), 4) && (usingOtherRangeWeapons && !usingBow && !c.usingMagic))
  734. || (!c.goodDistance(c.getX(), c.getY(), Server.playerHandler.players[i].getX(), Server.playerHandler.players[i].getY(), 2) && (!usingOtherRangeWeapons && usingHally() && !usingBow && !c.usingMagic))
  735. || (!c.goodDistance(c.getX(), c.getY(), Server.playerHandler.players[i].getX(), Server.playerHandler.players[i].getY(), getRequiredDistance()) && (!usingOtherRangeWeapons && !usingHally() && !usingBow && !c.usingMagic))
  736. || (!c.goodDistance(c.getX(), c.getY(), Server.playerHandler.players[i].getX(), Server.playerHandler.players[i].getY(), 10) && (usingBow || c.usingMagic))) {
  737. //c.sendMessage("Setting attack timer to 1");
  738. c.attackTimer = 1;
  739. if (!usingBow && !c.usingMagic && !usingOtherRangeWeapons && c.freezeTimer > 0)
  740. resetPlayerAttack();
  741. return;
  742. }
  743.  
  744. if(!usingCross && !usingArrows && usingBow && (c.playerEquipment[c.playerWeapon] < 4212 || c.playerEquipment[c.playerWeapon] > 4223) && !c.usingMagic) {
  745. c.sendMessage("You have run out of arrows!");
  746. c.stopMovement();
  747. resetPlayerAttack();
  748. return;
  749. }
  750. if(correctBowAndArrows() < c.playerEquipment[c.playerArrows] && Config.CORRECT_ARROWS && usingBow && !usingCrystalBow() && c.playerEquipment[c.playerWeapon] != 9185 && !c.usingMagic) {
  751. c.sendMessage("You can't use "+c.getItems().getItemName(c.playerEquipment[c.playerArrows]).toLowerCase()+"s with a "+c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase()+".");
  752. c.stopMovement();
  753. resetPlayerAttack();
  754. return;
  755. }
  756. if (c.playerEquipment[c.playerWeapon] == 9185 && !properBolts() && !c.usingMagic) {
  757. c.sendMessage("You must use bolts with a crossbow.");
  758. c.stopMovement();
  759. resetPlayerAttack();
  760. return;
  761. }
  762.  
  763.  
  764. if(usingBow || c.usingMagic || usingOtherRangeWeapons || usingHally()) {
  765. c.stopMovement();
  766. }
  767.  
  768. if(!checkMagicReqs(c.spellId)) {
  769. c.stopMovement();
  770. resetPlayerAttack();
  771. return;
  772. }
  773.  
  774. c.faceUpdate(i+32768);
  775.  
  776. if(c.duelStatus != 5) {
  777. if(!c.attackedPlayers.contains(c.playerIndex) && !Server.playerHandler.players[c.playerIndex].attackedPlayers.contains(c.playerId)) {
  778. c.attackedPlayers.add(c.playerIndex);
  779. c.isSkulled = true;
  780. c.skullTimer = Config.SKULL_TIMER;
  781. c.headIconPk = 0;
  782. c.getPA().requestUpdates();
  783. }
  784. }
  785. c.specAccuracy = 1.0;
  786. c.specDamage = 1.0;
  787. c.delayedDamage = c.delayedDamage2 = 0;
  788. if(c.usingSpecial && !c.usingMagic) {
  789. if(c.duelRule[10] && c.duelStatus == 5) {
  790. c.sendMessage("Special attacks have been disabled during this duel!");
  791. c.usingSpecial = false;
  792. c.getItems().updateSpecialBar();
  793. resetPlayerAttack();
  794. return;
  795. }
  796. if(checkSpecAmount(c.playerEquipment[c.playerWeapon])){
  797. c.lastArrowUsed = c.playerEquipment[c.playerArrows];
  798. activateSpecial(c.playerEquipment[c.playerWeapon], i);
  799. c.followId = c.playerIndex;
  800. return;
  801. } else {
  802. c.sendMessage("You don't have the required special energy to use this attack.");
  803. c.usingSpecial = false;
  804. c.getItems().updateSpecialBar();
  805. c.playerIndex = 0;
  806. return;
  807. }
  808. }
  809.  
  810. if(!c.usingMagic) {
  811. c.startAnimation(getWepAnim(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase()));
  812. c.mageFollow = false;
  813. } else {
  814. c.startAnimation(c.MAGIC_SPELLS[c.spellId][2]);
  815. c.mageFollow = true;
  816. c.followId = c.playerIndex;
  817. }
  818. Server.playerHandler.players[i].underAttackBy = c.playerId;
  819. Server.playerHandler.players[i].logoutDelay = System.currentTimeMillis();
  820. Server.playerHandler.players[i].singleCombatDelay = System.currentTimeMillis();
  821. Server.playerHandler.players[i].killerId = c.playerId;
  822. c.lastArrowUsed = 0;
  823. c.rangeItemUsed = 0;
  824. if(!usingBow && !c.usingMagic && !usingOtherRangeWeapons) { // melee hit delay
  825. c.followId = Server.playerHandler.players[c.playerIndex].playerId;
  826. c.getPA().followPlayer();
  827. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  828. c.delayedDamage = Misc.random(calculateMeleeMaxHit());
  829. c.projectileStage = 0;
  830. c.oldPlayerIndex = i;
  831. }
  832.  
  833. if(usingBow && !usingOtherRangeWeapons && !c.usingMagic || usingCross) { // range hit delay
  834. if(c.playerEquipment[c.playerWeapon] >= 4212 && c.playerEquipment[c.playerWeapon] <= 4223) {
  835. c.rangeItemUsed = c.playerEquipment[c.playerWeapon];
  836. c.crystalBowArrowCount++;
  837. } else {
  838. c.rangeItemUsed = c.playerEquipment[c.playerArrows];
  839. c.getItems().deleteArrow();
  840. }
  841. if (c.fightMode == 2)
  842. c.attackTimer--;
  843. if (usingCross)
  844. c.usingBow = true;
  845. c.usingBow = true;
  846. c.followId = Server.playerHandler.players[c.playerIndex].playerId;
  847. c.getPA().followPlayer();
  848. c.lastWeaponUsed = c.playerEquipment[c.playerWeapon];
  849. c.lastArrowUsed = c.playerEquipment[c.playerArrows];
  850. c.gfx100(getRangeStartGFX());
  851. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  852. c.projectileStage = 1;
  853. c.oldPlayerIndex = i;
  854. fireProjectilePlayer();
  855. }
  856.  
  857. if(usingOtherRangeWeapons) { // knives, darts, etc hit delay
  858. c.rangeItemUsed = c.playerEquipment[c.playerWeapon];
  859. c.getItems().deleteEquipment();
  860. c.usingRangeWeapon = true;
  861. c.followId = Server.playerHandler.players[c.playerIndex].playerId;
  862. c.getPA().followPlayer();
  863. c.gfx100(getRangeStartGFX());
  864. if (c.fightMode == 2)
  865. c.attackTimer--;
  866. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  867. c.projectileStage = 1;
  868. c.oldPlayerIndex = i;
  869. fireProjectilePlayer();
  870. }
  871.  
  872. if(c.usingMagic) { // magic hit delay
  873. int pX = c.getX();
  874. int pY = c.getY();
  875. int nX = Server.playerHandler.players[i].getX();
  876. int nY = Server.playerHandler.players[i].getY();
  877. int offX = (pY - nY)* -1;
  878. int offY = (pX - nX)* -1;
  879. c.castingMagic = true;
  880. c.projectileStage = 2;
  881. if(c.MAGIC_SPELLS[c.spellId][3] > 0) {
  882. if(getStartGfxHeight() == 100) {
  883. c.gfx100(c.MAGIC_SPELLS[c.spellId][3]);
  884. } else {
  885. c.gfx0(c.MAGIC_SPELLS[c.spellId][3]);
  886. }
  887. }
  888. if(c.MAGIC_SPELLS[c.spellId][4] > 0) {
  889. c.getPA().createPlayersProjectile(pX, pY, offX, offY, 50, 78, c.MAGIC_SPELLS[c.spellId][4], getStartHeight(), getEndHeight(), -i - 1, getStartDelay());
  890. }
  891. if (c.autocastId > 0) {
  892. c.followId = c.playerIndex;
  893. c.followDistance = 5;
  894. }
  895. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  896. c.oldPlayerIndex = i;
  897. c.oldSpellId = c.spellId;
  898. c.spellId = 0;
  899. Client o = (Client)Server.playerHandler.players[i];
  900. if(c.MAGIC_SPELLS[c.oldSpellId][0] == 12891 && o.isMoving) {
  901. //c.sendMessage("Barrage projectile..");
  902. c.getPA().createPlayersProjectile(pX, pY, offX, offY, 50, 85, 368, 25, 25, -i - 1, getStartDelay());
  903. }
  904. if(Misc.random(o.getCombat().mageDef()) > Misc.random(mageAtk())) {
  905. c.magicFailed = true;
  906. } else {
  907. c.magicFailed = false;
  908. }
  909. int freezeDelay = getFreezeTime();//freeze time
  910. if(freezeDelay > 0 && Server.playerHandler.players[i].freezeTimer <= -3 && !c.magicFailed) {
  911. Server.playerHandler.players[i].freezeTimer = freezeDelay;
  912. o.resetWalkingQueue();
  913. o.sendMessage("You have been frozen.");
  914. o.frozenBy = c.playerId;
  915. }
  916. if (!c.autocasting && c.spellId <= 0)
  917. c.playerIndex = 0;
  918. }
  919.  
  920. if(usingBow && Config.CRYSTAL_BOW_DEGRADES) { // crystal bow degrading
  921. if(c.playerEquipment[c.playerWeapon] == 4212) { // new crystal bow becomes full bow on the first shot
  922. c.getItems().wearItem(4214, 1, 3);
  923. }
  924.  
  925. if(c.crystalBowArrowCount >= 250){
  926. switch(c.playerEquipment[c.playerWeapon]) {
  927.  
  928. case 4223: // 1/10 bow
  929. c.getItems().wearItem(-1, 1, 3);
  930. c.sendMessage("Your crystal bow has fully degraded.");
  931. if(!c.getItems().addItem(4207, 1)) {
  932. Server.itemHandler.createGroundItem(c, 4207, c.getX(), c.getY(), 1, c.getId());
  933. }
  934. c.crystalBowArrowCount = 0;
  935. break;
  936.  
  937. default:
  938. c.getItems().wearItem(++c.playerEquipment[c.playerWeapon], 1, 3);
  939. c.sendMessage("Your crystal bow degrades.");
  940. c.crystalBowArrowCount = 0;
  941. break;
  942. }
  943. }
  944. }
  945. }
  946. }
  947. }
  948.  
  949. public boolean usingCrystalBow() {
  950. return c.playerEquipment[c.playerWeapon] >= 4212 && c.playerEquipment[c.playerWeapon] <= 4223;
  951. }
  952.  
  953. public void appendVengeance(int otherPlayer, int damage) {
  954. if (damage <= 0)
  955. return;
  956. Player o = Server.playerHandler.players[otherPlayer];
  957. o.forcedText = "Taste vengeance!";
  958. o.forcedChatUpdateRequired = true;
  959. o.updateRequired = true;
  960. o.vengOn = false;
  961. //if ((o.playerLevel[3] - damage) > 0) {
  962. damage = (int)(damage * 0.75);
  963. if (damage > c.playerLevel[3]) {
  964. damage = c.playerLevel[3];
  965. }
  966. c.setHitDiff2(damage);
  967. c.setHitUpdateRequired2(true);
  968. c.playerLevel[3] -= damage;
  969. c.getPA().refreshSkill(3);
  970. //}
  971. c.updateRequired = true;
  972. }
  973.  
  974. public void playerDelayedHit(int i) {
  975. if (Server.playerHandler.players[i] != null) {
  976. if (Server.playerHandler.players[i].isDead || c.isDead || Server.playerHandler.players[i].playerLevel[3] <= 0 || c.playerLevel[3] <= 0) {
  977. c.playerIndex = 0;
  978. return;
  979. }
  980. if (Server.playerHandler.players[i].respawnTimer > 0) {
  981. c.faceUpdate(0);
  982. c.playerIndex = 0;
  983. return;
  984. }
  985. Client o = (Client) Server.playerHandler.players[i];
  986. o.getPA().removeAllWindows();
  987. if (o.playerIndex <= 0 && o.npcIndex <= 0) {
  988. if (o.autoRet == 1) {
  989. o.playerIndex = c.playerId;
  990. }
  991. }
  992. if(o.attackTimer <= 3 || o.attackTimer == 0 && o.playerIndex == 0 && !c.castingMagic) { // block animation
  993. o.startAnimation(o.getCombat().getBlockEmote());
  994. }
  995. if(o.inTrade) {
  996. o.getTradeAndDuel().declineTrade();
  997. }
  998. if(c.projectileStage == 0 && !c.usingMagic && !c.castingMagic) { // melee hit damage
  999. applyPlayerMeleeDamage(i, 1, Misc.random(calculateMeleeMaxHit()));
  1000. if(c.doubleHit && !c.usingClaws) {
  1001. applyPlayerMeleeDamage(i, 2, Misc.random(calculateMeleeMaxHit()));
  1002. }
  1003. if(c.doubleHit && c.usingClaws) {
  1004. applyPlayerMeleeDamage(i, 2, c.previousDamage / 2);
  1005. }
  1006. }
  1007.  
  1008. if(!c.castingMagic && c.projectileStage > 0) { // range hit damage
  1009. int damage = Misc.random(rangeMaxHit());
  1010. int damage2 = -1;
  1011. if (c.lastWeaponUsed == 11235 || c.bowSpecShot == 1)
  1012. damage2 = Misc.random(rangeMaxHit());
  1013. boolean ignoreDef = false;
  1014. if(c.playerEquipment[c.playerWeapon] == 9185) {
  1015. if (Misc.random(4) == 1 && c.lastArrowUsed == 9243) {
  1016. ignoreDef = true;
  1017. o.gfx0(758);
  1018. }
  1019. }
  1020. if(Misc.random(10+o.getCombat().calculateRangeDefence()) > Misc.random(10+calculateRangeAttack()) && !ignoreDef) {
  1021. damage = 0;
  1022. }
  1023. if (Misc.random(4) == 1 && c.lastArrowUsed == 9242 && damage > 0) {
  1024. Server.playerHandler.players[i].gfx0(754);
  1025. damage = Server.npcHandler.npcs[i].HP/5;
  1026. c.handleHitMask(c.playerLevel[3]/10);
  1027. c.dealDamage(c.playerLevel[3]/10);
  1028. c.gfx0(754);
  1029. }
  1030.  
  1031. if (c.lastWeaponUsed == 11235 || c.bowSpecShot == 1) {
  1032. if (Misc.random(10+o.getCombat().calculateRangeDefence()) > Misc.random(10+calculateRangeAttack()))
  1033. damage2 = 0;
  1034. }
  1035.  
  1036. if (c.dbowSpec) {
  1037. o.gfx100(1100);
  1038. if (damage < 8)
  1039. damage = 8;
  1040. if (damage2 < 8)
  1041. damage2 = 8;
  1042. c.dbowSpec = false;
  1043. }
  1044. if(c.playerEquipment[c.playerWeapon] == 9185) {
  1045. if (damage > 0 && Misc.random(5) == 1 && c.lastArrowUsed == 9244) {
  1046. damage *= 1.45;
  1047. o.gfx0(756);
  1048. }
  1049. }
  1050. if(o.prayerActive[17] && System.currentTimeMillis() - o.protRangeDelay > 1500) { // if prayer active reduce damage by half
  1051. damage = (int)damage * 60 / 100;
  1052. if (c.lastWeaponUsed == 11235 || c.bowSpecShot == 1)
  1053. damage2 = (int)damage2 * 60 / 100;
  1054. }
  1055. if (Server.playerHandler.players[i].playerLevel[3] - damage < 0) {
  1056. damage = Server.playerHandler.players[i].playerLevel[3];
  1057. }
  1058. if (Server.playerHandler.players[i].playerLevel[3] - damage - damage2 < 0) {
  1059. damage2 = Server.playerHandler.players[i].playerLevel[3] - damage;
  1060. }
  1061. if (damage < 0)
  1062. damage = 0;
  1063. if (damage2 < 0 && damage2 != -1)
  1064. damage2 = 0;
  1065. if (o.vengOn) {
  1066. appendVengeance(i, damage);
  1067. appendVengeance(i, damage2);
  1068. }
  1069. if (damage > 0)
  1070. applyRecoil(damage, i);
  1071. if (damage2 > 0)
  1072. applyRecoil(damage2, i);
  1073. if(c.fightMode == 3) {
  1074. c.getPA().addSkillXP((damage*Config.RANGE_EXP_RATE/3), 4);
  1075. c.getPA().addSkillXP((damage*Config.RANGE_EXP_RATE/3), 1);
  1076. c.getPA().addSkillXP((damage*Config.RANGE_EXP_RATE/3), 3);
  1077. c.getPA().refreshSkill(1);
  1078. c.getPA().refreshSkill(3);
  1079. c.getPA().refreshSkill(4);
  1080. } else {
  1081. c.getPA().addSkillXP((damage*Config.RANGE_EXP_RATE), 4);
  1082. c.getPA().addSkillXP((damage*Config.RANGE_EXP_RATE/3), 3);
  1083. c.getPA().refreshSkill(3);
  1084. c.getPA().refreshSkill(4);
  1085. }
  1086. boolean dropArrows = true;
  1087.  
  1088. for(int noArrowId : c.NO_ARROW_DROP) {
  1089. if(c.lastWeaponUsed == noArrowId) {
  1090. dropArrows = false;
  1091. break;
  1092. }
  1093. }
  1094. if(dropArrows) {
  1095. c.getItems().dropArrowPlayer();
  1096. }
  1097. Server.playerHandler.players[i].underAttackBy = c.playerId;
  1098. Server.playerHandler.players[i].logoutDelay = System.currentTimeMillis();
  1099. Server.playerHandler.players[i].singleCombatDelay = System.currentTimeMillis();
  1100. Server.playerHandler.players[i].killerId = c.playerId;
  1101. //Server.playerHandler.players[i].setHitDiff(damage);
  1102. //Server.playerHandler.players[i].playerLevel[3] -= damage;
  1103. Server.playerHandler.players[i].dealDamage(damage);
  1104. Server.playerHandler.players[i].damageTaken[c.playerId] += damage;
  1105. c.killedBy = Server.playerHandler.players[i].playerId;
  1106. Server.playerHandler.players[i].handleHitMask(damage);
  1107. if (damage2 != -1) {
  1108. //Server.playerHandler.players[i].playerLevel[3] -= damage2;
  1109. Server.playerHandler.players[i].dealDamage(damage2);
  1110. Server.playerHandler.players[i].damageTaken[c.playerId] += damage2;
  1111. Server.playerHandler.players[i].handleHitMask(damage2);
  1112.  
  1113. }
  1114. o.getPA().refreshSkill(3);
  1115.  
  1116. //Server.playerHandler.players[i].setHitUpdateRequired(true);
  1117. Server.playerHandler.players[i].updateRequired = true;
  1118. applySmite(i, damage);
  1119. if (damage2 != -1)
  1120. applySmite(i, damage2);
  1121.  
  1122. } else if (c.projectileStage > 0) { // magic hit damage
  1123. int damage = Misc.random(c.MAGIC_SPELLS[c.oldSpellId][6] + c.totalMagicBonus());
  1124. if(godSpells()) {
  1125. if(System.currentTimeMillis() - c.godSpellDelay < Config.GOD_SPELL_CHARGE) {
  1126. damage += 10;
  1127. }
  1128. }
  1129. //c.playerIndex = 0;
  1130. if (c.magicFailed)
  1131. damage = 0;
  1132.  
  1133. if(o.prayerActive[16] && System.currentTimeMillis() - o.protMageDelay > 1500) { // if prayer active reduce damage by half
  1134. damage = (int)damage * 60 / 100;
  1135. }
  1136. if (Server.playerHandler.players[i].playerLevel[3] - damage < 0) {
  1137. damage = Server.playerHandler.players[i].playerLevel[3];
  1138. }
  1139. if (o.vengOn)
  1140. appendVengeance(i, damage);
  1141. if (damage > 0)
  1142. applyRecoil(damage, i);
  1143. c.getPA().addSkillXP((c.MAGIC_SPELLS[c.oldSpellId][7] + damage*Config.MAGIC_EXP_RATE), 6);
  1144. c.getPA().addSkillXP((c.MAGIC_SPELLS[c.oldSpellId][7] + damage*Config.MAGIC_EXP_RATE/3), 3);
  1145. c.getPA().refreshSkill(3);
  1146. c.getPA().refreshSkill(6);
  1147.  
  1148. if(getEndGfxHeight() == 100 && !c.magicFailed){ // end GFX
  1149. Server.playerHandler.players[i].gfx100(c.MAGIC_SPELLS[c.oldSpellId][5]);
  1150. } else if (!c.magicFailed){
  1151. Server.playerHandler.players[i].gfx0(c.MAGIC_SPELLS[c.oldSpellId][5]);
  1152. } else if(c.magicFailed) {
  1153. Server.playerHandler.players[i].gfx100(85);
  1154. }
  1155.  
  1156. if(!c.magicFailed) {
  1157. if(System.currentTimeMillis() - Server.playerHandler.players[i].reduceStat > 35000) {
  1158. Server.playerHandler.players[i].reduceStat = System.currentTimeMillis();
  1159. switch(c.MAGIC_SPELLS[c.oldSpellId][0]) {
  1160. case 12987:
  1161. case 13011:
  1162. case 12999:
  1163. case 13023:
  1164. Server.playerHandler.players[i].playerLevel[0] -= ((o.getPA().getLevelForXP(Server.playerHandler.players[i].playerXP[0]) * 10) / 100);
  1165. break;
  1166. }
  1167. }
  1168.  
  1169. switch(c.MAGIC_SPELLS[c.oldSpellId][0]) {
  1170. case 12445: //teleblock
  1171. if (System.currentTimeMillis() - o.teleBlockDelay > o.teleBlockLength) {
  1172. o.teleBlockDelay = System.currentTimeMillis();
  1173. o.sendMessage("You have been teleblocked.");
  1174. if (o.prayerActive[16] && System.currentTimeMillis() - o.protMageDelay > 1500)
  1175. o.teleBlockLength = 500000;
  1176. else
  1177. o.teleBlockLength = 500000;
  1178. }
  1179. break;
  1180.  
  1181. case 12901:
  1182. case 12919: // blood spells
  1183. case 12911:
  1184. case 12929:
  1185. int heal = (int)(damage / 4);
  1186. if(c.playerLevel[3] + heal > c.getPA().getLevelForXP(c.playerXP[3])) {
  1187. c.playerLevel[3] = c.getPA().getLevelForXP(c.playerXP[3]);
  1188. } else {
  1189. c.playerLevel[3] += heal;
  1190. }
  1191. c.getPA().refreshSkill(3);
  1192. break;
  1193.  
  1194. case 1153:
  1195. Server.playerHandler.players[i].playerLevel[0] -= ((o.getPA().getLevelForXP(Server.playerHandler.players[i].playerXP[0]) * 5) / 100);
  1196. o.sendMessage("Your attack level has been reduced!");
  1197. Server.playerHandler.players[i].reduceSpellDelay[c.reduceSpellId] = System.currentTimeMillis();
  1198. o.getPA().refreshSkill(0);
  1199. break;
  1200.  
  1201. case 1157:
  1202. Server.playerHandler.players[i].playerLevel[2] -= ((o.getPA().getLevelForXP(Server.playerHandler.players[i].playerXP[2]) * 5) / 100);
  1203. o.sendMessage("Your strength level has been reduced!");
  1204. Server.playerHandler.players[i].reduceSpellDelay[c.reduceSpellId] = System.currentTimeMillis();
  1205. o.getPA().refreshSkill(2);
  1206. break;
  1207.  
  1208. case 1161:
  1209. Server.playerHandler.players[i].playerLevel[1] -= ((o.getPA().getLevelForXP(Server.playerHandler.players[i].playerXP[1]) * 5) / 100);
  1210. o.sendMessage("Your defence level has been reduced!");
  1211. Server.playerHandler.players[i].reduceSpellDelay[c.reduceSpellId] = System.currentTimeMillis();
  1212. o.getPA().refreshSkill(1);
  1213. break;
  1214.  
  1215. case 1542:
  1216. Server.playerHandler.players[i].playerLevel[1] -= ((o.getPA().getLevelForXP(Server.playerHandler.players[i].playerXP[1]) * 10) / 100);
  1217. o.sendMessage("Your defence level has been reduced!");
  1218. Server.playerHandler.players[i].reduceSpellDelay[c.reduceSpellId] = System.currentTimeMillis();
  1219. o.getPA().refreshSkill(1);
  1220. break;
  1221.  
  1222. case 1543:
  1223. Server.playerHandler.players[i].playerLevel[2] -= ((o.getPA().getLevelForXP(Server.playerHandler.players[i].playerXP[2]) * 10) / 100);
  1224. o.sendMessage("Your strength level has been reduced!");
  1225. Server.playerHandler.players[i].reduceSpellDelay[c.reduceSpellId] = System.currentTimeMillis();
  1226. o.getPA().refreshSkill(2);
  1227. break;
  1228.  
  1229. case 1562:
  1230. Server.playerHandler.players[i].playerLevel[0] -= ((o.getPA().getLevelForXP(Server.playerHandler.players[i].playerXP[0]) * 10) / 100);
  1231. o.sendMessage("Your attack level has been reduced!");
  1232. Server.playerHandler.players[i].reduceSpellDelay[c.reduceSpellId] = System.currentTimeMillis();
  1233. o.getPA().refreshSkill(0);
  1234. break;
  1235. }
  1236. }
  1237.  
  1238. Server.playerHandler.players[i].logoutDelay = System.currentTimeMillis();
  1239. Server.playerHandler.players[i].underAttackBy = c.playerId;
  1240. Server.playerHandler.players[i].killerId = c.playerId;
  1241. Server.playerHandler.players[i].singleCombatDelay = System.currentTimeMillis();
  1242. if(c.MAGIC_SPELLS[c.oldSpellId][6] != 0) {
  1243. //Server.playerHandler.players[i].playerLevel[3] -= damage;
  1244. Server.playerHandler.players[i].dealDamage(damage);
  1245. Server.playerHandler.players[i].damageTaken[c.playerId] += damage;
  1246. c.totalPlayerDamageDealt += damage;
  1247. if (!c.magicFailed) {
  1248. //Server.playerHandler.players[i].setHitDiff(damage);
  1249. //Server.playerHandler.players[i].setHitUpdateRequired(true);
  1250. Server.playerHandler.players[i].handleHitMask(damage);
  1251. }
  1252. }
  1253. applySmite(i, damage);
  1254. c.killedBy = Server.playerHandler.players[i].playerId;
  1255. o.getPA().refreshSkill(3);
  1256. Server.playerHandler.players[i].updateRequired = true;
  1257. c.usingMagic = false;
  1258. c.castingMagic = false;
  1259. if (o.inMulti() && multis()) {
  1260. c.barrageCount = 0;
  1261. for (int j = 0; j < Server.playerHandler.players.length; j++) {
  1262. if (Server.playerHandler.players[j] != null) {
  1263. if (j == o.playerId)
  1264. continue;
  1265. if (c.barrageCount >= 9)
  1266. break;
  1267. if (o.goodDistance(o.getX(), o.getY(), Server.playerHandler.players[j].getX(), Server.playerHandler.players[j].getY(), 1))
  1268. appendMultiBarrage(j, c.magicFailed);
  1269. }
  1270. }
  1271. }
  1272. c.getPA().refreshSkill(3);
  1273. c.getPA().refreshSkill(6);
  1274. c.oldSpellId = 0;
  1275. }
  1276. }
  1277. c.getPA().requestUpdates();
  1278. int oldindex = c.oldPlayerIndex;
  1279. if(c.bowSpecShot <= 0) {
  1280. c.oldPlayerIndex = 0;
  1281. c.projectileStage = 0;
  1282. c.lastWeaponUsed = 0;
  1283. c.doubleHit = false;
  1284. c.bowSpecShot = 0;
  1285. }
  1286. if(c.bowSpecShot != 0) {
  1287. c.bowSpecShot = 0;
  1288. }
  1289. }
  1290.  
  1291. public boolean multis() {
  1292. switch (c.MAGIC_SPELLS[c.oldSpellId][0]) {
  1293. case 12891:
  1294. case 12881:
  1295. case 13011:
  1296. case 13023:
  1297. case 12919: // blood spells
  1298. case 12929:
  1299. case 12963:
  1300. case 12975:
  1301. return true;
  1302. }
  1303. return false;
  1304.  
  1305. }
  1306. public void appendMultiBarrage(int playerId, boolean splashed) {
  1307. if (Server.playerHandler.players[playerId] != null) {
  1308. Client c2 = (Client)Server.playerHandler.players[playerId];
  1309. if (c2.isDead || c2.respawnTimer > 0)
  1310. return;
  1311. if (checkMultiBarrageReqs(playerId)) {
  1312. c.barrageCount++;
  1313. if (Misc.random(mageAtk()) > Misc.random(mageDef()) && !c.magicFailed) {
  1314. if(getEndGfxHeight() == 100){ // end GFX
  1315. c2.gfx100(c.MAGIC_SPELLS[c.oldSpellId][5]);
  1316. } else {
  1317. c2.gfx0(c.MAGIC_SPELLS[c.oldSpellId][5]);
  1318. }
  1319. int damage = Misc.random(c.MAGIC_SPELLS[c.oldSpellId][6]);
  1320. if (c2.prayerActive[12]) {
  1321. damage *= (int)(.60);
  1322. }
  1323. if (c2.playerLevel[3] - damage < 0) {
  1324. damage = c2.playerLevel[3];
  1325. }
  1326. c.getPA().addSkillXP((c.MAGIC_SPELLS[c.oldSpellId][7] + damage*Config.MAGIC_EXP_RATE), 6);
  1327. c.getPA().addSkillXP((c.MAGIC_SPELLS[c.oldSpellId][7] + damage*Config.MAGIC_EXP_RATE/3), 3);
  1328. //Server.playerHandler.players[playerId].setHitDiff(damage);
  1329. //Server.playerHandler.players[playerId].setHitUpdateRequired(true);
  1330. Server.playerHandler.players[playerId].handleHitMask(damage);
  1331. //Server.playerHandler.players[playerId].playerLevel[3] -= damage;
  1332. Server.playerHandler.players[playerId].dealDamage(damage);
  1333. Server.playerHandler.players[playerId].damageTaken[c.playerId] += damage;
  1334. c2.getPA().refreshSkill(3);
  1335. c.totalPlayerDamageDealt += damage;
  1336. multiSpellEffect(playerId, damage);
  1337. } else {
  1338. c2.gfx100(85);
  1339. }
  1340. }
  1341. }
  1342. }
  1343.  
  1344. public void multiSpellEffect(int playerId, int damage) {
  1345. switch(c.MAGIC_SPELLS[c.oldSpellId][0]) {
  1346. case 13011:
  1347. case 13023:
  1348. if(System.currentTimeMillis() - Server.playerHandler.players[playerId].reduceStat > 35000) {
  1349. Server.playerHandler.players[playerId].reduceStat = System.currentTimeMillis();
  1350. Server.playerHandler.players[playerId].playerLevel[0] -= ((Server.playerHandler.players[playerId].getLevelForXP(Server.playerHandler.players[playerId].playerXP[0]) * 10) / 100);
  1351. }
  1352. break;
  1353. case 12919: // blood spells
  1354. case 12929:
  1355. int heal = (int)(damage / 4);
  1356. if(c.playerLevel[3] + heal >= c.getPA().getLevelForXP(c.playerXP[3])) {
  1357. c.playerLevel[3] = c.getPA().getLevelForXP(c.playerXP[3]);
  1358. } else {
  1359. c.playerLevel[3] += heal;
  1360. }
  1361. c.getPA().refreshSkill(3);
  1362. break;
  1363. case 12891:
  1364. case 12881:
  1365. if (Server.playerHandler.players[playerId].freezeTimer < -4) {
  1366. Server.playerHandler.players[playerId].freezeTimer = getFreezeTime();
  1367. Server.playerHandler.players[playerId].stopMovement();
  1368. }
  1369. break;
  1370. }
  1371. }
  1372.  
  1373. public void applyPlayerMeleeDamage(int i, int damageMask, int damage){
  1374. c.previousDamage = damage;
  1375. Client o = (Client) Server.playerHandler.players[i];
  1376. if(o == null) {
  1377. return;
  1378. }
  1379. int damage1 = 0;
  1380. boolean veracsEffect = false;
  1381. boolean guthansEffect = false;
  1382. if (c.getPA().fullVeracs()) {
  1383. if (Misc.random(4) == 1) {
  1384. veracsEffect = true;
  1385. }
  1386. }
  1387. if (c.getPA().fullGuthans()) {
  1388. if (Misc.random(4) == 1) {
  1389. guthansEffect = true;
  1390. }
  1391. }
  1392. if (damageMask == 1) {
  1393. damage1 = c.delayedDamage;
  1394. c.delayedDamage = 0;
  1395. } else {
  1396. damage1 = c.delayedDamage2;
  1397. c.delayedDamage2 = 0;
  1398. }
  1399. if(Misc.random(o.getCombat().calculateMeleeDefence()) > Misc.random(calculateMeleeAttack()) && !veracsEffect) {
  1400. damage1 = 0;
  1401. c.bonusAttack = 0;
  1402. } else if (c.playerEquipment[c.playerWeapon] == 5698 && o.poisonDamage <= 0 && Misc.random(3) == 1) {
  1403. o.getPA().appendPoison(13);
  1404. c.bonusAttack += damage1/3;
  1405. } else {
  1406. c.bonusAttack += damage1/3;
  1407. }
  1408. if(o.prayerActive[18] && System.currentTimeMillis() - o.protMeleeDelay > 1500 && !veracsEffect) { // if prayer active reduce damage by 40%
  1409. damage1 = (int)damage1 * 60 / 100;
  1410. }
  1411. if (c.maxNextHit) {
  1412. damage1 = calculateMeleeMaxHit();
  1413. }
  1414. if (damage1 > 0 && guthansEffect) {
  1415. c.playerLevel[3] += damage1;
  1416. if (c.playerLevel[3] > c.getLevelForXP(c.playerXP[3]))
  1417. c.playerLevel[3] = c.getLevelForXP(c.playerXP[3]);
  1418. c.getPA().refreshSkill(3);
  1419. o.gfx0(398);
  1420. }
  1421. if (c.ssSpec && damageMask == 2) {
  1422. damage1 = 5 + Misc.random(11);
  1423. c.ssSpec = false;
  1424. }
  1425. if (Server.playerHandler.players[i].playerLevel[3] - damage1 < 0) {
  1426. damage1 = Server.playerHandler.players[i].playerLevel[3];
  1427. }
  1428. if (o.vengOn && damage1 > 0)
  1429. appendVengeance(i, damage1);
  1430. if (damage1 > 0)
  1431. applyRecoil(damage1, i);
  1432. switch(c.specEffect) {
  1433. case 1: // dragon scimmy special
  1434. if(damage1 > 0) {
  1435. if(o.prayerActive[16] || o.prayerActive[17] || o.prayerActive[18]) {
  1436. o.headIcon = -1;
  1437. o.getPA().sendFrame36(c.PRAYER_GLOW[16], 0);
  1438. o.getPA().sendFrame36(c.PRAYER_GLOW[17], 0);
  1439. o.getPA().sendFrame36(c.PRAYER_GLOW[18], 0);
  1440. }
  1441. o.sendMessage("You have been injured!");
  1442. o.stopPrayerDelay = System.currentTimeMillis();
  1443. o.prayerActive[16] = false;
  1444. o.prayerActive[17] = false;
  1445. o.prayerActive[18] = false;
  1446. o.getPA().requestUpdates();
  1447. }
  1448. break;
  1449. case 2:
  1450. if (damage1 > 0) {
  1451. if (o.freezeTimer <= 0)
  1452. o.freezeTimer = 30;
  1453. o.gfx0(369);
  1454. o.sendMessage("You have been frozen.");
  1455. o.frozenBy = c.playerId;
  1456. o.stopMovement();
  1457. c.sendMessage("You freeze your enemy.");
  1458. }
  1459. break;
  1460. case 3:
  1461. if (damage1 > 0) {
  1462. o.playerLevel[1] -= damage1;
  1463. o.sendMessage("You feel weak.");
  1464. if (o.playerLevel[1] < 1)
  1465. o.playerLevel[1] = 1;
  1466. o.getPA().refreshSkill(1);
  1467. }
  1468. break;
  1469. case 4:
  1470. if (damage1 > 0) {
  1471. if (c.playerLevel[3] + damage1 > c.getLevelForXP(c.playerXP[3]))
  1472. if (c.playerLevel[3] > c.getLevelForXP(c.playerXP[3]));
  1473. else
  1474. c.playerLevel[3] = c.getLevelForXP(c.playerXP[3]);
  1475. else
  1476. c.playerLevel[3] += damage1;
  1477. c.getPA().refreshSkill(3);
  1478. }
  1479. break;
  1480. case 5:
  1481. c.clawDelay = 2;
  1482. break;
  1483. }
  1484. c.specEffect = 0;
  1485. if(c.fightMode == 3) {
  1486. c.getPA().addSkillXP((damage1*Config.MELEE_EXP_RATE/3), 0);
  1487. c.getPA().addSkillXP((damage1*Config.MELEE_EXP_RATE/3), 1);
  1488. c.getPA().addSkillXP((damage1*Config.MELEE_EXP_RATE/3), 2);
  1489. c.getPA().addSkillXP((damage1*Config.MELEE_EXP_RATE/3), 3);
  1490. c.getPA().refreshSkill(0);
  1491. c.getPA().refreshSkill(1);
  1492. c.getPA().refreshSkill(2);
  1493. c.getPA().refreshSkill(3);
  1494. } else {
  1495. c.getPA().addSkillXP((damage1*Config.MELEE_EXP_RATE), c.fightMode);
  1496. c.getPA().addSkillXP((damage1*Config.MELEE_EXP_RATE/3), 3);
  1497. c.getPA().refreshSkill(c.fightMode);
  1498. c.getPA().refreshSkill(3);
  1499. }
  1500. Server.playerHandler.players[i].logoutDelay = System.currentTimeMillis();
  1501. Server.playerHandler.players[i].underAttackBy = c.playerId;
  1502. Server.playerHandler.players[i].killerId = c.playerId;
  1503. Server.playerHandler.players[i].singleCombatDelay = System.currentTimeMillis();
  1504. if (c.killedBy != Server.playerHandler.players[i].playerId)
  1505. c.totalPlayerDamageDealt = 0;
  1506. c.killedBy = Server.playerHandler.players[i].playerId;
  1507. applySmite(i, damage1);
  1508. switch(damageMask) {
  1509. case 1:
  1510. /*if (!Server.playerHandler.players[i].getHitUpdateRequired()){
  1511. Server.playerHandler.players[i].setHitDiff(damage);
  1512. Server.playerHandler.players[i].setHitUpdateRequired(true);
  1513. } else {
  1514. Server.playerHandler.players[i].setHitDiff2(damage);
  1515. Server.playerHandler.players[i].setHitUpdateRequired2(true);
  1516. }*/
  1517. //Server.playerHandler.players[i].playerLevel[3] -= damage1;
  1518. Server.playerHandler.players[i].dealDamage(damage1);
  1519. Server.playerHandler.players[i].damageTaken[c.playerId] += damage1;
  1520. c.totalPlayerDamageDealt += damage1;
  1521. Server.playerHandler.players[i].updateRequired = true;
  1522. o.getPA().refreshSkill(3);
  1523. break;
  1524.  
  1525. case 2:
  1526. /*if (!Server.playerHandler.players[i].getHitUpdateRequired2()){
  1527. Server.playerHandler.players[i].setHitDiff2(damage);
  1528. Server.playerHandler.players[i].setHitUpdateRequired2(true);
  1529. } else {
  1530. Server.playerHandler.players[i].setHitDiff(damage);
  1531. Server.playerHandler.players[i].setHitUpdateRequired(true);
  1532. }*/
  1533. //Server.playerHandler.players[i].playerLevel[3] -= damage1;
  1534. Server.playerHandler.players[i].dealDamage(damage1);
  1535. Server.playerHandler.players[i].damageTaken[c.playerId] += damage1;
  1536. c.totalPlayerDamageDealt += damage1;
  1537. Server.playerHandler.players[i].updateRequired = true;
  1538. c.doubleHit = false;
  1539. o.getPA().refreshSkill(3);
  1540. break;
  1541. }
  1542. Server.playerHandler.players[i].handleHitMask(damage1);
  1543. }
  1544.  
  1545. public void applySmite(int index, int damage) {
  1546. if (!c.prayerActive[23])
  1547. return;
  1548. if (damage <= 0)
  1549. return;
  1550. if (Server.playerHandler.players[index] != null) {
  1551. Client c2 = (Client)Server.playerHandler.players[index];
  1552. c2.playerLevel[5] -= (int)(damage/4);
  1553. if (c2.playerLevel[5] <= 0) {
  1554. c2.playerLevel[5] = 0;
  1555. c2.getCombat().resetPrayers();
  1556. }
  1557. c2.getPA().refreshSkill(5);
  1558. }
  1559.  
  1560. }
  1561.  
  1562. public void fireProjectilePlayer() {
  1563. if(c.oldPlayerIndex > 0) {
  1564. if(Server.playerHandler.players[c.oldPlayerIndex] != null) {
  1565. c.projectileStage = 2;
  1566. int pX = c.getX();
  1567. int pY = c.getY();
  1568. int oX = Server.playerHandler.players[c.oldPlayerIndex].getX();
  1569. int oY = Server.playerHandler.players[c.oldPlayerIndex].getY();
  1570. int offX = (pY - oY)* -1;
  1571. int offY = (pX - oX)* -1;
  1572. if (!c.msbSpec)
  1573. c.getPA().createPlayersProjectile(pX, pY, offX, offY, 50, getProjectileSpeed(), getRangeProjectileGFX(), 43, 31, - c.oldPlayerIndex - 1, getStartDelay());
  1574. else if (c.msbSpec) {
  1575. c.getPA().createPlayersProjectile2(pX, pY, offX, offY, 50, getProjectileSpeed(), getRangeProjectileGFX(), 43, 31, - c.oldPlayerIndex - 1, getStartDelay(), 10);
  1576. c.msbSpec = false;
  1577. }
  1578. if (usingDbow())
  1579. c.getPA().createPlayersProjectile2(pX, pY, offX, offY, 50, getProjectileSpeed(), getRangeProjectileGFX(), 60, 31, - c.oldPlayerIndex - 1, getStartDelay(), 35);
  1580. }
  1581. }
  1582. }
  1583.  
  1584. public boolean usingDbow() {
  1585. return c.playerEquipment[c.playerWeapon] == 11235;
  1586. }
  1587.  
  1588.  
  1589.  
  1590.  
  1591.  
  1592. /**Prayer**/
  1593.  
  1594. public void activatePrayer(int i) {
  1595. if(c.duelRule[7]){
  1596. for(int p = 0; p < c.PRAYER.length; p++) { // reset prayer glows
  1597. c.prayerActive[p] = false;
  1598. c.getPA().sendFrame36(c.PRAYER_GLOW[p], 0);
  1599. }
  1600. c.sendMessage("Prayer has been disabled in this duel!");
  1601. return;
  1602. }
  1603. if (i == 24 && c.playerLevel[1] < 60) {
  1604. c.getPA().sendFrame36(c.PRAYER_GLOW[i], 0);
  1605. c.sendMessage("You need 60 defence and 65 prayer to use this.");
  1606. return;
  1607. }
  1608. if (i == 25 && c.playerLevel[1] < 70) {
  1609. c.getPA().sendFrame36(c.PRAYER_GLOW[i], 0);
  1610. c.sendMessage("You need 70 defence and 70 prayer to use this.");
  1611. return;
  1612. }
  1613. int[] defPray = {0,5,13,24,25};
  1614. int[] strPray = {1,6,14,24,25};
  1615. int[] atkPray = {2,7,15,24,25};
  1616. int[] rangePray = {3,11,19};
  1617. int[] magePray = {4,12,20};
  1618.  
  1619. if(c.playerLevel[5] > 0 || !Config.PRAYER_POINTS_REQUIRED){
  1620. if(c.getPA().getLevelForXP(c.playerXP[5]) >= c.PRAYER_LEVEL_REQUIRED[i] || !Config.PRAYER_LEVEL_REQUIRED) {
  1621. boolean headIcon = false;
  1622. switch(i) {
  1623. case 0:
  1624. case 5:
  1625. case 13:
  1626. if(c.prayerActive[i] == false) {
  1627. for (int j = 0; j < defPray.length; j++) {
  1628. if (defPray[j] != i) {
  1629. c.prayerActive[defPray[j]] = false;
  1630. c.getPA().sendFrame36(c.PRAYER_GLOW[defPray[j]], 0);
  1631. }
  1632. }
  1633. }
  1634. break;
  1635.  
  1636. case 1:
  1637. case 6:
  1638. case 14:
  1639. if(c.prayerActive[i] == false) {
  1640. for (int j = 0; j < strPray.length; j++) {
  1641. if (strPray[j] != i) {
  1642. c.prayerActive[strPray[j]] = false;
  1643. c.getPA().sendFrame36(c.PRAYER_GLOW[strPray[j]], 0);
  1644. }
  1645. }
  1646. for (int j = 0; j < rangePray.length; j++) {
  1647. if (rangePray[j] != i) {
  1648. c.prayerActive[rangePray[j]] = false;
  1649. c.getPA().sendFrame36(c.PRAYER_GLOW[rangePray[j]], 0);
  1650. }
  1651. }
  1652. for (int j = 0; j < magePray.length; j++) {
  1653. if (magePray[j] != i) {
  1654. c.prayerActive[magePray[j]] = false;
  1655. c.getPA().sendFrame36(c.PRAYER_GLOW[magePray[j]], 0);
  1656. }
  1657. }
  1658. }
  1659. break;
  1660.  
  1661. case 2:
  1662. case 7:
  1663. case 15:
  1664. if(c.prayerActive[i] == false) {
  1665. for (int j = 0; j < atkPray.length; j++) {
  1666. if (atkPray[j] != i) {
  1667. c.prayerActive[atkPray[j]] = false;
  1668. c.getPA().sendFrame36(c.PRAYER_GLOW[atkPray[j]], 0);
  1669. }
  1670. }
  1671. for (int j = 0; j < rangePray.length; j++) {
  1672. if (rangePray[j] != i) {
  1673. c.prayerActive[rangePray[j]] = false;
  1674. c.getPA().sendFrame36(c.PRAYER_GLOW[rangePray[j]], 0);
  1675. }
  1676. }
  1677. for (int j = 0; j < magePray.length; j++) {
  1678. if (magePray[j] != i) {
  1679. c.prayerActive[magePray[j]] = false;
  1680. c.getPA().sendFrame36(c.PRAYER_GLOW[magePray[j]], 0);
  1681. }
  1682. }
  1683. }
  1684. break;
  1685.  
  1686. case 3://range prays
  1687. case 11:
  1688. case 19:
  1689. if(c.prayerActive[i] == false) {
  1690. for (int j = 0; j < atkPray.length; j++) {
  1691. if (atkPray[j] != i) {
  1692. c.prayerActive[atkPray[j]] = false;
  1693. c.getPA().sendFrame36(c.PRAYER_GLOW[atkPray[j]], 0);
  1694. }
  1695. }
  1696. for (int j = 0; j < strPray.length; j++) {
  1697. if (strPray[j] != i) {
  1698. c.prayerActive[strPray[j]] = false;
  1699. c.getPA().sendFrame36(c.PRAYER_GLOW[strPray[j]], 0);
  1700. }
  1701. }
  1702. for (int j = 0; j < rangePray.length; j++) {
  1703. if (rangePray[j] != i) {
  1704. c.prayerActive[rangePray[j]] = false;
  1705. c.getPA().sendFrame36(c.PRAYER_GLOW[rangePray[j]], 0);
  1706. }
  1707. }
  1708. for (int j = 0; j < magePray.length; j++) {
  1709. if (magePray[j] != i) {
  1710. c.prayerActive[magePray[j]] = false;
  1711. c.getPA().sendFrame36(c.PRAYER_GLOW[magePray[j]], 0);
  1712. }
  1713. }
  1714. }
  1715. break;
  1716. case 4:
  1717. case 12:
  1718. case 20:
  1719. if(c.prayerActive[i] == false) {
  1720. for (int j = 0; j < atkPray.length; j++) {
  1721. if (atkPray[j] != i) {
  1722. c.prayerActive[atkPray[j]] = false;
  1723. c.getPA().sendFrame36(c.PRAYER_GLOW[atkPray[j]], 0);
  1724. }
  1725. }
  1726. for (int j = 0; j < strPray.length; j++) {
  1727. if (strPray[j] != i) {
  1728. c.prayerActive[strPray[j]] = false;
  1729. c.getPA().sendFrame36(c.PRAYER_GLOW[strPray[j]], 0);
  1730. }
  1731. }
  1732. for (int j = 0; j < rangePray.length; j++) {
  1733. if (rangePray[j] != i) {
  1734. c.prayerActive[rangePray[j]] = false;
  1735. c.getPA().sendFrame36(c.PRAYER_GLOW[rangePray[j]], 0);
  1736. }
  1737. }
  1738. for (int j = 0; j < magePray.length; j++) {
  1739. if (magePray[j] != i) {
  1740. c.prayerActive[magePray[j]] = false;
  1741. c.getPA().sendFrame36(c.PRAYER_GLOW[magePray[j]], 0);
  1742. }
  1743. }
  1744. }
  1745. break;
  1746. case 10:
  1747. c.lastProtItem = System.currentTimeMillis();
  1748. break;
  1749.  
  1750.  
  1751. case 16:
  1752. case 17:
  1753. case 18:
  1754. if((c.absX <= 1990 && c.absX >= 1960 && c.absY <= 5020 && c.absY >= 4980)) {
  1755. c.playerLevel[5] = 0;
  1756. c.sendMessage("Barrelchest's aura deactivates your prayer!");
  1757. c.headIcon = -1;
  1758. int skill = 5;
  1759.  
  1760. c.getPA().refreshSkill(skill);
  1761. c.attackSkill = false;
  1762. c.defenceSkill = false;
  1763. c.strengthSkill = false;
  1764. c.healthSkill = false;
  1765. c.rangeSkill = false;
  1766. c.prayerSkill = false;
  1767. c.mageSkill = false;
  1768. c.prayerActive[0] = false;
  1769. c.prayerActive[1] = false;
  1770. c.prayerActive[2] = false;
  1771. c.prayerActive[3] = false;
  1772. c.prayerActive[4] = false;
  1773. c.prayerActive[5] = false;
  1774. c.prayerActive[6] = false;
  1775. c.prayerActive[7] = false;
  1776. c.prayerActive[8] = false;
  1777. c.prayerActive[9] = false;
  1778. c.prayerActive[10] = false;
  1779. c.prayerActive[11] = false;
  1780. c.prayerActive[12] = false;
  1781. c.prayerActive[13] = false;
  1782. c.prayerActive[14] = false;
  1783. c.prayerActive[15] = false;
  1784. c.prayerActive[16] = false;
  1785. c.prayerActive[17] = false;
  1786. c.prayerActive[18] = false;
  1787. c.prayerActive[19] = false;
  1788. c.prayerActive[20] = false;
  1789. c.prayerActive[21] = false;
  1790. c.prayerActive[22] = false;
  1791. c.prayerActive[23] = false;
  1792. c.prayerActive[24] = false;
  1793. c.prayerActive[25] = false;
  1794. c.getPA().sendFrame36(c.PRAYER_GLOW[1], 0);
  1795. c.getPA().sendFrame36(c.PRAYER_GLOW[2], 0);
  1796. c.getPA().sendFrame36(c.PRAYER_GLOW[3], 0);
  1797. c.getPA().sendFrame36(c.PRAYER_GLOW[4], 0);
  1798. c.getPA().sendFrame36(c.PRAYER_GLOW[5], 0);
  1799. c.getPA().sendFrame36(c.PRAYER_GLOW[6], 0);
  1800. c.getPA().sendFrame36(c.PRAYER_GLOW[7], 0);
  1801. c.getPA().sendFrame36(c.PRAYER_GLOW[8], 0);
  1802. c.getPA().sendFrame36(c.PRAYER_GLOW[9], 0);
  1803. c.getPA().sendFrame36(c.PRAYER_GLOW[10], 0);
  1804. c.getPA().sendFrame36(c.PRAYER_GLOW[11], 0);
  1805. c.getPA().sendFrame36(c.PRAYER_GLOW[12], 0);
  1806. c.getPA().sendFrame36(c.PRAYER_GLOW[13], 0);
  1807. c.getPA().sendFrame36(c.PRAYER_GLOW[14], 0);
  1808. c.getPA().sendFrame36(c.PRAYER_GLOW[15], 0);
  1809. c.getPA().sendFrame36(c.PRAYER_GLOW[16], 0);
  1810. c.getPA().sendFrame36(c.PRAYER_GLOW[17], 0);
  1811. c.getPA().sendFrame36(c.PRAYER_GLOW[18], 0);
  1812. c.getPA().sendFrame36(c.PRAYER_GLOW[19], 0);
  1813. c.getPA().sendFrame36(c.PRAYER_GLOW[20], 0);
  1814. c.getPA().sendFrame36(c.PRAYER_GLOW[21], 0);
  1815. c.getPA().sendFrame36(c.PRAYER_GLOW[22], 0);
  1816. c.getPA().sendFrame36(c.PRAYER_GLOW[23], 0);
  1817. c.getPA().sendFrame36(c.PRAYER_GLOW[24], 0);
  1818. c.getPA().sendFrame36(c.PRAYER_GLOW[25], 0);
  1819. c.getPA().requestUpdates();
  1820. c.gfx0(867);
  1821. c.getPA().sendFrame36(c.PRAYER_GLOW[16], 0);
  1822. c.getPA().sendFrame36(c.PRAYER_GLOW[17], 0);
  1823. c.getPA().sendFrame36(c.PRAYER_GLOW[18], 0);
  1824. c.prayerActive[16] = false;
  1825. c.prayerActive[17] = false;
  1826. c.prayerActive[18] = false;
  1827. return;
  1828. }
  1829. if(System.currentTimeMillis() - c.stopPrayerDelay < 5000) {
  1830. c.sendMessage("You have been injured and can't use this prayer!");
  1831. c.getPA().sendFrame36(c.PRAYER_GLOW[16], 0);
  1832. c.getPA().sendFrame36(c.PRAYER_GLOW[17], 0);
  1833. c.getPA().sendFrame36(c.PRAYER_GLOW[18], 0);
  1834. return;
  1835. }
  1836. if (i == 16)
  1837. c.protMageDelay = System.currentTimeMillis();
  1838. else if (i == 17)
  1839. c.protRangeDelay = System.currentTimeMillis();
  1840. else if (i == 18)
  1841. c.protMeleeDelay = System.currentTimeMillis();
  1842. case 21:
  1843. case 22:
  1844. case 23:
  1845. headIcon = true;
  1846. for(int p = 16; p < 24; p++) {
  1847. if(i != p && p != 19 && p != 20) {
  1848. c.prayerActive[p] = false;
  1849. c.getPA().sendFrame36(c.PRAYER_GLOW[p], 0);
  1850. }
  1851. }
  1852. break;
  1853. case 24:
  1854. case 25:
  1855. if (c.prayerActive[i] == false) {
  1856. for (int j = 0; j < atkPray.length; j++) {
  1857. if (atkPray[j] != i) {
  1858. c.prayerActive[atkPray[j]] = false;
  1859. c.getPA().sendFrame36(c.PRAYER_GLOW[atkPray[j]], 0);
  1860. }
  1861. }
  1862. for (int j = 0; j < strPray.length; j++) {
  1863. if (strPray[j] != i) {
  1864. c.prayerActive[strPray[j]] = false;
  1865. c.getPA().sendFrame36(c.PRAYER_GLOW[strPray[j]], 0);
  1866. }
  1867. }
  1868. for (int j = 0; j < rangePray.length; j++) {
  1869. if (rangePray[j] != i) {
  1870. c.prayerActive[rangePray[j]] = false;
  1871. c.getPA().sendFrame36(c.PRAYER_GLOW[rangePray[j]], 0);
  1872. }
  1873. }
  1874. for (int j = 0; j < magePray.length; j++) {
  1875. if (magePray[j] != i) {
  1876. c.prayerActive[magePray[j]] = false;
  1877. c.getPA().sendFrame36(c.PRAYER_GLOW[magePray[j]], 0);
  1878. }
  1879. }
  1880. for (int j = 0; j < defPray.length; j++) {
  1881. if (defPray[j] != i) {
  1882. c.prayerActive[defPray[j]] = false;
  1883. c.getPA().sendFrame36(c.PRAYER_GLOW[defPray[j]], 0);
  1884. }
  1885. }
  1886. }
  1887. break;
  1888. }
  1889.  
  1890. if(!headIcon) {
  1891. if(c.prayerActive[i] == false) {
  1892. c.prayerActive[i] = true;
  1893. c.getPA().sendFrame36(c.PRAYER_GLOW[i], 1);
  1894. } else {
  1895. c.prayerActive[i] = false;
  1896. c.getPA().sendFrame36(c.PRAYER_GLOW[i], 0);
  1897. }
  1898. } else {
  1899. if(c.prayerActive[i] == false) {
  1900. c.prayerActive[i] = true;
  1901. c.getPA().sendFrame36(c.PRAYER_GLOW[i], 1);
  1902. c.headIcon = c.PRAYER_HEAD_ICONS[i];
  1903. c.getPA().requestUpdates();
  1904. } else {
  1905. c.prayerActive[i] = false;
  1906. c.getPA().sendFrame36(c.PRAYER_GLOW[i], 0);
  1907. c.headIcon = -1;
  1908. c.getPA().requestUpdates();
  1909. }
  1910. }
  1911. } else {
  1912. c.getPA().sendFrame36(c.PRAYER_GLOW[i],0);
  1913. c.getPA().sendFrame126("You need a @blu@Prayer level of "+c.PRAYER_LEVEL_REQUIRED[i]+" to use "+c.PRAYER_NAME[i]+".", 357);
  1914. c.getPA().sendFrame126("Click here to continue", 358);
  1915. c.getPA().sendFrame164(356);
  1916. }
  1917. } else {
  1918. c.getPA().sendFrame36(c.PRAYER_GLOW[i],0);
  1919. c.sendMessage("You have run out of prayer points!");
  1920. }
  1921.  
  1922. }
  1923.  
  1924. /**
  1925. *Specials
  1926. **/
  1927.  
  1928. public void activateSpecial(int weapon, int i){
  1929. Client o = (Client)Server.playerHandler.players[i];
  1930. if(Server.npcHandler.npcs[i] == null && c.npcIndex > 0) {
  1931. return;
  1932. }
  1933. if(Server.playerHandler.players[i] == null && c.playerIndex > 0) {
  1934. return;
  1935. }
  1936. c.doubleHit = false;
  1937. c.specEffect = 0;
  1938. c.projectileStage = 0;
  1939. c.specMaxHitIncrease = 2;
  1940. if(c.npcIndex > 0) {
  1941. c.oldNpcIndex = i;
  1942. } else if (c.playerIndex > 0){
  1943. c.oldPlayerIndex = i;
  1944. Server.playerHandler.players[i].underAttackBy = c.playerId;
  1945. Server.playerHandler.players[i].logoutDelay = System.currentTimeMillis();
  1946. Server.playerHandler.players[i].singleCombatDelay = System.currentTimeMillis();
  1947. Server.playerHandler.players[i].killerId = c.playerId;
  1948. }
  1949. switch(weapon) {
  1950.  
  1951. case 1305: // dragon long
  1952. c.gfx100(248);
  1953. c.startAnimation(1058);
  1954. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  1955. c.specAccuracy = 1.10;
  1956. c.specDamage = 1.20;
  1957. break;
  1958.  
  1959. case 1215: // dragon daggers
  1960. case 1231:
  1961. case 5680:
  1962. case 5698:
  1963. c.gfx100(252);
  1964. c.startAnimation(1062);
  1965. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  1966. c.doubleHit = true;
  1967. c.specAccuracy = 1.8;
  1968. break;
  1969.  
  1970. case 11730:
  1971.  
  1972. c.gfx100(1224);
  1973. o.gfx100(1194);
  1974. c.startAnimation(7072);
  1975. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  1976. c.doubleHit = true;
  1977. c.ssSpec = true;
  1978. c.specAccuracy = 1.30;
  1979. break;
  1980.  
  1981. case 4151: // whip
  1982. if(Server.npcHandler.npcs[i] != null) {
  1983. Server.npcHandler.npcs[i].gfx100(341);
  1984. }
  1985. c.specAccuracy = 1.20;
  1986. o.gfx100(341);
  1987. c.startAnimation(1658);
  1988. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  1989. break;
  1990.  
  1991. case 14484: // Dragon claws
  1992. c.startAnimation(6000);
  1993. c.specDamage = 1.25;
  1994. c.specAccuracy = 1.85;
  1995. c.gfx0(-1);
  1996. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  1997. break;
  1998.  
  1999. case 11694: // ags
  2000. c.startAnimation(7074);
  2001. c.specDamage = 1.2;
  2002. c.specAccuracy = 6;
  2003. c.gfx0(1222);
  2004. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  2005. break;
  2006. case 10887: // anchor
  2007. c.startAnimation(5870);
  2008. c.specDamage = 1.3;
  2009. c.specAccuracy = 7;
  2010. c.gfx0(1027);
  2011. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  2012. break;
  2013. case 11700: // zgs
  2014. c.startAnimation(7070);
  2015. c.gfx0(1221);
  2016. c.specAccuracy = 3;
  2017. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  2018. c.specEffect = 2;
  2019. break;
  2020.  
  2021. case 11696: // bgs
  2022. c.startAnimation(7073);
  2023. c.gfx0(1223);
  2024. c.specDamage = 1.30;
  2025. c.specAccuracy = 4;
  2026. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  2027. c.specEffect = 3;
  2028. break;
  2029.  
  2030. case 11698: // sgs
  2031. c.startAnimation(7071);
  2032. c.gfx0(1220);
  2033. c.specAccuracy = 6;
  2034. c.specEffect = 4;
  2035. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  2036. break;
  2037.  
  2038. case 1249:
  2039. c.startAnimation(405);
  2040. c.gfx100(253);
  2041. resetPlayerAttack();
  2042. if (c.playerIndex > 0) {
  2043. o.getPA().getSpeared(c.absX, c.absY);
  2044. }
  2045. break;
  2046.  
  2047. case 3204: // d hally
  2048. c.gfx100(282);
  2049. c.startAnimation(1203);
  2050. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  2051. if(Server.npcHandler.npcs[i] != null && c.npcIndex > 0) {
  2052. if(!c.goodDistance(c.getX(), c.getY(), Server.npcHandler.npcs[i].getX(), Server.npcHandler.npcs[i].getY(), 1)){
  2053. c.doubleHit = true;
  2054. }
  2055. }
  2056. if(Server.playerHandler.players[i] != null && c.playerIndex > 0) {
  2057. if(!c.goodDistance(c.getX(), c.getY(), Server.playerHandler.players[i].getX(),Server.playerHandler.players[i].getY(), 1)){
  2058. c.doubleHit = true;
  2059. c.delayedDamage2 = Misc.random(calculateMeleeMaxHit());
  2060. }
  2061. }
  2062. break;
  2063.  
  2064. case 4153: // maul
  2065. c.startAnimation(1667);
  2066. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  2067. /*if (c.playerIndex > 0)
  2068. gmaulPlayer(i);
  2069. else
  2070. gmaulNpc(i);*/
  2071. c.specAccuracy = 2;
  2072. c.gfx100(340);
  2073. break;
  2074.  
  2075. case 4587: // dscimmy
  2076. c.gfx100(347);
  2077. c.specEffect = 1;
  2078. c.startAnimation(1872);
  2079. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  2080. break;
  2081.  
  2082. case 1434: // mace
  2083. c.startAnimation(1060);
  2084. c.gfx100(251);
  2085. c.specMaxHitIncrease = 3;
  2086. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase())+1;
  2087. c.specDamage = 1.35;
  2088. c.specAccuracy = 1.15;
  2089. break;
  2090.  
  2091. case 15006: // VLS
  2092. c.startAnimation(6502);
  2093. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase()+1);
  2094. c.specDamage = 1.35;
  2095. c.specAccuracy = 1.65;
  2096. break;
  2097.  
  2098. case 13902: // mace
  2099. c.startAnimation(6505);
  2100. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase()+1);
  2101. c.specDamage = 1.35;
  2102. c.specAccuracy = 1.65;
  2103. break;
  2104.  
  2105. case 859: // magic long
  2106. c.usingBow = true;
  2107. c.bowSpecShot = 3;
  2108. c.rangeItemUsed = c.playerEquipment[c.playerArrows];
  2109. c.getItems().deleteArrow();
  2110. c.lastWeaponUsed = weapon;
  2111. c.startAnimation(426);
  2112. c.gfx100(250);
  2113. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  2114. c.projectileStage = 1;
  2115. if (c.fightMode == 2)
  2116. c.attackTimer--;
  2117. break;
  2118.  
  2119. case 861: // magic short
  2120. c.usingBow = true;
  2121. c.bowSpecShot = 1;
  2122. c.rangeItemUsed = c.playerEquipment[c.playerArrows];
  2123. c.getItems().deleteArrow();
  2124. c.lastWeaponUsed = weapon;
  2125. c.startAnimation(1074);
  2126. c.hitDelay = 3;
  2127. c.projectileStage = 1;
  2128. c.specAccuracy = 1.50;
  2129. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  2130. if (c.fightMode == 2)
  2131. c.attackTimer--;
  2132. if (c.playerIndex > 0)
  2133. fireProjectilePlayer();
  2134. else if (c.npcIndex > 0)
  2135. fireProjectileNpc();
  2136. break;
  2137.  
  2138. case 11235: // dark bow
  2139. c.usingBow = true;
  2140. c.dbowSpec = true;
  2141. c.rangeItemUsed = c.playerEquipment[c.playerArrows];
  2142. c.getItems().deleteArrow();
  2143. c.getItems().deleteArrow();
  2144. c.lastWeaponUsed = weapon;
  2145. c.hitDelay = 3;
  2146. c.startAnimation(426);
  2147. c.projectileStage = 1;
  2148. c.gfx100(getRangeStartGFX());
  2149. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  2150. if (c.fightMode == 2)
  2151. c.attackTimer--;
  2152. if (c.playerIndex > 0)
  2153. fireProjectilePlayer();
  2154. else if (c.npcIndex > 0)
  2155. fireProjectileNpc();
  2156. c.specAccuracy = 1.75;
  2157. c.specDamage = 1.50;
  2158. break;
  2159. }
  2160. c.delayedDamage = Misc.random(calculateMeleeMaxHit());
  2161. c.delayedDamage2 = Misc.random(calculateMeleeMaxHit());
  2162. c.usingSpecial = false;
  2163. c.getItems().updateSpecialBar();
  2164. }
  2165.  
  2166.  
  2167. public boolean checkSpecAmount(int weapon) {
  2168. switch(weapon) {
  2169. case 1249:
  2170. case 1215:
  2171. case 1231:
  2172. case 5680:
  2173. case 5698:
  2174. case 1305:
  2175. case 1434:
  2176. case 15006:
  2177.  
  2178. if(c.specAmount >= 2.5) {
  2179. c.specAmount -= 2.5;
  2180. c.getItems().addSpecialBar(weapon);
  2181. return true;
  2182. }
  2183. return false;
  2184.  
  2185. case 4151:
  2186. case 11694:
  2187.  
  2188. case 14484:
  2189. case 11698:
  2190. case 4153:
  2191. case 13902:
  2192. case 10887:
  2193. if(c.specAmount >= 5) {
  2194. c.specAmount -= 5;
  2195. c.getItems().addSpecialBar(weapon);
  2196. return true;
  2197. }
  2198. return false;
  2199.  
  2200. case 3204:
  2201. if(c.specAmount >= 3) {
  2202. c.specAmount -= 3;
  2203. c.getItems().addSpecialBar(weapon);
  2204. return true;
  2205. }
  2206. return false;
  2207.  
  2208. case 1377:
  2209. case 11696:
  2210. case 11730:
  2211. if(c.specAmount >= 10) {
  2212. c.specAmount -= 10;
  2213. c.getItems().addSpecialBar(weapon);
  2214. return true;
  2215. }
  2216. return false;
  2217.  
  2218. case 4587:
  2219. case 859:
  2220. case 861:
  2221. case 11235:
  2222. case 11700:
  2223. if(c.specAmount >= 5.5) {
  2224. c.specAmount -= 5.5;
  2225. c.getItems().addSpecialBar(weapon);
  2226. return true;
  2227. }
  2228. return false;
  2229.  
  2230.  
  2231. default:
  2232. return true; // incase u want to test a weapon
  2233. }
  2234. }
  2235.  
  2236. public void resetPlayerAttack() {
  2237. c.usingMagic = false;
  2238. c.npcIndex = 0;
  2239. c.faceUpdate(0);
  2240. c.playerIndex = 0;
  2241. c.getPA().resetFollow();
  2242. //c.sendMessage("Reset attack.");
  2243. }
  2244.  
  2245. public int getCombatDifference(int combat1, int combat2) {
  2246. if(combat1 > combat2) {
  2247. return (combat1 - combat2);
  2248. }
  2249. if(combat2 > combat1) {
  2250. return (combat2 - combat1);
  2251. }
  2252. return 0;
  2253. }
  2254.  
  2255. /**
  2256. *Get killer id
  2257. **/
  2258.  
  2259. public int getKillerId(int playerId) {
  2260. int oldDamage = 0;
  2261. int count = 0;
  2262. int killerId = 0;
  2263. for (int i = 1; i < Config.MAX_PLAYERS; i++) {
  2264. if (Server.playerHandler.players[i] != null) {
  2265. if(Server.playerHandler.players[i].killedBy == playerId) {
  2266. if (Server.playerHandler.players[i].withinDistance(Server.playerHandler.players[playerId])) {
  2267. if(Server.playerHandler.players[i].totalPlayerDamageDealt > oldDamage) {
  2268. oldDamage = Server.playerHandler.players[i].totalPlayerDamageDealt;
  2269. killerId = i;
  2270. }
  2271. }
  2272. Server.playerHandler.players[i].totalPlayerDamageDealt = 0;
  2273. Server.playerHandler.players[i].killedBy = 0;
  2274. }
  2275. }
  2276. }
  2277. return killerId;
  2278. }
  2279.  
  2280.  
  2281.  
  2282. double[] prayerData = {
  2283. 1, // Thick Skin.
  2284. 1, // Burst of Strength.
  2285. 1, // Clarity of Thought.
  2286. 1, // Sharp Eye.
  2287. 1, // Mystic Will.
  2288. 2, // Rock Skin.
  2289. 2, // SuperHuman Strength.
  2290. 2, // Improved Reflexes.
  2291. 0.4, // Rapid restore.
  2292. 0.6, // Rapid Heal.
  2293. 0.6, // Protect Items.
  2294. 1.5, // Hawk eye.
  2295. 2, // Mystic Lore.
  2296. 4, // Steel Skin.
  2297. 4, // Ultimate Strength.
  2298. 4, // Incredible Reflexes.
  2299. 4, // Protect from Magic.
  2300. 4, // Protect from Missiles.
  2301. 4, // Protect from Melee.
  2302. 4, // Eagle Eye.
  2303. 4, // Mystic Might.
  2304. 1, // Retribution.
  2305. 2, // Redemption.
  2306. 6, // Smite.
  2307. 8, // Chivalry.
  2308. 8, // Piety.
  2309. };
  2310.  
  2311. public void handlePrayerDrain() {
  2312. c.usingPrayer = false;
  2313. double toRemove = 0.0;
  2314. for (int j = 0; j < prayerData.length; j++) {
  2315. if (c.prayerActive[j]) {
  2316. toRemove += prayerData[j]/20;
  2317. c.usingPrayer = true;
  2318. }
  2319. }
  2320. if (toRemove > 0) {
  2321. toRemove /= (1 + (0.035 * c.playerBonus[11]));
  2322. }
  2323. c.prayerPoint -= toRemove;
  2324. if (c.prayerPoint <= 0) {
  2325. c.prayerPoint = 1.0 + c.prayerPoint;
  2326. reducePrayerLevel();
  2327. }
  2328.  
  2329. }
  2330.  
  2331. public void reducePrayerLevel() {
  2332. if(c.playerLevel[5] - 1 > 0) {
  2333. c.playerLevel[5] -= 1;
  2334. } else {
  2335. c.sendMessage("You have run out of prayer points!");
  2336. c.playerLevel[5] = 0;
  2337. resetPrayers();
  2338. c.prayerId = -1;
  2339. }
  2340. c.getPA().refreshSkill(5);
  2341. }
  2342.  
  2343. public void resetPrayers() {
  2344. for(int i = 0; i < c.prayerActive.length; i++) {
  2345. c.prayerActive[i] = false;
  2346. c.getPA().sendFrame36(c.PRAYER_GLOW[i], 0);
  2347. }
  2348. c.headIcon = -1;
  2349. c.getPA().requestUpdates();
  2350. }
  2351.  
  2352. /**
  2353. * Wildy and duel info
  2354. **/
  2355.  
  2356. public boolean checkReqs() {
  2357. if(Server.playerHandler.players[c.playerIndex] == null) {
  2358. return false;
  2359. }
  2360. if (c.playerIndex == c.playerId)
  2361. return false;
  2362. if (c.inPits && Server.playerHandler.players[c.playerIndex].inPits)
  2363. return true;
  2364. if(Server.playerHandler.players[c.playerIndex].inDuelArena() && c.duelStatus != 5 && !c.usingMagic) {
  2365. if(c.arenas() || c.duelStatus == 5) {
  2366. c.sendMessage("You can't challenge inside the arena!");
  2367. return false;
  2368. }
  2369. c.getTradeAndDuel().requestDuel(c.playerIndex);
  2370. return false;
  2371. }
  2372. if(c.duelStatus == 5 && Server.playerHandler.players[c.playerIndex].duelStatus == 5) {
  2373. if(Server.playerHandler.players[c.playerIndex].duelingWith == c.getId()) {
  2374. return true;
  2375. } else {
  2376. c.sendMessage("This isn't your opponent!");
  2377. return false;
  2378. }
  2379. }
  2380. if(!Server.playerHandler.players[c.playerIndex].inWild()) {
  2381. c.sendMessage("That player is not in the wilderness.");
  2382. c.stopMovement();
  2383. c.getCombat().resetPlayerAttack();
  2384. return false;
  2385. }
  2386. if(!c.inWild()) {
  2387. c.sendMessage("You are not in the wilderness.");
  2388. c.stopMovement();
  2389. c.getCombat().resetPlayerAttack();
  2390. return false;
  2391. }
  2392. if(Config.COMBAT_LEVEL_DIFFERENCE) {
  2393. int combatDif1 = c.getCombat().getCombatDifference(c.combatLevel, Server.playerHandler.players[c.playerIndex].combatLevel);
  2394. if(combatDif1 > c.wildLevel || combatDif1 > Server.playerHandler.players[c.playerIndex].wildLevel) {
  2395. c.sendMessage("Your combat level difference is too great to attack that player here.");
  2396. c.stopMovement();
  2397. c.getCombat().resetPlayerAttack();
  2398. return false;
  2399. }
  2400. }
  2401.  
  2402. if(Config.SINGLE_AND_MULTI_ZONES) {
  2403. if(!Server.playerHandler.players[c.playerIndex].inMulti()) { // single combat zones
  2404. if(Server.playerHandler.players[c.playerIndex].underAttackBy != c.playerId && Server.playerHandler.players[c.playerIndex].underAttackBy != 0) {
  2405. c.sendMessage("That player is already in combat.");
  2406. c.stopMovement();
  2407. c.getCombat().resetPlayerAttack();
  2408. return false;
  2409. }
  2410. if(Server.playerHandler.players[c.playerIndex].playerId != c.underAttackBy && c.underAttackBy != 0 || c.underAttackBy2 > 0) {
  2411. c.sendMessage("You are already in combat.");
  2412. c.stopMovement();
  2413. c.getCombat().resetPlayerAttack();
  2414. return false;
  2415. }
  2416. }
  2417. }
  2418. return true;
  2419. }
  2420.  
  2421. public boolean checkMultiBarrageReqs(int i) {
  2422. if(Server.playerHandler.players[i] == null) {
  2423. return false;
  2424. }
  2425. if (i == c.playerId)
  2426. return false;
  2427. if (c.inPits && Server.playerHandler.players[i].inPits)
  2428. return true;
  2429. if(!Server.playerHandler.players[i].inWild()) {
  2430. return false;
  2431. }
  2432. if(Config.COMBAT_LEVEL_DIFFERENCE) {
  2433. int combatDif1 = c.getCombat().getCombatDifference(c.combatLevel, Server.playerHandler.players[i].combatLevel);
  2434. if(combatDif1 > c.wildLevel || combatDif1 > Server.playerHandler.players[i].wildLevel) {
  2435. c.sendMessage("Your combat level difference is too great to attack that player here.");
  2436. return false;
  2437. }
  2438. }
  2439.  
  2440. if(Config.SINGLE_AND_MULTI_ZONES) {
  2441. if(!Server.playerHandler.players[i].inMulti()) { // single combat zones
  2442. if(Server.playerHandler.players[i].underAttackBy != c.playerId && Server.playerHandler.players[i].underAttackBy != 0) {
  2443. return false;
  2444. }
  2445. if(Server.playerHandler.players[i].playerId != c.underAttackBy && c.underAttackBy != 0) {
  2446. c.sendMessage("You are already in combat.");
  2447. return false;
  2448. }
  2449. }
  2450. }
  2451. return true;
  2452. }
  2453.  
  2454. /**
  2455. *Weapon stand, walk, run, etc emotes
  2456. **/
  2457.  
  2458. public void getPlayerAnimIndex(String weaponName){
  2459. c.playerStandIndex = 0x328;
  2460. c.playerTurnIndex = 0x337;
  2461. c.playerWalkIndex = 0x333;
  2462. c.playerTurn180Index = 0x334;
  2463. c.playerTurn90CWIndex = 0x335;
  2464. c.playerTurn90CCWIndex = 0x336;
  2465. c.playerRunIndex = 0x338;
  2466. if(weaponName.contains("halberd") || weaponName.contains("guthan")) {
  2467. c.playerStandIndex = 809;
  2468. c.playerWalkIndex = 1146;
  2469. c.playerRunIndex = 1210;
  2470. return;
  2471. }
  2472. if(weaponName.contains("dharok")) {
  2473. c.playerStandIndex = 0x811;
  2474. c.playerWalkIndex = 0x67F;
  2475. c.playerRunIndex = 0x680;
  2476. return;
  2477. }
  2478. if(weaponName.contains("ahrim")) {
  2479. c.playerStandIndex = 809;
  2480. c.playerWalkIndex = 1146;
  2481. c.playerRunIndex = 1210;
  2482. return;
  2483. }
  2484. if(weaponName.contains("verac")) {
  2485. c.playerStandIndex = 1832;
  2486. c.playerWalkIndex = 1830;
  2487. c.playerRunIndex = 1831;
  2488. return;
  2489. }
  2490. if (weaponName.contains("wand") || weaponName.contains("staff")) {
  2491. c.playerStandIndex = 809;
  2492. c.playerRunIndex = 1210;
  2493. c.playerWalkIndex = 1146;
  2494. return;
  2495. }
  2496. if(weaponName.contains("karil")) {
  2497. c.playerStandIndex = 2074;
  2498. c.playerWalkIndex = 2076;
  2499. c.playerRunIndex = 2077;
  2500. return;
  2501. }
  2502. if(weaponName.contains("2h sword") || weaponName.contains("godsword") || weaponName.contains("saradomin sw")) {
  2503. c.playerStandIndex = 7047;
  2504. c.playerWalkIndex = 7046;
  2505. c.playerRunIndex = 7039;
  2506. return;
  2507. }
  2508. if(weaponName.contains("bow")) {
  2509. c.playerStandIndex = 808;
  2510. c.playerWalkIndex = 819;
  2511. c.playerRunIndex = 824;
  2512. return;
  2513. }
  2514. if(weaponName.contains("carpet")) {
  2515. c.playerStandIndex = 2261;
  2516. c.playerWalkIndex = 2262;
  2517. c.playerRunIndex = 2261;
  2518. return;
  2519. }
  2520.  
  2521. switch(c.playerEquipment[c.playerWeapon]) {
  2522. case 4151:
  2523. c.playerStandIndex = 1832;
  2524. c.playerWalkIndex = 1660;
  2525. c.playerRunIndex = 1661;
  2526. break;
  2527. case 10887:
  2528. c.playerStandIndex = 5869;
  2529. c.playerWalkIndex = 5867;
  2530. c.playerRunIndex = 5868;
  2531. break;
  2532. case 6528:
  2533. c.playerStandIndex = 0x811;
  2534. c.playerWalkIndex = 2064;
  2535. c.playerRunIndex = 1664;
  2536. break;
  2537. case 4153:
  2538. c.playerStandIndex = 1662;
  2539. c.playerWalkIndex = 1663;
  2540. c.playerRunIndex = 1664;
  2541. break;
  2542. case 11694:
  2543. case 11696:
  2544. case 11730:
  2545. case 11698:
  2546. case 11700:
  2547. c.playerStandIndex = 7047;
  2548. c.playerWalkIndex = 7046;
  2549. c.playerRunIndex = 7039;
  2550. break;
  2551. case 1305:
  2552. c.playerStandIndex = 809;
  2553. break;
  2554. }
  2555. }
  2556.  
  2557.  
  2558. /**
  2559. * Weapon emotes
  2560. **/
  2561.  
  2562. public int getWepAnim(String weaponName) {
  2563. if(c.playerEquipment[c.playerWeapon] <= 0) {
  2564. switch(c.fightMode) {
  2565. case 0:
  2566. return 422;
  2567. case 2:
  2568. return 423;
  2569. case 1:
  2570. return 451;
  2571. }
  2572. }
  2573. if(weaponName.contains("knife") || weaponName.contains("dart") || weaponName.contains("javelin") || weaponName.contains("thrownaxe")){
  2574. return 806;
  2575. }
  2576. if(weaponName.contains("halberd")) {
  2577. return 440;
  2578. }
  2579. if(weaponName.startsWith("dragon dagger")) {
  2580. return 402;
  2581. }
  2582. if(weaponName.endsWith("dagger")) {
  2583. return 412;
  2584. }
  2585. if(weaponName.contains("2h sword") || weaponName.contains("godsword") || weaponName.contains("aradomin sword")) {
  2586. return 7041;
  2587. }
  2588. if(weaponName.contains("sword")) {
  2589. return 451;
  2590. }
  2591. if(weaponName.contains("karil")) {
  2592. return 2075;
  2593. }
  2594. if(weaponName.contains("bow") && !weaponName.contains("'bow")) {
  2595. return 426;
  2596. }
  2597. if (weaponName.contains("'bow"))
  2598. return 4230;
  2599.  
  2600. switch(c.playerEquipment[c.playerWeapon]) { // if you don't want to use strings
  2601. case 6522:
  2602. return 2614;
  2603. case 4153: // granite maul
  2604. return 1665;
  2605. case 4726: // guthan
  2606. return 2080;
  2607. case 4747: // torag
  2608. return 0x814;
  2609. case 4718: // dharok
  2610. return 2067;
  2611. case 4710: // ahrim
  2612. return 406;
  2613. case 4755: // verac
  2614. return 2062;
  2615. case 4734: // karil
  2616. return 2075;
  2617. case 4151:
  2618. return 1658;
  2619. case 6528:
  2620. return 2661;
  2621. case 13902:
  2622. return 393;
  2623. case 15037:
  2624. return 400;
  2625. case 10887:
  2626. return 5865;
  2627. default:
  2628. return 451;
  2629. }
  2630. }
  2631.  
  2632. /**
  2633. * Block emotes
  2634. */
  2635. public int getBlockEmote() {
  2636. if (c.playerEquipment[c.playerShield] >= 8844 && c.playerEquipment[c.playerShield] <= 8850) {
  2637. return 4177;
  2638. }
  2639. switch(c.playerEquipment[c.playerWeapon]) {
  2640. case 4755:
  2641. return 2063;
  2642.  
  2643. case 4153:
  2644. return 1666;
  2645. case 10887:
  2646. return 5866;
  2647. case 4151:
  2648. return 1659;
  2649.  
  2650. case 11694:
  2651. case 11698:
  2652. case 11700:
  2653. case 11696:
  2654. case 11730:
  2655. return 7050;
  2656. default:
  2657. return 404;
  2658. }
  2659. }
  2660.  
  2661. /**
  2662. * Weapon and magic attack speed!
  2663. **/
  2664.  
  2665. public int getAttackDelay(String s) {
  2666. if(c.usingMagic) {
  2667. switch(c.MAGIC_SPELLS[c.spellId][0]) {
  2668. case 12871: // ice blitz
  2669. case 13023: // shadow barrage
  2670. case 12891: // ice barrage
  2671. return 5;
  2672.  
  2673. default:
  2674. return 5;
  2675. }
  2676. }
  2677. if(c.playerEquipment[c.playerWeapon] == -1)
  2678. return 4;//unarmed
  2679.  
  2680. switch (c.playerEquipment[c.playerWeapon]) {
  2681. case 11235:
  2682. return 9;
  2683. case 11730:
  2684. return 4;
  2685. case 6528:
  2686. return 7;
  2687. }
  2688.  
  2689. if(s.endsWith("greataxe"))
  2690. return 7;
  2691. else if(s.equals("torags hammers"))
  2692. return 5;
  2693. else if(s.equals("guthans warspear"))
  2694. return 5;
  2695. else if(s.equals("veracs flail"))
  2696. return 5;
  2697. else if(s.equals("ahrims staff"))
  2698. return 6;
  2699. else if(s.contains("staff")){
  2700. if(s.contains("zamarok") || s.contains("guthix") || s.contains("saradomian") || s.contains("slayer") || s.contains("ancient"))
  2701. return 4;
  2702. else
  2703. return 5;
  2704. } else if(s.contains("bow")){
  2705. if(s.contains("composite") || s.equals("seercull"))
  2706. return 5;
  2707. else if (s.contains("aril"))
  2708. return 4;
  2709. else if(s.contains("Ogre"))
  2710. return 8;
  2711. else if(s.contains("short") || s.contains("hunt") || s.contains("sword"))
  2712. return 4;
  2713. else if(s.contains("long") || s.contains("crystal"))
  2714. return 6;
  2715. else if(s.contains("'bow"))
  2716. return 7;
  2717.  
  2718. return 5;
  2719. }
  2720. else if(s.contains("dagger"))
  2721. return 4;
  2722. else if(s.contains("godsword") || s.contains("2h") || s.contains("barrelchest"))
  2723. return 6;
  2724. else if(s.contains("longsword"))
  2725. return 5;
  2726. else if(s.contains("sword"))
  2727. return 4;
  2728. else if(s.contains("scimitar"))
  2729. return 4;
  2730. else if(s.contains("mace"))
  2731. return 5;
  2732. else if(s.contains("battleaxe"))
  2733. return 6;
  2734. else if(s.contains("pickaxe"))
  2735. return 5;
  2736. else if(s.contains("thrownaxe"))
  2737. return 5;
  2738. else if(s.contains("axe"))
  2739. return 5;
  2740. else if(s.contains("warhammer"))
  2741. return 6;
  2742. else if(s.contains("2h"))
  2743. return 7;
  2744. else if(s.contains("spear"))
  2745. return 5;
  2746. else if(s.contains("claw"))
  2747. return 4;
  2748. else if(s.contains("halberd"))
  2749. return 7;
  2750.  
  2751. //sara sword, 2400ms
  2752. else if(s.equals("granite maul"))
  2753. return 7;
  2754. else if(s.equals("toktz-xil-ak"))//sword
  2755. return 4;
  2756. else if(s.equals("tzhaar-ket-em"))//mace
  2757. return 5;
  2758. else if(s.equals("tzhaar-ket-om"))//maul
  2759. return 7;
  2760. else if(s.equals("toktz-xil-ek"))//knife
  2761. return 4;
  2762. else if(s.equals("toktz-xil-ul"))//rings
  2763. return 4;
  2764. else if(s.equals("toktz-mej-tal"))//staff
  2765. return 6;
  2766. else if(s.contains("whip"))
  2767. return 4;
  2768. else if(s.contains("dart"))
  2769. return 3;
  2770. else if(s.contains("knife"))
  2771. return 3;
  2772. else if(s.contains("javelin"))
  2773. return 6;
  2774. return 5;
  2775. }
  2776. /**
  2777. * How long it takes to hit your enemy
  2778. **/
  2779. public int getHitDelay(String weaponName) {
  2780. if(c.usingMagic) {
  2781. switch(c.MAGIC_SPELLS[c.spellId][0]) {
  2782. case 12891:
  2783. return 4;
  2784. case 12871:
  2785. return 6;
  2786. default:
  2787. return 4;
  2788. }
  2789. } else {
  2790.  
  2791. if(weaponName.contains("knife") || weaponName.contains("dart") || weaponName.contains("javelin") || weaponName.contains("thrownaxe")){
  2792. return 3;
  2793. }
  2794. if(weaponName.contains("cross") || weaponName.contains("c'bow")) {
  2795. return 4;
  2796. }
  2797. if(weaponName.contains("bow") && !c.dbowSpec) {
  2798. return 4;
  2799. } else if (c.dbowSpec) {
  2800. return 4;
  2801. }
  2802.  
  2803. switch(c.playerEquipment[c.playerWeapon]) {
  2804. case 6522: // Toktz-xil-ul
  2805. return 3;
  2806.  
  2807.  
  2808. default:
  2809. return 2;
  2810. }
  2811. }
  2812. }
  2813.  
  2814. public int getRequiredDistance() {
  2815. if (c.followId > 0 && c.freezeTimer <= 0 && !c.isMoving)
  2816. return 2;
  2817. else if(c.followId > 0 && c.freezeTimer <= 0 && c.isMoving) {
  2818. return 3;
  2819. } else {
  2820. return 1;
  2821. }
  2822. }
  2823.  
  2824. public boolean usingHally() {
  2825. switch(c.playerEquipment[c.playerWeapon]) {
  2826. case 3190:
  2827. case 3192:
  2828. case 3194:
  2829. case 3196:
  2830. case 3198:
  2831. case 3200:
  2832. case 3202:
  2833. case 3204:
  2834. return true;
  2835.  
  2836. default:
  2837. return false;
  2838. }
  2839. }
  2840.  
  2841. /**
  2842. * Melee
  2843. **/
  2844.  
  2845. public int calculateMeleeAttack() {
  2846. int attackLevel = c.playerLevel[0];
  2847. //2, 5, 11, 18, 19
  2848. if (c.prayerActive[2]) {
  2849. attackLevel += c.getLevelForXP(c.playerXP[c.playerAttack]) * 0.05;
  2850. } else if (c.prayerActive[7]) {
  2851. attackLevel += c.getLevelForXP(c.playerXP[c.playerAttack]) * 0.1;
  2852. } else if (c.prayerActive[15]) {
  2853. attackLevel += c.getLevelForXP(c.playerXP[c.playerAttack]) * 0.15;
  2854. } else if (c.prayerActive[24]) {
  2855. attackLevel += c.getLevelForXP(c.playerXP[c.playerAttack]) * 0.15;
  2856. } else if (c.prayerActive[25]) {
  2857. attackLevel += c.getLevelForXP(c.playerXP[c.playerAttack]) * 0.2;
  2858. }
  2859. if (c.fullVoidMelee())
  2860. attackLevel += c.getLevelForXP(c.playerXP[c.playerAttack]) * 0.1;
  2861. attackLevel *= c.specAccuracy;
  2862. //c.sendMessage("Attack: " + (attackLevel + (c.playerBonus[bestMeleeAtk()] * 2)));
  2863. int i = c.playerBonus[bestMeleeAtk()];
  2864. i += c.bonusAttack;
  2865. if (c.playerEquipment[c.playerAmulet] == 11128 && c.playerEquipment[c.playerWeapon] == 6528) {
  2866. i *= 1.30;
  2867. }
  2868. return (int)(attackLevel + (attackLevel * 0.15) + (i + i * 0.05));
  2869. }
  2870. public int bestMeleeAtk()
  2871. {
  2872. if(c.playerBonus[0] > c.playerBonus[1] && c.playerBonus[0] > c.playerBonus[2])
  2873. return 0;
  2874. if(c.playerBonus[1] > c.playerBonus[0] && c.playerBonus[1] > c.playerBonus[2])
  2875. return 1;
  2876. return c.playerBonus[2] <= c.playerBonus[1] || c.playerBonus[2] <= c.playerBonus[0] ? 0 : 2;
  2877. }
  2878.  
  2879. public int calculateMeleeMaxHit() {
  2880. double maxHit = 0;
  2881. int strBonus = c.playerBonus[10];
  2882. int strength = c.playerLevel[2];
  2883. int lvlForXP = c.getLevelForXP(c.playerXP[2]);
  2884. if(c.prayerActive[1]) {
  2885. strength += (int)(lvlForXP * .05);
  2886. } else
  2887. if(c.prayerActive[6]) {
  2888. strength += (int)(lvlForXP * .10);
  2889. } else
  2890. if(c.prayerActive[14]) {
  2891. strength += (int)(lvlForXP * .15);
  2892. } else
  2893. if(c.prayerActive[24]) {
  2894. strength += (int)(lvlForXP * .18);
  2895. } else
  2896. if(c.prayerActive[25]) {
  2897. strength += (int)(lvlForXP * .23);
  2898. }
  2899. if(c.playerEquipment[c.playerHat] == 2526 && c.playerEquipment[c.playerChest] == 2520 && c.playerEquipment[c.playerLegs] == 2522) {
  2900. maxHit += (maxHit * 10 / 100);
  2901. }
  2902. maxHit += 1.05D + (double)(strBonus * strength) * 0.00175D;
  2903. maxHit += (double)strength * 0.11D;
  2904.  
  2905. if(c.playerEquipment[c.playerWeapon] == 4718 && c.playerEquipment[c.playerHat] == 4716 && c.playerEquipment[c.playerChest] == 4720 && c.playerEquipment[c.playerLegs] == 4722) {
  2906. maxHit += (c.getPA().getLevelForXP(c.playerXP[3]) - c.playerLevel[3]) / 4;
  2907. }
  2908. if (c.specDamage > 1)
  2909. maxHit = (int)(maxHit * c.specDamage);
  2910. if (maxHit < 0)
  2911. maxHit = 1;
  2912. if (c.fullVoidMelee())
  2913. maxHit = (int)(maxHit * 1.10);
  2914. if (c.playerEquipment[c.playerAmulet] == 11128 && c.playerEquipment[c.playerWeapon] == 6528) {
  2915. maxHit *= 1.20;
  2916. }
  2917. return (int)Math.floor(maxHit);
  2918. }
  2919.  
  2920.  
  2921. public int calculateMeleeDefence()
  2922. {
  2923. int defenceLevel = c.playerLevel[1];
  2924. int i = c.playerBonus[bestMeleeDef()];
  2925. if (c.prayerActive[0]) {
  2926. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.05;
  2927. } else if (c.prayerActive[5]) {
  2928. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.1;
  2929. } else if (c.prayerActive[13]) {
  2930. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.15;
  2931. } else if (c.prayerActive[24]) {
  2932. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.2;
  2933. } else if (c.prayerActive[25]) {
  2934. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.25;
  2935. }
  2936. return (int)(defenceLevel + (defenceLevel * 0.15) + (i + i * 0.05));
  2937. }
  2938.  
  2939. public int bestMeleeDef()
  2940. {
  2941. if(c.playerBonus[5] > c.playerBonus[6] && c.playerBonus[5] > c.playerBonus[7])
  2942. return 5;
  2943. if(c.playerBonus[6] > c.playerBonus[5] && c.playerBonus[6] > c.playerBonus[7])
  2944. return 6;
  2945. return c.playerBonus[7] <= c.playerBonus[5] || c.playerBonus[7] <= c.playerBonus[6] ? 5 : 7;
  2946. }
  2947.  
  2948. /**
  2949. * Range
  2950. **/
  2951.  
  2952. public int calculateRangeAttack() {
  2953. int attackLevel = c.playerLevel[4];
  2954. attackLevel *= c.specAccuracy;
  2955. if (c.fullVoidRange())
  2956. attackLevel += c.getLevelForXP(c.playerXP[c.playerRanged]) * 0.1;
  2957. if (c.prayerActive[3])
  2958. attackLevel *= 1.05;
  2959. else if (c.prayerActive[11])
  2960. attackLevel *= 1.10;
  2961. else if (c.prayerActive[19])
  2962. attackLevel *= 1.15;
  2963. //dbow spec
  2964. if (c.fullVoidRange() && c.specAccuracy > 1.15) {
  2965. attackLevel *= 1.75;
  2966. }
  2967. return (int) (attackLevel + (c.playerBonus[4] * 1.95));
  2968. }
  2969.  
  2970. public int calculateRangeDefence() {
  2971. int defenceLevel = c.playerLevel[1];
  2972. if (c.prayerActive[0]) {
  2973. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.05;
  2974. } else if (c.prayerActive[5]) {
  2975. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.1;
  2976. } else if (c.prayerActive[13]) {
  2977. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.15;
  2978. } else if (c.prayerActive[24]) {
  2979. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.2;
  2980. } else if (c.prayerActive[25]) {
  2981. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.25;
  2982. }
  2983. return (int) (defenceLevel + c.playerBonus[9] + (c.playerBonus[9] / 2));
  2984. }
  2985.  
  2986. public boolean usingBolts() {
  2987. return c.playerEquipment[c.playerArrows] >= 9130 && c.playerEquipment[c.playerArrows] <= 9145 || c.playerEquipment[c.playerArrows] >= 9230 && c.playerEquipment[c.playerArrows] <= 9245;
  2988. }
  2989. public int rangeMaxHit() {
  2990. int rangeLevel = c.playerLevel[4];
  2991. double modifier = 1.0;
  2992. double wtf = c.specDamage;
  2993. int itemUsed = c.usingBow ? c.lastArrowUsed : c.lastWeaponUsed;
  2994. if (c.prayerActive[3])
  2995. modifier += 0.05;
  2996. else if (c.prayerActive[11])
  2997. modifier += 0.10;
  2998. else if (c.prayerActive[19])
  2999. modifier += 0.15;
  3000. if (c.fullVoidRange())
  3001. modifier += 0.20;
  3002. double c = modifier * rangeLevel;
  3003. int rangeStr = getRangeStr(itemUsed);
  3004. double max =(c + 8) * (rangeStr + 64) / 640;
  3005. if (wtf != 1)
  3006. max *= wtf;
  3007. if (max < 1)
  3008. max = 1;
  3009. return (int)max;
  3010. }
  3011.  
  3012. public int getRangeStr(int i) {
  3013. if (i == 4214)
  3014. return 70;
  3015. switch (i) {
  3016. //bronze to rune bolts
  3017. case 877:
  3018. return 10;
  3019. case 9140:
  3020. return 46;
  3021. case 9141:
  3022. return 64;
  3023. case 9142:
  3024. case 9241:
  3025. case 9240:
  3026. return 82;
  3027. case 9143:
  3028. case 9243:
  3029. case 9242:
  3030. return 100;
  3031. case 9144:
  3032. case 9244:
  3033. case 9245:
  3034. return 115;
  3035. //bronze to dragon arrows
  3036. case 882:
  3037. return 7;
  3038. case 884:
  3039. return 10;
  3040. case 886:
  3041. return 16;
  3042. case 888:
  3043. return 22;
  3044. case 890:
  3045. return 31;
  3046. case 892:
  3047. case 4740:
  3048. return 49;
  3049. case 11212:
  3050. return 60;
  3051. //knifes
  3052. case 864:
  3053. return 3;
  3054. case 863:
  3055. return 4;
  3056. case 865:
  3057. return 7;
  3058. case 866:
  3059. return 10;
  3060. case 867:
  3061. return 14;
  3062. case 868:
  3063. return 24;
  3064. }
  3065. return 0;
  3066. }
  3067.  
  3068. /*public int rangeMaxHit() {
  3069. int rangehit = 0;
  3070. rangehit += c.playerLevel[4] / 7.5;
  3071. int weapon = c.lastWeaponUsed;
  3072. int Arrows = c.lastArrowUsed;
  3073. if (weapon == 4223) {//Cbow 1/10
  3074. rangehit = 2;
  3075. rangehit += c.playerLevel[4] / 7;
  3076. } else if (weapon == 4222) {//Cbow 2/10
  3077. rangehit = 3;
  3078. rangehit += c.playerLevel[4] / 7;
  3079. } else if (weapon == 4221) {//Cbow 3/10
  3080. rangehit = 3;
  3081. rangehit += c.playerLevel[4] / 6.5;
  3082. } else if (weapon == 4220) {//Cbow 4/10
  3083. rangehit = 4;
  3084. rangehit += c.playerLevel[4] / 6.5;
  3085. } else if (weapon == 4219) {//Cbow 5/10
  3086. rangehit = 4;
  3087. rangehit += c.playerLevel[4] / 6;
  3088. } else if (weapon == 4218) {//Cbow 6/10
  3089. rangehit = 5;
  3090. rangehit += c.playerLevel[4] / 6;
  3091. } else if (weapon == 4217) {//Cbow 7/10
  3092. rangehit = 5;
  3093. rangehit += c.playerLevel[4] / 5.5;
  3094. } else if (weapon == 4216) {//Cbow 8/10
  3095. rangehit = 6;
  3096. rangehit += c.playerLevel[4] / 5.5;
  3097. } else if (weapon == 4215) {//Cbow 9/10
  3098. rangehit = 6;
  3099. rangehit += c.playerLevel[4] / 5;
  3100. } else if (weapon == 4214) {//Cbow Full
  3101. rangehit = 7;
  3102. rangehit += c.playerLevel[4] / 5;
  3103. } else if (weapon == 6522) {
  3104. rangehit = 5;
  3105. rangehit += c.playerLevel[4] / 6;
  3106. } else if (weapon == 9029) {//dragon darts
  3107. rangehit = 8;
  3108. rangehit += c.playerLevel[4] / 10;
  3109. } else if (weapon == 811 || weapon == 868) {//rune darts
  3110. rangehit = 2;
  3111. rangehit += c.playerLevel[4] / 8.5;
  3112. } else if (weapon == 810 || weapon == 867) {//adamant darts
  3113. rangehit = 2;
  3114. rangehit += c.playerLevel[4] / 9;
  3115. } else if (weapon == 809 || weapon == 866) {//mithril darts
  3116. rangehit = 2;
  3117. rangehit += c.playerLevel[4] / 9.5;
  3118. } else if (weapon == 808 || weapon == 865) {//Steel darts
  3119. rangehit = 2;
  3120. rangehit += c.playerLevel[4] / 10;
  3121. } else if (weapon == 807 || weapon == 863) {//Iron darts
  3122. rangehit = 2;
  3123. rangehit += c.playerLevel[4] / 10.5;
  3124. } else if (weapon == 806 || weapon == 864) {//Bronze darts
  3125. rangehit = 1;
  3126. rangehit += c.playerLevel[4] / 11;
  3127. } else if (Arrows == 4740 && weapon == 4734) {//BoltRacks
  3128. rangehit = 3;
  3129. rangehit += c.playerLevel[4] / 6;
  3130. } else if (Arrows == 11212) {//dragon arrows
  3131. rangehit = 4;
  3132. rangehit += c.playerLevel[4] / 5.5;
  3133. } else if (Arrows == 892) {//rune arrows
  3134. rangehit = 3;
  3135. rangehit += c.playerLevel[4] / 6;
  3136. } else if (Arrows == 890) {//adamant arrows
  3137. rangehit = 2;
  3138. rangehit += c.playerLevel[4] / 7;
  3139. } else if (Arrows == 888) {//mithril arrows
  3140. rangehit = 2;
  3141. rangehit += c.playerLevel[4] / 7.5;
  3142. } else if (Arrows == 886) {//steel arrows
  3143. rangehit = 2;
  3144. rangehit += c.playerLevel[4] / 8;
  3145. } else if (Arrows == 884) {//Iron arrows
  3146. rangehit = 2;
  3147. rangehit += c.playerLevel[4] / 9;
  3148. } else if (Arrows == 882) {//Bronze arrows
  3149. rangehit = 1;
  3150. rangehit += c.playerLevel[4] / 9.5;
  3151. } else if (Arrows == 9244) {
  3152. rangehit = 8;
  3153. rangehit += c.playerLevel[4] / 3;
  3154. } else if (Arrows == 9139) {
  3155. rangehit = 12;
  3156. rangehit += c.playerLevel[4] / 4;
  3157. } else if (Arrows == 9140) {
  3158. rangehit = 2;
  3159. rangehit += c.playerLevel[4] / 7;
  3160. } else if (Arrows == 9141) {
  3161. rangehit = 3;
  3162. rangehit += c.playerLevel[4] / 6;
  3163. } else if (Arrows == 9142) {
  3164. rangehit = 4;
  3165. rangehit += c.playerLevel[4] / 6;
  3166. } else if (Arrows == 9143) {
  3167. rangehit = 7;
  3168. rangehit += c.playerLevel[4] / 5;
  3169. } else if (Arrows == 9144) {
  3170. rangehit = 7;
  3171. rangehit += c.playerLevel[4] / 4.5;
  3172. }
  3173. int bonus = 0;
  3174. bonus -= rangehit / 10;
  3175. rangehit += bonus;
  3176. if (c.specDamage != 1)
  3177. rangehit *= c.specDamage;
  3178. if (rangehit == 0)
  3179. rangehit++;
  3180. if (c.fullVoidRange()) {
  3181. rangehit *= 1.10;
  3182. }
  3183. if (c.prayerActive[3])
  3184. rangehit *= 1.05;
  3185. else if (c.prayerActive[11])
  3186. rangehit *= 1.10;
  3187. else if (c.prayerActive[19])
  3188. rangehit *= 1.15;
  3189. return rangehit;
  3190. }*/
  3191.  
  3192. public boolean properBolts() {
  3193. return c.playerEquipment[c.playerArrows] >= 9140 && c.playerEquipment[c.playerArrows] <= 9144
  3194. || c.playerEquipment[c.playerArrows] >= 9240 && c.playerEquipment[c.playerArrows] <= 9244;
  3195. }
  3196.  
  3197. public int correctBowAndArrows() {
  3198. if (usingBolts())
  3199. return -1;
  3200. switch(c.playerEquipment[c.playerWeapon]) {
  3201.  
  3202. case 839:
  3203. case 841:
  3204. return 882;
  3205.  
  3206. case 843:
  3207. case 845:
  3208. return 884;
  3209.  
  3210. case 847:
  3211. case 849:
  3212. return 886;
  3213.  
  3214. case 851:
  3215. case 853:
  3216. return 888;
  3217.  
  3218. case 855:
  3219. case 857:
  3220. return 890;
  3221.  
  3222. case 859:
  3223. case 861:
  3224. return 892;
  3225.  
  3226. case 4734:
  3227. case 4935:
  3228. case 4936:
  3229. case 4937:
  3230. return 4740;
  3231.  
  3232. case 11235:
  3233. return 11212;
  3234. }
  3235. return -1;
  3236. }
  3237.  
  3238. public int getRangeStartGFX() {
  3239. switch(c.rangeItemUsed) {
  3240.  
  3241. case 863:
  3242. return 220;
  3243. case 864:
  3244. return 219;
  3245. case 865:
  3246. return 221;
  3247. case 866: // knives
  3248. return 223;
  3249. case 867:
  3250. return 224;
  3251. case 868:
  3252. return 225;
  3253. case 869:
  3254. return 222;
  3255. case 11230:
  3256. return 1123;
  3257. case 806:
  3258. return 232;
  3259. case 807:
  3260. return 233;
  3261. case 808:
  3262. return 234;
  3263. case 809: // darts
  3264. return 235;
  3265. case 810:
  3266. return 236;
  3267. case 811:
  3268. return 237;
  3269.  
  3270. case 825:
  3271. return 206;
  3272. case 826:
  3273. return 207;
  3274. case 827: // javelin
  3275. return 208;
  3276. case 828:
  3277. return 209;
  3278. case 829:
  3279. return 210;
  3280. case 830:
  3281. return 211;
  3282.  
  3283. case 800:
  3284. return 42;
  3285. case 801:
  3286. return 43;
  3287. case 802:
  3288. return 44; // axes
  3289. case 803:
  3290. return 45;
  3291. case 804:
  3292. return 46;
  3293. case 805:
  3294. return 48;
  3295.  
  3296. case 882:
  3297. return 19;
  3298.  
  3299. case 884:
  3300. return 18;
  3301.  
  3302. case 886:
  3303. return 20;
  3304.  
  3305. case 888:
  3306. return 21;
  3307.  
  3308. case 890:
  3309. return 22;
  3310.  
  3311. case 892:
  3312. return 24;
  3313.  
  3314. case 11212:
  3315. return 26;
  3316.  
  3317. case 4212:
  3318. case 4214:
  3319. case 4215:
  3320. case 4216:
  3321. case 4217:
  3322. case 4218:
  3323. case 4219:
  3324. case 4220:
  3325. case 4221:
  3326. case 4222:
  3327. case 4223:
  3328. return 250;
  3329.  
  3330. }
  3331. return -1;
  3332. }
  3333.  
  3334. public int getRangeProjectileGFX() {
  3335. if (c.dbowSpec) {
  3336. return 1099;
  3337. }
  3338. if(c.bowSpecShot > 0) {
  3339. switch(c.rangeItemUsed) {
  3340. default:
  3341. return 249;
  3342. }
  3343. }
  3344. if (c.playerEquipment[c.playerWeapon] == 9185)
  3345. return 27;
  3346. switch(c.rangeItemUsed) {
  3347.  
  3348. case 863:
  3349. return 213;
  3350. case 864:
  3351. return 212;
  3352. case 865:
  3353. return 214;
  3354. case 866: // knives
  3355. return 216;
  3356. case 867:
  3357. return 217;
  3358. case 868:
  3359. return 218;
  3360. case 869:
  3361. return 215;
  3362.  
  3363. case 806:
  3364. return 226;
  3365. case 807:
  3366. return 227;
  3367. case 808:
  3368. return 228;
  3369. case 809: // darts
  3370. return 229;
  3371. case 810:
  3372. return 230;
  3373. case 11230:
  3374. return 1242;
  3375. case 811:
  3376. return 231;
  3377.  
  3378. case 825:
  3379. return 200;
  3380. case 826:
  3381. return 201;
  3382. case 827: // javelin
  3383. return 202;
  3384. case 828:
  3385. return 203;
  3386. case 829:
  3387. return 204;
  3388. case 830:
  3389. return 205;
  3390.  
  3391. case 6522: // Toktz-xil-ul
  3392. return 442;
  3393.  
  3394. case 800:
  3395. return 36;
  3396. case 801:
  3397. return 35;
  3398. case 802:
  3399. return 37; // axes
  3400. case 803:
  3401. return 38;
  3402. case 804:
  3403. return 39;
  3404. case 805:
  3405. return 40;
  3406.  
  3407. case 882:
  3408. return 10;
  3409.  
  3410. case 884:
  3411. return 9;
  3412.  
  3413. case 886:
  3414. return 11;
  3415.  
  3416. case 888:
  3417. return 12;
  3418.  
  3419. case 890:
  3420. return 13;
  3421.  
  3422. case 892:
  3423. return 15;
  3424.  
  3425. case 11212:
  3426. return 17;
  3427.  
  3428. case 4740: // bolt rack
  3429. return 27;
  3430.  
  3431.  
  3432.  
  3433. case 4212:
  3434. case 4214:
  3435. case 4215:
  3436. case 4216:
  3437. case 4217:
  3438. case 4218:
  3439. case 4219:
  3440. case 4220:
  3441. case 4221:
  3442. case 4222:
  3443. case 4223:
  3444. return 249;
  3445.  
  3446.  
  3447. }
  3448. return -1;
  3449. }
  3450.  
  3451. public int getProjectileSpeed() {
  3452. if (c.dbowSpec)
  3453. return 100;
  3454. return 70;
  3455. }
  3456.  
  3457. public int getProjectileShowDelay() {
  3458. switch(c.playerEquipment[c.playerWeapon]) {
  3459. case 863:
  3460. case 864:
  3461. case 865:
  3462. case 866: // knives
  3463. case 867:
  3464. case 868:
  3465. case 869:
  3466.  
  3467. case 806:
  3468. case 807:
  3469. case 808:
  3470. case 809: // darts
  3471. case 810:
  3472. case 811:
  3473. case 11230:
  3474.  
  3475. case 825:
  3476. case 826:
  3477. case 827: // javelin
  3478. case 828:
  3479. case 829:
  3480. case 830:
  3481.  
  3482. case 800:
  3483. case 801:
  3484. case 802:
  3485. case 803: // axes
  3486. case 804:
  3487. case 805:
  3488.  
  3489. case 4734:
  3490. case 9185:
  3491. case 4935:
  3492. case 4936:
  3493. case 4937:
  3494. return 15;
  3495.  
  3496.  
  3497. default:
  3498. return 5;
  3499. }
  3500. }
  3501.  
  3502. /**
  3503. *MAGIC
  3504. **/
  3505.  
  3506. public int mageAtk()
  3507. {
  3508. int attackLevel = c.playerLevel[6];
  3509. if (c.fullVoidMage())
  3510. attackLevel += c.getLevelForXP(c.playerXP[6]) * 0.2;
  3511. if (c.prayerActive[4])
  3512. attackLevel *= 1.05;
  3513. else if (c.prayerActive[12])
  3514. attackLevel *= 1.10;
  3515. else if (c.prayerActive[20])
  3516. attackLevel *= 1.15;
  3517. return (int) (attackLevel + (c.playerBonus[3] * 2));
  3518. }
  3519. public int mageDef()
  3520. {
  3521. int defenceLevel = c.playerLevel[1]/2 + c.playerLevel[6]/2;
  3522. if (c.prayerActive[0]) {
  3523. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.05;
  3524. } else if (c.prayerActive[3]) {
  3525. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.1;
  3526. } else if (c.prayerActive[9]) {
  3527. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.15;
  3528. } else if (c.prayerActive[18]) {
  3529. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.2;
  3530. } else if (c.prayerActive[19]) {
  3531. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.25;
  3532. }
  3533. return (int) (defenceLevel + c.playerBonus[8] + (c.playerBonus[8] / 3));
  3534. }
  3535.  
  3536. public boolean wearingStaff(int runeId) {
  3537. int wep = c.playerEquipment[c.playerWeapon];
  3538. switch (runeId) {
  3539. case 554:
  3540. if (wep == 1387)
  3541. return true;
  3542. break;
  3543. case 555:
  3544. if (wep == 1383)
  3545. return true;
  3546. break;
  3547. case 556:
  3548. if (wep == 1381)
  3549. return true;
  3550. break;
  3551. case 557:
  3552. if (wep == 1385)
  3553. return true;
  3554. break;
  3555. }
  3556. return false;
  3557. }
  3558.  
  3559. public boolean checkMagicReqs(int spell) {
  3560. if(c.usingMagic && Config.RUNES_REQUIRED) { // check for runes
  3561. if((!c.getItems().playerHasItem(c.MAGIC_SPELLS[spell][8], c.MAGIC_SPELLS[spell][9]) && !wearingStaff(c.MAGIC_SPELLS[spell][8])) ||
  3562. (!c.getItems().playerHasItem(c.MAGIC_SPELLS[spell][10], c.MAGIC_SPELLS[spell][11]) && !wearingStaff(c.MAGIC_SPELLS[spell][10])) ||
  3563. (!c.getItems().playerHasItem(c.MAGIC_SPELLS[spell][12], c.MAGIC_SPELLS[spell][13]) && !wearingStaff(c.MAGIC_SPELLS[spell][12])) ||
  3564. (!c.getItems().playerHasItem(c.MAGIC_SPELLS[spell][14], c.MAGIC_SPELLS[spell][15]) && !wearingStaff(c.MAGIC_SPELLS[spell][14]))){
  3565. c.sendMessage("You don't have the required runes to cast this spell.");
  3566. return false;
  3567. }
  3568. }
  3569.  
  3570. if(c.usingMagic && c.playerIndex > 0) {
  3571. if(Server.playerHandler.players[c.playerIndex] != null) {
  3572. for(int r = 0; r < c.REDUCE_SPELLS.length; r++){ // reducing spells, confuse etc
  3573. if(Server.playerHandler.players[c.playerIndex].REDUCE_SPELLS[r] == c.MAGIC_SPELLS[spell][0]) {
  3574. c.reduceSpellId = r;
  3575. if((System.currentTimeMillis() - Server.playerHandler.players[c.playerIndex].reduceSpellDelay[c.reduceSpellId]) > Server.playerHandler.players[c.playerIndex].REDUCE_SPELL_TIME[c.reduceSpellId]) {
  3576. Server.playerHandler.players[c.playerIndex].canUseReducingSpell[c.reduceSpellId] = true;
  3577. } else {
  3578. Server.playerHandler.players[c.playerIndex].canUseReducingSpell[c.reduceSpellId] = false;
  3579. }
  3580. break;
  3581. }
  3582. }
  3583. if(!Server.playerHandler.players[c.playerIndex].canUseReducingSpell[c.reduceSpellId]) {
  3584. c.sendMessage("That player is currently immune to this spell.");
  3585. c.usingMagic = false;
  3586. c.stopMovement();
  3587. resetPlayerAttack();
  3588. return false;
  3589. }
  3590. }
  3591. }
  3592.  
  3593. int staffRequired = getStaffNeeded();
  3594. if(c.usingMagic && staffRequired > 0 && Config.RUNES_REQUIRED) { // staff required
  3595. if(c.playerEquipment[c.playerWeapon] != staffRequired) {
  3596. c.sendMessage("You need a "+c.getItems().getItemName(staffRequired).toLowerCase()+" to cast this spell.");
  3597. return false;
  3598. }
  3599. }
  3600.  
  3601. if(c.usingMagic && Config.MAGIC_LEVEL_REQUIRED) { // check magic level
  3602. if(c.playerLevel[6] < c.MAGIC_SPELLS[spell][1]) {
  3603. c.sendMessage("You need to have a magic level of " +c.MAGIC_SPELLS[spell][1]+" to cast this spell.");
  3604. return false;
  3605. }
  3606. }
  3607. if(c.usingMagic && Config.RUNES_REQUIRED) {
  3608. if(c.MAGIC_SPELLS[spell][8] > 0) { // deleting runes
  3609. if (!wearingStaff(c.MAGIC_SPELLS[spell][8]))
  3610. c.getItems().deleteItem(c.MAGIC_SPELLS[spell][8], c.getItems().getItemSlot(c.MAGIC_SPELLS[spell][8]), c.MAGIC_SPELLS[spell][9]);
  3611. }
  3612. if(c.MAGIC_SPELLS[spell][10] > 0) {
  3613. if (!wearingStaff(c.MAGIC_SPELLS[spell][10]))
  3614. c.getItems().deleteItem(c.MAGIC_SPELLS[spell][10], c.getItems().getItemSlot(c.MAGIC_SPELLS[spell][10]), c.MAGIC_SPELLS[spell][11]);
  3615. }
  3616. if(c.MAGIC_SPELLS[spell][12] > 0) {
  3617. if (!wearingStaff(c.MAGIC_SPELLS[spell][12]))
  3618. c.getItems().deleteItem(c.MAGIC_SPELLS[spell][12], c.getItems().getItemSlot(c.MAGIC_SPELLS[spell][12]), c.MAGIC_SPELLS[spell][13]);
  3619. }
  3620. if(c.MAGIC_SPELLS[spell][14] > 0) {
  3621. if (!wearingStaff(c.MAGIC_SPELLS[spell][14]))
  3622. c.getItems().deleteItem(c.MAGIC_SPELLS[spell][14], c.getItems().getItemSlot(c.MAGIC_SPELLS[spell][14]), c.MAGIC_SPELLS[spell][15]);
  3623. }
  3624. }
  3625. return true;
  3626. }
  3627.  
  3628.  
  3629. public int getFreezeTime() {
  3630. switch(c.MAGIC_SPELLS[c.oldSpellId][0]) {
  3631. case 1572:
  3632. case 12861: // ice rush
  3633. return 10;
  3634.  
  3635. case 1582:
  3636. case 12881: // ice burst
  3637. return 17;
  3638.  
  3639. case 1592:
  3640. case 12871: // ice blitz
  3641. return 25;
  3642.  
  3643. case 12891: // ice barrage
  3644. return 33;
  3645.  
  3646. default:
  3647. return 0;
  3648. }
  3649. }
  3650.  
  3651. public void freezePlayer(int i) {
  3652.  
  3653.  
  3654. }
  3655.  
  3656. public int getStartHeight() {
  3657. switch(c.MAGIC_SPELLS[c.spellId][0]) {
  3658. case 1562: // stun
  3659. return 25;
  3660.  
  3661. case 12939:// smoke rush
  3662. return 35;
  3663.  
  3664. case 12987: // shadow rush
  3665. return 38;
  3666.  
  3667. case 12861: // ice rush
  3668. return 15;
  3669.  
  3670. case 12951: // smoke blitz
  3671. return 38;
  3672.  
  3673. case 12999: // shadow blitz
  3674. return 25;
  3675.  
  3676. case 12911: // blood blitz
  3677. return 25;
  3678.  
  3679. default:
  3680. return 43;
  3681. }
  3682. }
  3683.  
  3684.  
  3685.  
  3686. public int getEndHeight() {
  3687. switch(c.MAGIC_SPELLS[c.spellId][0]) {
  3688. case 1562: // stun
  3689. return 10;
  3690.  
  3691. case 12939: // smoke rush
  3692. return 20;
  3693.  
  3694. case 12987: // shadow rush
  3695. return 28;
  3696.  
  3697. case 12861: // ice rush
  3698. return 10;
  3699.  
  3700. case 12951: // smoke blitz
  3701. return 28;
  3702.  
  3703. case 12999: // shadow blitz
  3704. return 15;
  3705.  
  3706. case 12911: // blood blitz
  3707. return 10;
  3708.  
  3709. default:
  3710. return 31;
  3711. }
  3712. }
  3713.  
  3714. public int getStartDelay() {
  3715. switch(c.MAGIC_SPELLS[c.spellId][0]) {
  3716. case 1539:
  3717. return 60;
  3718.  
  3719. default:
  3720. return 53;
  3721. }
  3722. }
  3723.  
  3724. public int getStaffNeeded() {
  3725. switch(c.MAGIC_SPELLS[c.spellId][0]) {
  3726. case 1539:
  3727. return 1409;
  3728.  
  3729. case 12037:
  3730. return 4170;
  3731.  
  3732. case 1190:
  3733. return 2415;
  3734.  
  3735. case 1191:
  3736. return 2416;
  3737.  
  3738. case 1192:
  3739. return 2417;
  3740.  
  3741. default:
  3742. return 0;
  3743. }
  3744. }
  3745.  
  3746. public boolean godSpells() {
  3747. switch(c.MAGIC_SPELLS[c.spellId][0]) {
  3748. case 1190:
  3749. return true;
  3750.  
  3751. case 1191:
  3752. return true;
  3753.  
  3754. case 1192:
  3755. return true;
  3756.  
  3757. default:
  3758. return false;
  3759. }
  3760. }
  3761.  
  3762. public int getEndGfxHeight() {
  3763. switch(c.MAGIC_SPELLS[c.oldSpellId][0]) {
  3764. case 12987:
  3765. case 12901:
  3766. case 12861:
  3767. case 12445:
  3768. case 1192:
  3769. case 13011:
  3770. case 12919:
  3771. case 12881:
  3772. case 12999:
  3773. case 12911:
  3774. case 12871:
  3775. case 13023:
  3776. case 12929:
  3777. case 12891:
  3778. return 0;
  3779.  
  3780. default:
  3781. return 100;
  3782. }
  3783. }
  3784.  
  3785. public int getStartGfxHeight() {
  3786. switch(c.MAGIC_SPELLS[c.spellId][0]) {
  3787. case 12871:
  3788. case 12891:
  3789. return 0;
  3790.  
  3791. default:
  3792. return 100;
  3793. }
  3794. }
  3795.  
  3796.  
  3797. public void handleDfs() {
  3798. if (System.currentTimeMillis() - c.dfsDelay > 30000) {
  3799. if (c.playerIndex > 0 && Server.playerHandler.players[c.playerIndex] != null) {
  3800. int damage = Misc.random(15) + 5;
  3801. c.startAnimation(6696);
  3802. c.gfx0(1165);
  3803. Server.playerHandler.players[c.playerIndex].gfx100(1167);
  3804. Server.playerHandler.players[c.playerIndex].gfx0(1154);
  3805. Server.playerHandler.players[c.playerIndex].playerLevel[3] -= damage;
  3806. Server.playerHandler.players[c.playerIndex].hitDiff2 = damage;
  3807. Server.playerHandler.players[c.playerIndex].hitUpdateRequired2 = true;
  3808. Server.playerHandler.players[c.playerIndex].updateRequired = true;
  3809. c.dfsDelay = System.currentTimeMillis();
  3810. } else {
  3811. c.sendMessage("I should be in combat before using this.");
  3812. }
  3813. } else {
  3814. c.sendMessage("My shield hasn't finished recharging yet.");
  3815. }
  3816. }
  3817.  
  3818. public void handleDfsNPC() {
  3819. if (System.currentTimeMillis() - c.dfsDelay > 30000) {
  3820. if (c.npcIndex > 0 && Server.npcHandler.npcs[c.npcIndex] != null) {
  3821. int damage = Misc.random(15) + 5;
  3822. c.startAnimation(2836);
  3823. c.gfx0(600);
  3824. Server.npcHandler.npcs[c.npcIndex].HP -= damage;
  3825. Server.npcHandler.npcs[c.npcIndex].hitDiff2 = damage;
  3826. Server.npcHandler.npcs[c.npcIndex].hitUpdateRequired2 = true;
  3827. Server.npcHandler.npcs[c.npcIndex].updateRequired = true;
  3828. c.dfsDelay = System.currentTimeMillis();
  3829. } else {
  3830. c.sendMessage("I should be in combat before using this.");
  3831. }
  3832. } else {
  3833. c.sendMessage("My shield hasn't finished recharging yet.");
  3834. }
  3835. }
  3836.  
  3837. public void applyRecoil(int damage, int i) {
  3838. if (damage > 0 && Server.playerHandler.players[i].playerEquipment[c.playerRing] == 2550) {
  3839. int recDamage = damage/10 + 1;
  3840. if (!c.getHitUpdateRequired()) {
  3841. c.setHitDiff(recDamage);
  3842. c.setHitUpdateRequired(true);
  3843. } else if (!c.getHitUpdateRequired2()) {
  3844. c.setHitDiff2(recDamage);
  3845. c.setHitUpdateRequired2(true);
  3846. }
  3847. c.dealDamage(recDamage);
  3848. c.updateRequired = true;
  3849. }
  3850. }
  3851.  
  3852. public int getBonusAttack(int i) {
  3853. switch (Server.npcHandler.npcs[i].npcType) {
  3854. case 2883:
  3855. return Misc.random(50) + 30;
  3856. case 3200:
  3857. return Misc.random(50) + 30;
  3858. case 5247:
  3859. return Misc.random(50) + 30;
  3860. case 2026:
  3861. case 2027:
  3862. case 2029:
  3863. case 2030:
  3864. return Misc.random(50) + 30;
  3865. }
  3866. return 0;
  3867. }
  3868.  
  3869.  
  3870.  
  3871. public void handleGmaulPlayer() {
  3872. if (c.playerIndex > 0) {
  3873. Client o = (Client)Server.playerHandler.players[c.playerIndex];
  3874. if (c.goodDistance(c.getX(), c.getY(), o.getX(), o.getY(), getRequiredDistance())) {
  3875. if (checkReqs()) {
  3876. if (checkSpecAmount(4153)) {
  3877. boolean hit = Misc.random(calculateMeleeAttack()) > Misc.random(o.getCombat().calculateMeleeDefence());
  3878. int damage = 0;
  3879. if (hit)
  3880. damage = Misc.random(calculateMeleeMaxHit());
  3881. if (o.prayerActive[18] && System.currentTimeMillis() - o.protMeleeDelay > 1500)
  3882. damage *= .6;
  3883. o.handleHitMask(damage);
  3884. c.startAnimation(1667);
  3885. c.gfx100(340);
  3886. o.dealDamage(damage);
  3887. }
  3888. }
  3889. }
  3890. }
  3891. }
  3892.  
  3893. public boolean armaNpc(int i) {
  3894. switch (Server.npcHandler.npcs[i].npcType) {
  3895. case 2558:
  3896. case 2559:
  3897. case 2560:
  3898. case 2561:
  3899. return true;
  3900. }
  3901. return false;
  3902. }
  3903.  
  3904. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement