Advertisement
Guest User

Untitled

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