Advertisement
Guest User

Untitled

a guest
Sep 14th, 2017
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 175.71 KB | None | 0 0
  1. package server.model.players;
  2.  
  3. import server.Config;
  4. import server.Server;
  5. import server.util.Misc;
  6. import server.model.players.Client;
  7. import server.model.players.PlayerSave;
  8. import server.event.EventManager;
  9. import server.model.npcs.NPC;
  10. import server.model.npcs.NPCHandler;
  11. import server.event.EventContainer;
  12. import server.event.Event;
  13.  
  14.  
  15. public class CombatAssistant{
  16.  
  17. private Client c;
  18. public CombatAssistant(Client Client) {
  19. this.c = Client;
  20. }
  21.  
  22.  
  23. public int[][] slayerReqs = {{1648,5},{1612,15},{1643,45},{1618,50},{1624,65},{1610,75},{1613,80},{1615,85},{2783,90}, {3590, 92}, {3591, 82}, {3592, 72}};
  24.  
  25. public boolean goodSlayer(int i) {
  26. for (int j = 0; j < slayerReqs.length; j++) {
  27. if (slayerReqs[j][0] == Server.npcHandler.npcs[i].npcType) {
  28. if (slayerReqs[j][1] > c.playerLevel[c.playerSlayer]) {
  29. c.sendMessage("You need a slayer level of " + slayerReqs[j][1] + " to harm this NPC.");
  30. return false;
  31. }
  32. }
  33. }
  34. return true;
  35. }
  36.  
  37. /**
  38. * Attack Npcs
  39. */
  40. public void attackNpc(int i) {
  41. if (c.playerEquipment[c.playerWeapon] == 15241) {
  42. c.gfx0(2138);
  43. }
  44. if (Server.npcHandler.npcs[i] != null) {
  45. if (Server.npcHandler.npcs[i].isDead || Server.npcHandler.npcs[i].MaxHP <= 0) {
  46. c.usingMagic = false;
  47. c.faceUpdate(0);
  48. c.npcIndex = 0;
  49. return;
  50. }
  51. if(c.specEffect == 4) {
  52. c.specEffect = 0;
  53. }
  54. if (c.inWG()) {
  55. resetPlayerAttack();
  56. c.stopMovement();
  57. return;
  58. }
  59. if (Server.npcHandler.npcs[i].npcType == 1000 || Server.npcHandler.npcs[i].npcType == 1001 || Server.npcHandler.npcs[i].npcType == 3100 || Server.npcHandler.npcs[i].npcType == 1002 || Server.npcHandler.npcs[i].npcType == 1003) {
  60. resetPlayerAttack();
  61. c.stopMovement();
  62. return; // Bandos
  63. }
  64. if (Server.npcHandler.npcs[i].npcType == 3104) {
  65. c.sendMessage("You must click the gate before attacking the Corporeal Beast!");
  66. resetPlayerAttack();
  67. c.stopMovement();
  68. return; // Corporeal beast *fake*
  69. }
  70.  
  71. if (Server.npcHandler.npcs[i].npcType == 1004 || Server.npcHandler.npcs[i].npcType == 1005 || Server.npcHandler.npcs[i].npcType == 1006 || Server.npcHandler.npcs[i].npcType == 1007) {
  72. resetPlayerAttack();
  73. c.stopMovement();
  74. return; // Arma
  75. }
  76. if (Server.npcHandler.npcs[i].npcType == 1008 || Server.npcHandler.npcs[i].npcType == 1009 || Server.npcHandler.npcs[i].npcType == 1010 || Server.npcHandler.npcs[i].npcType == 1011) {
  77. resetPlayerAttack();
  78. c.stopMovement();
  79. return; // Zammy
  80. }
  81. if (Server.npcHandler.npcs[i].npcType == 1012 || Server.npcHandler.npcs[i].npcType == 1013 || Server.npcHandler.npcs[i].npcType == 1014 || Server.npcHandler.npcs[i].npcType == 1015) {
  82. resetPlayerAttack();
  83. c.stopMovement();
  84. return; // Sara
  85. }
  86.  
  87. if (Server.npcHandler.npcs[i].summon == true) {
  88. if(Server.npcHandler.npcs[i].index != c.playerId || c.wildLevel <= 1) {
  89. resetPlayerAttack();
  90. c.sendMessage("You cannot attack this monster.");
  91.  
  92. // c.sendMessage("This is "+Server.npcHandler.npcz[i]+" NPC.");
  93. return;
  94. }
  95. }
  96.  
  97.  
  98. if(c.respawnTimer > 0) {
  99. c.npcIndex = 0;
  100. return;
  101. }
  102. if (Server.npcHandler.npcs[i].underAttackBy > 0 && Server.npcHandler.npcs[i].underAttackBy != c.playerId && !Server.npcHandler.npcs[i].inMulti()) {
  103. c.npcIndex = 0;
  104. c.sendMessage("This monster is already in combat.");
  105. return;
  106. }
  107. if (Server.npcHandler.npcs[i].inMulti() && c.lastsummon > 0) {
  108. Server.npcHandler.attackNPC(i, c.summoningnpcid);
  109. }
  110. if ((c.underAttackBy > 0 || c.underAttackBy2 > 0) && c.underAttackBy2 != i && !c.inMulti()) {
  111. resetPlayerAttack();
  112. c.sendMessage("I am already under attack.");
  113. return;
  114. }
  115. if (!goodSlayer(i)) {
  116. resetPlayerAttack();
  117. return;
  118. }
  119. /*if (Server.npcHandler.npcs[i].spawnedBy != c.playerId && Server.npcHandler.npcs[i].spawnedBy > 0 && Server.npcHandler.npcs[i].summon != true) {
  120. resetPlayerAttack();
  121. c.sendMessage("This monster was not spawned for you.");
  122. return;
  123. }
  124. if (Server.npcHandler.npcs[i].spawnedBy != c.playerId && Server.npcHandler.npcs[i].spawnedBy > 0) {
  125. resetPlayerAttack();
  126. c.sendMessage("This monster was not spawned for you.");
  127. return;
  128. }*/
  129. if(c.attackTimer <= 0) {
  130. boolean usingBow = false;
  131. boolean usingArrows = false;
  132. boolean usingOtherRangeWeapons = false;
  133. boolean usingCross = c.playerEquipment[c.playerWeapon] == 9185;
  134. c.bonusAttack = 0;
  135. c.rangeItemUsed = 0;
  136. c.projectileStage = 0;
  137. //c.SaveGame();
  138. if (c.autocasting) {
  139. c.spellId = c.autocastId;
  140. c.usingMagic = true;
  141. }
  142. if (kalphite1(i) && !c.fullVerac() || kalphite1(i) && c.usingMagic) {
  143. resetPlayerAttack();
  144. c.sendMessage("Your attacks have no effect on the Queen.");
  145. return;
  146. }
  147. if(c.spellId > 0) {
  148. c.usingMagic = true;
  149. }
  150. c.attackTimer = getAttackDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  151. c.specAccuracy = 1.0;
  152. c.specDamage = 1.0;
  153. if(!c.usingMagic) {
  154. for (int bowId : c.BOWS) {
  155. if(c.playerEquipment[c.playerWeapon] == bowId) {
  156. usingBow = true;
  157. for (int arrowId : c.ARROWS) {
  158. if(c.playerEquipment[c.playerArrows] == arrowId) {
  159. usingArrows = true;
  160. c.gfx100(getRangeStartGFX());
  161. }
  162. }
  163. }
  164. }
  165.  
  166. for (int otherRangeId : c.OTHER_RANGE_WEAPONS) {
  167. if(c.playerEquipment[c.playerWeapon] == otherRangeId) {
  168. usingOtherRangeWeapons = true;
  169. }
  170. }
  171. }
  172. if (armaNpc(i) && !usingCross && !usingBow && !c.usingMagic && !usingCrystalBow() && !usingOtherRangeWeapons) {
  173. resetPlayerAttack();
  174. c.sendMessage("You can only Range/Mage Armadyl creeps!");
  175. return;
  176. }
  177. if((!c.goodDistance(c.getX(), c.getY(), Server.npcHandler.npcs[i].getX(), Server.npcHandler.npcs[i].getY(), 2) && (usingHally() && !usingOtherRangeWeapons && !usingBow && !usingCross && !c.usingMagic)) ||(!c.goodDistance(c.getX(), c.getY(), Server.npcHandler.npcs[i].getX(), Server.npcHandler.npcs[i].getY(), 4) && (usingOtherRangeWeapons && !usingCross && !usingBow && !c.usingMagic)) || (!c.goodDistance(c.getX(), c.getY(), Server.npcHandler.npcs[i].getX(), Server.npcHandler.npcs[i].getY(), 1) && (!usingOtherRangeWeapons && !usingHally() && !usingCross && !usingBow && !c.usingMagic)) || ((!c.goodDistance(c.getX(), c.getY(), Server.npcHandler.npcs[i].getX(), Server.npcHandler.npcs[i].getY(), 8) && (usingBow || usingCross || c.usingMagic)))) {
  178. c.attackTimer = 2;
  179. return;
  180. }
  181.  
  182. if(!usingCross && !usingArrows && usingBow && (c.playerEquipment[c.playerWeapon] < 4212 || c.playerEquipment[c.playerWeapon] > 4223)) {
  183. c.sendMessage("You have run out of arrows!");
  184. c.stopMovement();
  185. c.npcIndex = 0;
  186. return;
  187. }
  188. if(correctBowAndArrows() < c.playerEquipment[c.playerArrows] && Config.CORRECT_ARROWS && usingBow && !usingCrystalBow() && c.playerEquipment[c.playerWeapon] != 9185) {
  189. 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()+".");
  190. c.stopMovement();
  191. c.npcIndex = 0;
  192. return;
  193. }
  194. if (c.playerEquipment[c.playerWeapon] == 9185 && !properBolts()) {
  195. c.sendMessage("You must use bolts with a crossbow.");
  196. c.stopMovement();
  197. resetPlayerAttack();
  198. return;
  199. }
  200.  
  201.  
  202.  
  203. if(usingBow || usingCross || c.usingMagic || usingOtherRangeWeapons || (c.goodDistance(c.getX(), c.getY(), Server.npcHandler.npcs[i].getX(), Server.npcHandler.npcs[i].getY(), 2) && usingHally())) {
  204. c.stopMovement();
  205. }
  206.  
  207. if(!checkMagicReqs(c.spellId)) {
  208. c.stopMovement();
  209. c.npcIndex = 0;
  210. return;
  211. }
  212.  
  213. c.faceUpdate(i);
  214. //c.specAccuracy = 1.0;
  215. //c.specDamage = 1.0;
  216. Server.npcHandler.npcs[i].underAttackBy = c.playerId;
  217. Server.npcHandler.npcs[i].lastDamageTaken = System.currentTimeMillis();
  218. if(c.usingSpecial && !c.usingMagic) {
  219. if(checkSpecAmount(c.playerEquipment[c.playerWeapon])){
  220. c.lastWeaponUsed = c.playerEquipment[c.playerWeapon];
  221. c.lastArrowUsed = c.playerEquipment[c.playerArrows];
  222. activateSpecial(c.playerEquipment[c.playerWeapon], i);
  223. return;
  224. } else {
  225. c.sendMessage("You don't have the required special energy to use this attack.");
  226. c.usingSpecial = false;
  227. c.getItems().updateSpecialBar();
  228. c.npcIndex = 0;
  229. return;
  230. }
  231. }
  232. if(usingBow || c.usingMagic || usingOtherRangeWeapons) {
  233. c.mageFollow = true;
  234. } else {
  235. c.mageFollow = false;
  236. }
  237.  
  238. c.specMaxHitIncrease = 0;
  239. if(!c.usingMagic) {
  240. c.startAnimation(getWepAnim(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase()));
  241. } else {
  242. c.startAnimation(c.MAGIC_SPELLS[c.spellId][2]);
  243. }
  244. c.lastWeaponUsed = c.playerEquipment[c.playerWeapon];
  245. c.lastArrowUsed = c.playerEquipment[c.playerArrows];
  246. if(!usingBow && !usingCross && !c.usingMagic && !usingOtherRangeWeapons) { // melee hit delay
  247. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  248. c.projectileStage = 0;
  249. c.oldNpcIndex = i;
  250. }
  251.  
  252. if(usingBow && !usingOtherRangeWeapons && !c.usingMagic || usingCross) { // range hit delay
  253. if (usingCross)
  254. c.usingBow = true;
  255. if (c.fightMode == 2)
  256. c.attackTimer--;
  257. c.lastArrowUsed = c.playerEquipment[c.playerArrows];
  258. c.lastWeaponUsed = c.playerEquipment[c.playerWeapon];
  259. c.gfx100(getRangeStartGFX());
  260. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  261. c.projectileStage = 1;
  262. c.oldNpcIndex = i;
  263. if(c.playerEquipment[c.playerWeapon] >= 4212 && c.playerEquipment[c.playerWeapon] <= 4223) {
  264. c.rangeItemUsed = c.playerEquipment[c.playerWeapon];
  265. c.crystalBowArrowCount++;
  266. c.lastArrowUsed = 0;
  267. } else {
  268. c.rangeItemUsed = c.playerEquipment[c.playerArrows];
  269. c.getItems().deleteArrow();
  270. }
  271. fireProjectileNpc();
  272. }
  273.  
  274. if(usingBow && usingCross && c.usingMagic && usingOtherRangeWeapons) {
  275. c.getPA().followNpc();
  276. c.stopMovement();
  277. } else {
  278. c.followId = 0;
  279. c.followId2 = i;
  280. }
  281.  
  282.  
  283. if(usingOtherRangeWeapons && !c.usingMagic && !usingCross && !usingBow) { // knives, darts, etc hit delay
  284. c.rangeItemUsed = c.playerEquipment[c.playerWeapon];
  285. c.getItems().deleteEquipment();
  286. c.gfx100(getRangeStartGFX());
  287. c.lastArrowUsed = 0;
  288. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  289. c.projectileStage = 1;
  290. c.oldNpcIndex = i;
  291. if (c.fightMode == 2)
  292. c.attackTimer--;
  293. fireProjectileNpc();
  294. }
  295.  
  296. if(c.usingMagic) { // magic hit delay
  297. int pX = c.getX();
  298. int pY = c.getY();
  299. int nX = Server.npcHandler.npcs[i].getX();
  300. int nY = Server.npcHandler.npcs[i].getY();
  301. int offX = (pY - nY)* -1;
  302. int offY = (pX - nX)* -1;
  303. c.castingMagic = true;
  304. c.projectileStage = 2;
  305. if(c.MAGIC_SPELLS[c.spellId][3] > 0) {
  306. if(getStartGfxHeight() == 100) {
  307. c.gfx100(c.MAGIC_SPELLS[c.spellId][3]);
  308. } else {
  309. c.gfx0(c.MAGIC_SPELLS[c.spellId][3]);
  310. }
  311. }
  312. if(c.MAGIC_SPELLS[c.spellId][4] > 0) {
  313. c.getPA().createPlayersProjectile(pX, pY, offX, offY, 50, 78, c.MAGIC_SPELLS[c.spellId][4], getStartHeight(), getEndHeight(), i + 1, 50);
  314. }
  315. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  316. c.oldNpcIndex = i;
  317. c.oldSpellId = c.spellId;
  318. c.spellId = 0;
  319. if (!c.autocasting)
  320. c.npcIndex = 0;
  321. }
  322. if(c.curseActive[18]) { // SoulSplit GFX's - CAUSES CRASH
  323. if(c.oldNpcIndex > 0) {
  324. if(Server.npcHandler.npcs[c.oldNpcIndex] != null) {
  325. try {
  326. if(c.curseActive[18] && !c.prayerActive[23] && c.playerLevel[3] <= 99) {
  327. int heal = 2;
  328. if(c.playerLevel[3] + heal >= c.getPA().getLevelForXP(c.playerXP[3])) {
  329. c.playerLevel[3] = c.getPA().getLevelForXP(c.playerXP[3]);
  330. } else {
  331. c.playerLevel[3] += heal;
  332. }
  333. c.getPA().refreshSkill(3);
  334. }
  335. final int pX = c.getX();
  336. final int pY = c.getY();
  337. final int nX = Server.npcHandler.npcs[c.oldNpcIndex].getX();
  338. final int nY = Server.npcHandler.npcs[c.oldNpcIndex].getY();
  339. final int offX = (pY - nY)* -1;
  340. final int offY = (pX - nX)* -1;
  341. c.SSPLIT = true;
  342. c.getPA().createPlayersProjectile2(pX, pY, offX, offY, 50, 50, 2263, 9, 9, c.oldNpcIndex + 1, 24, 0);
  343. EventManager.getSingleton().addEvent(new Event() {
  344. public void execute(EventContainer b) {
  345. Server.npcHandler.npcs[c.oldNpcIndex].gfx0(2264); // 1738
  346. c.SSPLIT = false;
  347. b.stop();
  348. }
  349. }, 500);
  350. /*EventManager.getSingleton().addEvent(new Event() { // CAUSES CRASH
  351. public void execute(EventContainer b) {
  352. //c.getPA().createPlayersProjectile2(nX, nY, offX, offY, 50, 50, 2263, 9, 9, - c.playerId - 1, 24, 0);
  353. b.stop();
  354. }
  355. }, 800);*/
  356. } catch (Exception e) {
  357. e.printStackTrace();
  358. }
  359. }
  360. }
  361. }
  362.  
  363. if(c.crystalBowArrowCount >= 250){
  364. switch(c.playerEquipment[c.playerWeapon]) {
  365.  
  366. case 4223: // 1/10 bow
  367. c.getItems().wearItem(-1, 1, 3);
  368. c.sendMessage("Your crystal bow has fully degraded.");
  369. if(!c.getItems().addItem(4207, 1)) {
  370. Server.itemHandler.createGroundItem(c, 4207, c.getX(), c.getY(), 1, c.getId());
  371. }
  372. c.crystalBowArrowCount = 0;
  373. break;
  374.  
  375. default:
  376. c.getItems().wearItem(++c.playerEquipment[c.playerWeapon], 1, 3);
  377. c.sendMessage("Your crystal bow degrades.");
  378. c.crystalBowArrowCount = 0;
  379. break;
  380.  
  381.  
  382. }
  383. }
  384. }
  385. if(c.playerEquipment[c.playerWeapon] == 13899) {
  386. c.vlsLeft -= 1;
  387. c.degradeVls();
  388. }
  389. if(c.playerEquipment[c.playerWeapon] == 13905) {
  390. c.vSpearLeft -=1;
  391. c.degradeVSpear();
  392. }
  393. if(c.playerEquipment[c.playerChest] == 13858) {
  394. c.zTopLeft -=1;
  395. c.degradeZTop();
  396. }
  397. if(c.playerEquipment[c.playerLegs] == 13861) {
  398. c.zBottomLeft -=1;
  399. c.degradeZBottom();
  400. }
  401. if(c.playerEquipment[c.playerWeapon] == 13902){
  402. c.statLeft -= 1;
  403. c.degradeStat();
  404. }
  405. if(c.playerEquipment[c.playerChest] == 13887) {
  406. c.vTopLeft -=1;
  407. c.degradeVTop();
  408. }
  409. if(c.playerEquipment[c.playerLegs] == 13893) {
  410. c.vLegsLeft -=1;
  411. c.degradeVLegs();
  412. }
  413. if(c.playerEquipment[c.playerWeapon] == 13867) {
  414. c.zStaffLeft -=1;
  415. c.degradeZStaff();
  416. }
  417. if(c.playerEquipment[c.playerHat] == 13864) {
  418. c.zHoodLeft -=1;
  419. c.degradeZHood();
  420. }
  421. if(c.playerEquipment[c.playerChest] == 13870) {
  422. c.mBodyLeft -=1;
  423. c.degradeMBody();
  424. }
  425. if(c.playerEquipment[c.playerLegs] == 13873) {
  426. c.mChapsLeft -=1;
  427. c.degradeMChaps();
  428. }
  429. if(c.playerEquipment[c.playerChest] == 13884) {
  430. c.sTopLeft -=1;
  431. c.degradeSTop();
  432. }
  433. if(c.playerEquipment[c.playerLegs] == 13890) {
  434. c.sLegsLeft -=1;
  435. c.degradeSLegs();
  436. }
  437. if(c.playerEquipment[c.playerHat] == 13896) {
  438. c.sHelmLeft -=1;
  439. c.degradeSHelm();
  440. }
  441. }
  442. }
  443.  
  444.  
  445. public void delayedHit(int i) { // npc hit delay
  446. if (Server.npcHandler.npcs[i] != null) {
  447. if (Server.npcHandler.npcs[i].isDead) {
  448. c.npcIndex = 0;
  449. return;
  450. }
  451. Server.npcHandler.npcs[i].facePlayer(c.playerId);
  452.  
  453. if (Server.npcHandler.npcs[i].underAttackBy > 0 && Server.npcHandler.getsPulled(i)) {
  454. Server.npcHandler.npcs[i].killerId = c.playerId;
  455. } else if (Server.npcHandler.npcs[i].underAttackBy < 0 && !Server.npcHandler.getsPulled(i)) {
  456. Server.npcHandler.npcs[i].killerId = c.playerId;
  457. }
  458. c.lastNpcAttacked = i;
  459. if(c.projectileStage == 0 && !c.usingMagic && !c.castingMagic) { // melee hit damage
  460. if (!c.usingClaws)
  461. applyNpcMeleeDamage(i, 1, Misc.random(calculateMeleeMaxHit()));
  462. if(c.doubleHit && !c.usingClaws) {
  463. applyNpcMeleeDamage(i, 2, Misc.random(calculateMeleeMaxHit()));
  464. }
  465. if(c.doubleHit && c.usingClaws) {
  466. c.delayedDamage = c.clawDamage;
  467. c.delayedDamage2 = c.clawDamage/2;
  468. applyNpcMeleeDamage(i, 1, c.clawDamage);
  469. applyNpcMeleeDamage(i, 2, c.clawDamage/2);
  470. }
  471. }
  472.  
  473. if(!c.castingMagic && c.projectileStage > 0) { // range hit damage
  474. int damage = Misc.random(rangeMaxHit());
  475. int damage2 = -1;
  476. if (c.lastWeaponUsed == 11235 || c.lastWeaponUsed == 14481 || c.lastWeaponUsed == 14482 || c.bowSpecShot == 1)
  477. damage2 = Misc.random(rangeMaxHit());
  478. boolean ignoreDef = false;
  479. if (Misc.random(5) == 1 && c.lastArrowUsed == 9243 && c.playerEquipment[c.playerWeapon] == 9185) {
  480. ignoreDef = true;
  481. Server.npcHandler.npcs[i].gfx0(758);
  482. }
  483.  
  484.  
  485. if(Misc.random(Server.npcHandler.npcs[i].defence) > Misc.random(10+calculateRangeAttack()) && !ignoreDef) {
  486. damage = 0;
  487. } else if (Server.npcHandler.npcs[i].npcType == 2881 || Server.npcHandler.npcs[i].npcType == 2883 || Server.npcHandler.npcs[i].npcType == 3340 && !ignoreDef) {
  488. damage = 0;
  489. }
  490.  
  491. if (Misc.random(4) == 1 && c.lastArrowUsed == 9242 && damage > 0 && c.playerEquipment[c.playerWeapon] == 9185) {
  492. Server.npcHandler.npcs[i].gfx0(754);
  493. damage = Server.npcHandler.npcs[i].HP/5;
  494. //c.handleHitMask(c.playerLevel[3]/10);
  495. c.dealDamage(c.playerLevel[3]/10);
  496. c.gfx0(754);
  497. }
  498.  
  499. if (c.lastWeaponUsed == 11235 || c.bowSpecShot == 1) {
  500. if (Misc.random(Server.npcHandler.npcs[i].defence) > Misc.random(10+calculateRangeAttack()))
  501. damage2 = 0;
  502. }
  503. if (c.dbowSpec) {
  504. Server.npcHandler.npcs[i].gfx100(1100);
  505. if(c.dbowDelay == 4)
  506. if (damage < 8)
  507. damage = 8;
  508. else if(c.dbowDelay == 1)
  509. if (damage2 < 8)
  510. damage2 = 8;
  511. c.dbowSpec = false;
  512. }
  513. if (damage > 0 && Misc.random(5) == 1 && c.lastArrowUsed == 9244 && c.playerEquipment[c.playerWeapon] == 9185) {
  514. damage *= 1.45;
  515. Server.npcHandler.npcs[i].gfx0(756);
  516. }
  517.  
  518. if (Server.npcHandler.npcs[i].HP - damage < 0) {
  519. damage = Server.npcHandler.npcs[i].HP;
  520. }
  521. if (Server.npcHandler.npcs[i].HP - damage <= 0 && damage2 > 0) {
  522. damage2 = 0;
  523. }
  524. if(c.fightMode == 3) {
  525. c.getPA().addSkillXP((damage*Config.RANGE_EXP_RATE/3), 4);
  526. c.getPA().addSkillXP((damage*Config.RANGE_EXP_RATE/3), 1);
  527. c.getPA().addSkillXP((damage*Config.RANGE_EXP_RATE/3), 3);
  528. c.getPA().refreshSkill(1);
  529. c.getPA().refreshSkill(3);
  530. c.getPA().refreshSkill(4);
  531. } else {
  532. c.getPA().addSkillXP((damage*Config.RANGE_EXP_RATE), 4);
  533. c.getPA().addSkillXP((damage*Config.RANGE_EXP_RATE/3), 3);
  534. c.getPA().refreshSkill(3);
  535. c.getPA().refreshSkill(4);
  536. }
  537. if (damage > 0) {
  538. if (Server.npcHandler.npcs[i].npcType >= 6142 && Server.npcHandler.npcs[i].npcType <= 6145) {
  539. c.pcDamage += damage;
  540. }
  541. }
  542. boolean dropArrows = true;
  543.  
  544. for(int noArrowId : c.NO_ARROW_DROP) {
  545. if(c.lastWeaponUsed == noArrowId) {
  546. dropArrows = false;
  547. break;
  548. }
  549. }
  550. if(dropArrows) {
  551. c.getItems().dropArrowNpc();
  552. }
  553. Server.npcHandler.npcs[i].underAttack = true;
  554. Server.npcHandler.npcs[i].hitDiff = damage;
  555. Server.npcHandler.npcs[i].HP -= damage;
  556. if (damage2 > -1) {
  557. Server.npcHandler.npcs[i].hitDiff2 = damage2;
  558. Server.npcHandler.npcs[i].HP -= damage2;
  559. c.totalDamageDealt += damage2;
  560. }
  561. if (c.killingNpcIndex != c.oldNpcIndex) {
  562. c.totalDamageDealt = 0;
  563. }
  564. c.killingNpcIndex = c.oldNpcIndex;
  565. c.totalDamageDealt += damage;
  566. Server.npcHandler.npcs[i].hitUpdateRequired = true;
  567. if (damage2 > -1)
  568. Server.npcHandler.npcs[i].hitUpdateRequired2 = true;
  569. Server.npcHandler.npcs[i].updateRequired = true;
  570.  
  571. } else if (c.projectileStage > 0) { // magic hit damage
  572. int damage = Misc.random(finalMagicDamage(c));
  573. if(godSpells()) {
  574. if(System.currentTimeMillis() - c.godSpellDelay < Config.GOD_SPELL_CHARGE) {
  575. damage += Misc.random(10);
  576. }
  577. }
  578. boolean magicFailed = false;
  579. //c.npcIndex = 0;
  580. int bonusAttack = getBonusAttack(i);
  581. if (Misc.random(Server.npcHandler.npcs[i].defence) > 10+ Misc.random(mageAtk()) + bonusAttack) {
  582. damage = 0;
  583. magicFailed = true;
  584. } else if (Server.npcHandler.npcs[i].npcType == 2881 || Server.npcHandler.npcs[i].npcType == 2882) {
  585. damage = 0;
  586. magicFailed = true;
  587. }
  588.  
  589. if (Server.npcHandler.npcs[i].HP - damage < 0) {
  590. damage = Server.npcHandler.npcs[i].HP;
  591. }
  592.  
  593. c.getPA().addSkillXP((c.MAGIC_SPELLS[c.oldSpellId][7] + damage*Config.MAGIC_EXP_RATE), 6);
  594. c.getPA().addSkillXP((c.MAGIC_SPELLS[c.oldSpellId][7] + damage*Config.MAGIC_EXP_RATE/3), 3);
  595. c.getPA().refreshSkill(3);
  596. c.getPA().refreshSkill(6);
  597. if (damage > 0) {
  598. if (Server.npcHandler.npcs[i].npcType >= 6142 && Server.npcHandler.npcs[i].npcType <= 6145) {
  599. c.pcDamage += damage;
  600. }
  601. }
  602. if(getEndGfxHeight() == 100 && !magicFailed){ // end GFX
  603. Server.npcHandler.npcs[i].gfx100(c.MAGIC_SPELLS[c.oldSpellId][5]);
  604. } else if (!magicFailed){
  605. Server.npcHandler.npcs[i].gfx0(c.MAGIC_SPELLS[c.oldSpellId][5]);
  606. }
  607.  
  608. if(magicFailed) {
  609. Server.npcHandler.npcs[i].gfx100(85);
  610. }
  611. if(!magicFailed) {
  612. int freezeDelay = getFreezeTime();//freeze
  613. if(freezeDelay > 0 && Server.npcHandler.npcs[i].freezeTimer == 0) {
  614. Server.npcHandler.npcs[i].freezeTimer = freezeDelay;
  615. }
  616. switch(c.MAGIC_SPELLS[c.oldSpellId][0]) {
  617. case 12901:
  618. case 12919: // blood spells
  619. case 12911:
  620. case 12929:
  621. int heal = Misc.random(damage / 2);
  622. if(c.playerLevel[3] + heal >= c.getPA().getLevelForXP(c.playerXP[3])) {
  623. c.playerLevel[3] = c.getPA().getLevelForXP(c.playerXP[3]);
  624. } else {
  625. c.playerLevel[3] += heal;
  626. }
  627. c.getPA().refreshSkill(3);
  628. break;
  629. }
  630.  
  631. }
  632. Server.npcHandler.npcs[i].underAttack = true;
  633. if(finalMagicDamage(c) != 0) {
  634. Server.npcHandler.npcs[i].hitDiff = damage;
  635. Server.npcHandler.npcs[i].HP -= damage;
  636. Server.npcHandler.npcs[i].hitUpdateRequired = true;
  637. c.totalDamageDealt += damage;
  638. }
  639. c.killingNpcIndex = c.oldNpcIndex;
  640. Server.npcHandler.npcs[i].updateRequired = true;
  641. c.usingMagic = false;
  642. c.castingMagic = false;
  643. c.oldSpellId = 0;
  644. }
  645. }
  646.  
  647. if(c.bowSpecShot <= 0) {
  648. c.oldNpcIndex = 0;
  649. c.projectileStage = 0;
  650. c.doubleHit = false;
  651. c.lastWeaponUsed = 0;
  652. c.bowSpecShot = 0;
  653. }
  654. if(c.bowSpecShot >= 2) {
  655. c.bowSpecShot = 0;
  656. //c.attackTimer = getAttackDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  657. }
  658. if(c.bowSpecShot == 1) {
  659. fireProjectileNpc();
  660. c.hitDelay = 2;
  661. c.bowSpecShot = 0;
  662. }
  663. }
  664.  
  665.  
  666. public void applyNpcMeleeDamage(int i, int damageMask, int damage) {
  667. c.previousDamage = damage;
  668. boolean fullVeracsEffect = c.getPA().fullVeracs() && Misc.random(3) == 1;
  669. if (Server.npcHandler.npcs[i].HP - damage < 0) {
  670. damage = Server.npcHandler.npcs[i].HP;
  671. }
  672.  
  673. if (!fullVeracsEffect && !c.usingClaws) {
  674. if (Misc.random(Server.npcHandler.npcs[i].defence) > 10 + Misc.random(calculateMeleeAttack())) {
  675. damage = 0;
  676. } else if (Server.npcHandler.npcs[i].npcType == 2882 || Server.npcHandler.npcs[i].npcType == 2883) {
  677. damage = 0;
  678. }
  679. }
  680. boolean guthansEffect = false;
  681. if (c.getPA().fullGuthans()) {
  682. if (Misc.random(3) == 1) {
  683. guthansEffect = true;
  684. }
  685. }
  686. if(c.fightMode == 3) {
  687. c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 0);
  688. c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 1);
  689. c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 2);
  690. c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 3);
  691. c.getPA().refreshSkill(0);
  692. c.getPA().refreshSkill(1);
  693. c.getPA().refreshSkill(2);
  694. c.getPA().refreshSkill(3);
  695. } else {
  696. c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE), c.fightMode);
  697. c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 3);
  698. c.getPA().refreshSkill(c.fightMode);
  699. c.getPA().refreshSkill(3);
  700. }
  701. if (damage > 0) {
  702. if (Server.npcHandler.npcs[i].npcType >= 6142 && Server.npcHandler.npcs[i].npcType <= 6145) {
  703. c.pcDamage += damage;
  704. }
  705. }
  706. if (damage > 0 && guthansEffect) {
  707. c.playerLevel[3] += damage;
  708. if (c.playerLevel[3] > c.getLevelForXP(c.playerXP[3]))
  709. c.playerLevel[3] = c.getLevelForXP(c.playerXP[3]);
  710. c.getPA().refreshSkill(3);
  711. Server.npcHandler.npcs[i].gfx0(398);
  712. }
  713. Server.npcHandler.npcs[i].underAttack = true;
  714. //Server.npcHandler.npcs[i].killerId = c.playerId;
  715. c.killingNpcIndex = c.npcIndex;
  716. c.lastNpcAttacked = i;
  717. switch (c.specEffect) {
  718. case 4:
  719. if (damage > 0) {
  720. if (c.playerLevel[3] + damage > c.getLevelForXP(c.playerXP[3]))
  721. if (c.playerLevel[3] > c.getLevelForXP(c.playerXP[3]));
  722. else
  723. c.playerLevel[3] = c.getLevelForXP(c.playerXP[3]);
  724. else
  725. c.playerLevel[3] += damage;
  726. c.getPA().refreshSkill(3);
  727. }
  728. break;
  729. case 5:
  730. c.clawDelay = 2;
  731. //c.clawDamage = Misc.random(calculateMeleeMaxHit());
  732. break;
  733.  
  734. case 7:
  735. c.dbowDelay = 6;
  736. break;
  737.  
  738. }
  739. switch(damageMask) {
  740. case 1:
  741. Server.npcHandler.npcs[i].hitDiff = damage;
  742. Server.npcHandler.npcs[i].HP -= damage;
  743. c.totalDamageDealt += damage;
  744. Server.npcHandler.npcs[i].hitUpdateRequired = true;
  745. Server.npcHandler.npcs[i].updateRequired = true;
  746. break;
  747.  
  748. case 2:
  749. Server.npcHandler.npcs[i].hitDiff2 = damage;
  750. Server.npcHandler.npcs[i].HP -= damage;
  751. c.totalDamageDealt += damage;
  752. Server.npcHandler.npcs[i].hitUpdateRequired2 = true;
  753. Server.npcHandler.npcs[i].updateRequired = true;
  754. c.doubleHit = false;
  755. break;
  756.  
  757. }
  758. }
  759.  
  760. public void fireProjectileNpc() {
  761. if(c.oldNpcIndex > 0) {
  762. if(Server.npcHandler.npcs[c.oldNpcIndex] != null) {
  763. c.projectileStage = 2;
  764. int pX = c.getX();
  765. int pY = c.getY();
  766. int nX = Server.npcHandler.npcs[c.oldNpcIndex].getX();
  767. int nY = Server.npcHandler.npcs[c.oldNpcIndex].getY();
  768. int offX = (pY - nY)* -1;
  769. int offY = (pX - nX)* -1;
  770. c.getPA().createPlayersProjectile(pX, pY, offX, offY, 50, getProjectileSpeed(), getRangeProjectileGFX(), 43, 31, c.oldNpcIndex + 1, getStartDelay());
  771. if (usingDbow())
  772. c.getPA().createPlayersProjectile2(pX, pY, offX, offY, 50, getProjectileSpeed(), getRangeProjectileGFX(), 60, 31, c.oldNpcIndex + 1, getStartDelay(), 35);
  773. }
  774. }
  775. }
  776.  
  777.  
  778.  
  779. /**
  780. * Attack Players, same as npc tbh xD
  781. **/
  782.  
  783. public void attackPlayer(int i) {
  784. if (c.playerEquipment[c.playerWeapon] == 15241) {
  785. c.gfx0(2138);
  786. }
  787. if(c.vestaDelay > 0) {
  788. resetPlayerAttack();
  789. return;
  790. }
  791. if(c.curseActive[19]) { // Turmoil
  792. c.getstr = PlayerHandler.players[i].playerLevel[2] * 32 / 100; /*(normally it would be 0 str, 15 def, 15 attk)*/
  793. c.getdef = PlayerHandler.players[i].playerLevel[1] * 29 / 100;
  794. c.getatt = PlayerHandler.players[i].playerLevel[0] * 29 / 100;
  795.  
  796. }
  797. if(c.curseActive[10]) { // Leech Attack
  798. c.getatt = PlayerHandler.players[i].playerLevel[0] * 10 / 100;
  799. }
  800. if(c.curseActive[13]) { // Leech Defense
  801. c.getdef = PlayerHandler.players[i].playerLevel[1] * 10 / 100;
  802. }
  803. if(c.curseActive[14]) { // Leech Strength
  804. c.getstr = PlayerHandler.players[i].playerLevel[2] * 10 / 100;
  805. }
  806. if(c.curseActive[11]) { // Leech Ranged
  807. c.getdef = PlayerHandler.players[i].playerLevel[4] * 10 / 100;
  808. }
  809. if(c.curseActive[12]) { // Leech Magic
  810. c.getdef = PlayerHandler.players[i].playerLevel[6] * 10 / 100;
  811. }
  812.  
  813.  
  814. for (int u : c.Bolts) {
  815. for (int y : c.BOWS) {
  816. if(y == c.playerEquipment[c.playerWeapon] && c.playerEquipment[c.playerWeapon] != 9185 && u == c.playerEquipment[c.playerArrows]){
  817. c.sendMessage("You can only use arrows with this bow.");
  818. return;
  819. }
  820. }
  821. }
  822. /* DEGRADING */
  823. if (c.playerEquipment[c.playerWeapon] >= 13858) {
  824. c.degradeTime++;
  825. }
  826. if(c.playerEquipment[c.playerWeapon] == 13899 && c.degradeTime == 450) {// VLS Degrade.
  827. c.getItems().wearItem(-1, 1, 3); // remove the equiped item
  828. c.sendMessage("Your vesta's longsword has degraded into nothing."); // send a message
  829. c.degradeTime = 0; // put the degrade number back to 0 so it can degrade again @ 500
  830. }
  831. if(c.playerEquipment[c.playerWeapon] == 13902 && c.degradeTime == 500) {// STAT Degrade.
  832. c.getItems().wearItem(-1, 1, 3); // remove the equiped item
  833. c.sendMessage("Your Statius warhammer has degraded into nothing."); // send a message
  834. c.degradeTime = 0; // put the degrade number back to 0 so it can degrade again @ 500
  835. }
  836. if(c.playerEquipment[c.playerWeapon] == 13905 && c.degradeTime == 450) {// Spear Degrade.
  837. c.getItems().wearItem(-1, 1, 3); // remove the equiped item
  838. c.sendMessage("Your vesta's spear has degraded into nothing."); // send a message
  839. c.degradeTime = 0; // put the degrade number back to 0 so it can degrade again @ 500
  840. }
  841.  
  842.  
  843. if(c.specEffect == 4) {
  844. c.specEffect = 0;
  845.  
  846. }
  847. /* DEGRADING */
  848. if (Server.playerHandler.players[i] != null) {
  849.  
  850. if (Server.playerHandler.players[i].isDead) {
  851. resetPlayerAttack();
  852. return;
  853. }
  854.  
  855. if(c.respawnTimer > 0 || Server.playerHandler.players[i].respawnTimer > 0) {
  856. resetPlayerAttack();
  857. return;
  858. }
  859.  
  860. if(!c.getCombat().checkReqs()) {
  861. return;
  862. }
  863. if(c.trade11 > 0) {
  864. c.sendMessage("You must wait 15 minutes before attacking anyone!");
  865. c.sendMessage("this is because you're a new player. (Stops transfering gold)");
  866. resetPlayerAttack();
  867. return;
  868. }
  869. if(Server.playerHandler.players[i].trade11 > 0) {
  870. c.sendMessage("You cannot attack a player that has just started the game!");
  871. c.sendMessage("this is to stop STG (Stop transfering gold)");
  872. resetPlayerAttack();
  873. return;
  874. }
  875.  
  876. if (c.getPA().getWearingAmount() < 3 && c.duelStatus < 1) {
  877. c.sendMessage("You must be wearing at least 3 items to attack someone.");
  878. resetPlayerAttack();
  879. return;
  880. }
  881.  
  882. boolean sameSpot = c.absX == Server.playerHandler.players[i].getX() && c.absY == Server.playerHandler.players[i].getY();
  883. if(!c.goodDistance(Server.playerHandler.players[i].getX(), Server.playerHandler.players[i].getY(), c.getX(), c.getY(), 25) && !sameSpot) {
  884. resetPlayerAttack();
  885. return;
  886. }
  887.  
  888. if(Server.playerHandler.players[i].respawnTimer > 0) {
  889. Server.playerHandler.players[i].playerIndex = 0;
  890. resetPlayerAttack();
  891. return;
  892. }
  893.  
  894. if (Server.playerHandler.players[i].heightLevel != c.heightLevel) {
  895. resetPlayerAttack();
  896. return;
  897. }
  898. //c.sendMessage("Made it here0.");
  899. /*c.followId = i;
  900. c.followId2 = 0;*/
  901. c.getPA().followPlayer(i);
  902. if(c.attackTimer <= 0) {
  903. c.usingBow = false;
  904. c.specEffect = 0;
  905. c.usingRangeWeapon = false;
  906. c.rangeItemUsed = 0;
  907. boolean usingBow = false;
  908. boolean usingArrows = false;
  909. boolean usingOtherRangeWeapons = false;
  910. boolean usingCross = c.playerEquipment[c.playerWeapon] == 9185;
  911. c.projectileStage = 0;
  912.  
  913. if (c.absX == Server.playerHandler.players[i].absX && c.absY == Server.playerHandler.players[i].absY) {
  914. if (c.freezeTimer > 0) {
  915. resetPlayerAttack();
  916. return;
  917. }
  918.  
  919. c.attackTimer = 0;
  920. return;
  921. }
  922.  
  923. if(!c.usingMagic) {
  924. for (int bowId : c.BOWS) {
  925. if(c.playerEquipment[c.playerWeapon] == bowId) {
  926. usingBow = true;
  927. for (int arrowId : c.ARROWS) {
  928. if(c.playerEquipment[c.playerArrows] == arrowId) {
  929. usingArrows = true;
  930. }
  931. }
  932. }
  933. }
  934.  
  935. for (int otherRangeId : c.OTHER_RANGE_WEAPONS) {
  936. if(c.playerEquipment[c.playerWeapon] == otherRangeId) {
  937. usingOtherRangeWeapons = true;
  938. }
  939. }
  940. }
  941. if (c.autocasting) {
  942. c.spellId = c.autocastId;
  943. c.usingMagic = true;
  944. }
  945. //c.sendMessage("Made it here2.");
  946. if(c.spellId > 0) {
  947. c.usingMagic = true;
  948. }
  949. c.attackTimer = getAttackDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  950.  
  951. if(c.duelRule[9]){
  952. boolean canUseWeapon = false;
  953. for(int funWeapon: Config.FUN_WEAPONS) {
  954. if(c.playerEquipment[c.playerWeapon] == funWeapon) {
  955. canUseWeapon = true;
  956. }
  957. }
  958. if(!canUseWeapon) {
  959. c.sendMessage("You can only use fun weapons in this duel!");
  960. resetPlayerAttack();
  961. return;
  962. }
  963. }
  964. //c.sendMessage("Made it here3.");
  965. if(c.duelRule[2] && (usingBow || usingOtherRangeWeapons)) {
  966. c.sendMessage("Range has been disabled in this duel!");
  967. return;
  968. }
  969. if(c.duelRule[3] && (!usingBow && !usingOtherRangeWeapons && !c.usingMagic)) {
  970. c.sendMessage("Melee has been disabled in this duel!");
  971. return;
  972. }
  973.  
  974. if(c.duelRule[4] && c.usingMagic) {
  975. c.sendMessage("Magic has been disabled in this duel!");
  976. resetPlayerAttack();
  977. return;
  978. }
  979.  
  980. if((!c.goodDistance(c.getX(), c.getY(), Server.playerHandler.players[i].getX(), Server.playerHandler.players[i].getY(), 4) && (usingOtherRangeWeapons && !usingBow && !c.usingMagic))
  981. || (!c.goodDistance(c.getX(), c.getY(), Server.playerHandler.players[i].getX(), Server.playerHandler.players[i].getY(), 2) && (!usingOtherRangeWeapons && usingHally() && !usingBow && !c.usingMagic))
  982. || (!c.goodDistance(c.getX(), c.getY(), Server.playerHandler.players[i].getX(), Server.playerHandler.players[i].getY(), getRequiredDistance()) && (!usingOtherRangeWeapons && !usingHally() && !usingBow && !c.usingMagic))
  983. || (!c.goodDistance(c.getX(), c.getY(), Server.playerHandler.players[i].getX(), Server.playerHandler.players[i].getY(), 10) && (usingBow || c.usingMagic))) {
  984. //c.sendMessage("Setting attack timer to 1");
  985. c.attackTimer = 1;
  986. if (!usingBow && !c.usingMagic && !usingOtherRangeWeapons && c.freezeTimer > 0)
  987. resetPlayerAttack();
  988. return;
  989. }
  990.  
  991. if(!usingCross && !usingArrows && usingBow && (c.playerEquipment[c.playerWeapon] < 4212 || c.playerEquipment[c.playerWeapon] > 4223) && !c.usingMagic) {
  992. c.sendMessage("You have run out of arrows!");
  993. c.stopMovement();
  994. resetPlayerAttack();
  995. return;
  996. }
  997. if(correctBowAndArrows() < c.playerEquipment[c.playerArrows] && Config.CORRECT_ARROWS && usingBow && !usingCrystalBow() && c.playerEquipment[c.playerWeapon] != 9185 && !c.usingMagic) {
  998. 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()+".");
  999. c.stopMovement();
  1000. resetPlayerAttack();
  1001. return;
  1002. }
  1003. if(!usingCross && !usingArrows && usingBow && (c.playerEquipment[c.playerWeapon] < 4212 || c.playerEquipment[c.playerWeapon] > 4223)) {
  1004. if(c.playerEquipment[c.playerWeapon] == 15241)
  1005. c.sendMessage("You have run out of shots");
  1006. else
  1007. c.sendMessage("You have run out of arrows!");
  1008. c.stopMovement();
  1009. c.npcIndex = 0;
  1010. return;
  1011. }
  1012. if (c.playerEquipment[c.playerWeapon] == 9185 && !properBolts() && !c.usingMagic) {
  1013. c.sendMessage("You must use bolts with a crossbow.");
  1014. c.stopMovement();
  1015. resetPlayerAttack();
  1016. return;
  1017. }
  1018.  
  1019. if(usingBow || c.usingMagic || usingOtherRangeWeapons || usingHally()) {
  1020. c.stopMovement();
  1021. }
  1022.  
  1023. if(!checkMagicReqs(c.spellId)) {
  1024. c.stopMovement();
  1025. resetPlayerAttack();
  1026. return;
  1027. }
  1028.  
  1029. c.faceUpdate(i+32768);
  1030.  
  1031. if(c.duelStatus != 5 && !c.inPits && c.inWild()) {
  1032. if(!c.attackedPlayers.contains(c.playerIndex) && !Server.playerHandler.players[c.playerIndex].attackedPlayers.contains(c.playerId)) {
  1033. c.attackedPlayers.add(c.playerIndex);
  1034. c.isSkulled = true;
  1035. c.skullTimer = Config.SKULL_TIMER;
  1036. c.headIconPk = 0;
  1037. c.getPA().requestUpdates();
  1038. }
  1039. }
  1040. c.specAccuracy = 1.0;
  1041. c.specDamage = 1.0;
  1042. c.delayedDamage = c.delayedDamage2 = 0;
  1043. if(c.usingSpecial && !c.usingMagic) {
  1044. if(c.duelRule[10] && c.duelStatus == 5) {
  1045. c.sendMessage("Special attacks have been disabled during this duel!");
  1046. c.usingSpecial = false;
  1047. c.getItems().updateSpecialBar();
  1048. resetPlayerAttack();
  1049. return;
  1050. }
  1051. if(checkSpecAmount(c.playerEquipment[c.playerWeapon])){
  1052. c.lastArrowUsed = c.playerEquipment[c.playerArrows];
  1053. activateSpecial(c.playerEquipment[c.playerWeapon], i);
  1054. //c.followId = c.playerIndex;
  1055. c.getPA().followPlayer(c.playerIndex);
  1056. return;
  1057. } else {
  1058. c.sendMessage("You don't have the required special energy to use this attack.");
  1059. c.usingSpecial = false;
  1060. c.getItems().updateSpecialBar();
  1061. c.playerIndex = 0;
  1062. return;
  1063. }
  1064. }
  1065.  
  1066. if(!c.usingMagic) {
  1067. c.startAnimation(getWepAnim(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase()));
  1068. c.mageFollow = false;
  1069. } else {
  1070. c.startAnimation(c.MAGIC_SPELLS[c.spellId][2]);
  1071. c.mageFollow = true;
  1072. c.followId = c.playerIndex;
  1073. }
  1074. Server.playerHandler.players[i].underAttackBy = c.playerId;
  1075. Server.playerHandler.players[i].logoutDelay = System.currentTimeMillis();
  1076. Server.playerHandler.players[i].singleCombatDelay = System.currentTimeMillis();
  1077. Server.playerHandler.players[i].killerId = c.playerId;
  1078. c.lastArrowUsed = 0;
  1079. c.rangeItemUsed = 0;
  1080. if(!usingBow && !c.usingMagic && !usingOtherRangeWeapons) { // melee hit delay
  1081. c.followId = Server.playerHandler.players[c.playerIndex].playerId;
  1082. c.getPA().followPlayer(c.playerIndex);
  1083. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  1084. c.delayedDamage = Misc.random(calculateMeleeMaxHit());
  1085. c.projectileStage = 0;
  1086. c.oldPlayerIndex = i;
  1087. }
  1088.  
  1089. if(usingBow && !usingOtherRangeWeapons && !c.usingMagic || usingCross) { // range hit delay
  1090. if(c.playerEquipment[c.playerWeapon] >= 4212 && c.playerEquipment[c.playerWeapon] <= 4223) {
  1091. c.rangeItemUsed = c.playerEquipment[c.playerWeapon];
  1092. c.crystalBowArrowCount++;
  1093. } else {
  1094. c.rangeItemUsed = c.playerEquipment[c.playerArrows];
  1095. c.getItems().deleteArrow();
  1096. }
  1097. if (c.fightMode == 2)
  1098. c.attackTimer--;
  1099. if (usingCross)
  1100. c.usingBow = true;
  1101. c.usingBow = true;
  1102. c.followId = Server.playerHandler.players[c.playerIndex].playerId;
  1103. c.getPA().followPlayer(c.playerIndex);
  1104. c.lastWeaponUsed = c.playerEquipment[c.playerWeapon];
  1105. c.lastArrowUsed = c.playerEquipment[c.playerArrows];
  1106. c.gfx100(getRangeStartGFX());
  1107. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  1108. c.projectileStage = 1;
  1109. c.oldPlayerIndex = i;
  1110. fireProjectilePlayer();
  1111. }
  1112.  
  1113. if(usingOtherRangeWeapons) { // knives, darts, etc hit delay
  1114. c.rangeItemUsed = c.playerEquipment[c.playerWeapon];
  1115. c.getItems().deleteEquipment();
  1116. c.usingRangeWeapon = true;
  1117. c.followId = Server.playerHandler.players[c.playerIndex].playerId;
  1118. c.getPA().followPlayer(c.playerIndex);
  1119. c.gfx100(getRangeStartGFX());
  1120. if (c.fightMode == 2)
  1121. c.attackTimer--;
  1122. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  1123. c.projectileStage = 1;
  1124. c.oldPlayerIndex = i;
  1125. fireProjectilePlayer();
  1126. }
  1127.  
  1128. if(c.usingMagic) { // magic hit delay
  1129. int pX = c.getX();
  1130. int pY = c.getY();
  1131. int nX = Server.playerHandler.players[i].getX();
  1132. int nY = Server.playerHandler.players[i].getY();
  1133. int offX = (pY - nY)* -1;
  1134. int offY = (pX - nX)* -1;
  1135. c.castingMagic = true;
  1136. c.projectileStage = 2;
  1137. if(c.MAGIC_SPELLS[c.spellId][3] > 0) {
  1138. if(getStartGfxHeight() == 100) {
  1139. c.gfx100(c.MAGIC_SPELLS[c.spellId][3]);
  1140. } else {
  1141. c.gfx0(c.MAGIC_SPELLS[c.spellId][3]);
  1142. }
  1143. }
  1144. if(c.MAGIC_SPELLS[c.spellId][4] > 0) {
  1145. c.getPA().createPlayersProjectile(pX, pY, offX, offY, 50, 78, c.MAGIC_SPELLS[c.spellId][4], getStartHeight(), getEndHeight(), -i - 1, getStartDelay());
  1146. }
  1147. if (c.autocastId > 0) {
  1148. c.followId = c.playerIndex;
  1149. c.followDistance = 5;
  1150. }
  1151. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  1152. c.oldPlayerIndex = i;
  1153. c.oldSpellId = c.spellId;
  1154. c.spellId = 0;
  1155. Client o = (Client)Server.playerHandler.players[i];
  1156. if(c.MAGIC_SPELLS[c.oldSpellId][0] == 12891 && o.isMoving) {
  1157. //c.sendMessage("Barrage projectile..");
  1158. c.getPA().createPlayersProjectile(pX, pY, offX, offY, 50, 85, 368, 25, 25, -i - 1, getStartDelay());
  1159. }
  1160. if(Misc.random(o.getCombat().mageDef()) > Misc.random(mageAtk())) {
  1161. c.magicFailed = true;
  1162. } else {
  1163. c.magicFailed = false;
  1164. }
  1165. int freezeDelay = getFreezeTime();//freeze time
  1166. if(freezeDelay > 0 && Server.playerHandler.players[i].freezeTimer <= -3 && !c.magicFailed) {
  1167. Server.playerHandler.players[i].freezeTimer = freezeDelay;
  1168. o.resetWalkingQueue();
  1169. o.sendMessage("You have been frozen.");
  1170. o.frozenBy = c.playerId;
  1171. }
  1172. if (!c.autocasting && c.spellId <= 0)
  1173. c.playerIndex = 0;
  1174. }
  1175. if(c.curseActive[10]) { //Leech Attack
  1176. int failed = Misc.random(5);
  1177. Client c2 = (Client)PlayerHandler.players[i];
  1178. if(failed < 5) {
  1179. c.Lattack = false;
  1180. return;
  1181. } else if(failed == 5) {
  1182. c2.playerLevel[0] -= Misc.random(8);
  1183. if (c2.playerLevel[0] < 1)
  1184. c2.playerLevel[0] = 1;
  1185. c2.getPA().refreshSkill(0);
  1186. }
  1187. if(c.oldPlayerIndex > 0) {
  1188. if(PlayerHandler.players[c.oldPlayerIndex] != null) {
  1189. final int pX = c.getX();
  1190. final int pY = c.getY();
  1191. final int nX = PlayerHandler.players[i].getX();
  1192. final int nY = PlayerHandler.players[i].getY();
  1193. final int offX = (pY - nY)* -1;
  1194. final int offY = (pX - nX)* -1;
  1195. c.getPA().createPlayersProjectile2(pX, pY, offX, offY, 50, 50, 2252, 9, 9, - c.oldPlayerIndex - 1, 24, 0);
  1196. c2.sendMessage("Your attack has been leeched by " +Misc.optimizeText(c.playerName)+"!");
  1197. c2.gfx0(2253);
  1198. c.startAnimation(12575);
  1199. c.Lattack = false;
  1200. }
  1201. }
  1202. }
  1203.  
  1204.  
  1205. if(c.curseActive[13]) { //Leech Defense
  1206. int failed = Misc.random(5);
  1207. Client c2 = (Client)PlayerHandler.players[i];
  1208. if(failed < 5) {
  1209. c.Ldefense = false;
  1210. return;
  1211. } else if(failed == 5) {
  1212. c2.playerLevel[1] -= Misc.random(8);
  1213. if (c2.playerLevel[1] < 1)
  1214. c2.playerLevel[1] = 1;
  1215. c2.getPA().refreshSkill(1);
  1216. }
  1217. if(c.oldPlayerIndex > 0) {
  1218. if(PlayerHandler.players[c.oldPlayerIndex] != null) {
  1219. final int pX = c.getX();
  1220. final int pY = c.getY();
  1221. final int nX = PlayerHandler.players[i].getX();
  1222. final int nY = PlayerHandler.players[i].getY();
  1223. final int offX = (pY - nY)* -1;
  1224. final int offY = (pX - nX)* -1;
  1225. c.getPA().createPlayersProjectile2(pX, pY, offX, offY, 50, 50, 2242, 9, 9, - c.oldPlayerIndex - 1, 24, 0);
  1226. c2.sendMessage("Your defense has been leeched by " +Misc.optimizeText(c.playerName)+"!");
  1227. c2.gfx0(2246);
  1228. c.startAnimation(12575);
  1229. c.Ldefense = false;
  1230. }
  1231. }
  1232. }
  1233.  
  1234.  
  1235. if(c.curseActive[14]) { //Leech Strength
  1236. int failed = Misc.random(5);
  1237. Client c2 = (Client)PlayerHandler.players[i];
  1238. if(failed < 5) {
  1239. c.Lstrength = false;
  1240. return;
  1241. } else if(failed == 5) {
  1242. c2.playerLevel[2] -= Misc.random(8);
  1243. if (c2.playerLevel[2] < 1)
  1244. c2.playerLevel[2] = 1;
  1245. c2.getPA().refreshSkill(2);
  1246. }
  1247. if(c.oldPlayerIndex > 0) {
  1248. if(PlayerHandler.players[c.oldPlayerIndex] != null) {
  1249. final int pX = c.getX();
  1250. final int pY = c.getY();
  1251. final int nX = PlayerHandler.players[i].getX();
  1252. final int nY = PlayerHandler.players[i].getY();
  1253. final int offX = (pY - nY)* -1;
  1254. final int offY = (pX - nX)* -1;
  1255. c.getPA().createPlayersProjectile2(pX, pY, offX, offY, 50, 50, 2248, 9, 9, - c.oldPlayerIndex - 1, 24, 0);
  1256. c2.sendMessage("Your strength has been leeched by " +Misc.optimizeText(c.playerName)+"!");
  1257. c2.gfx0(2250);
  1258. c.startAnimation(12575);
  1259. c.Lstrength = false;
  1260. }
  1261. }
  1262. }
  1263.  
  1264. if(c.curseActive[11]) { //Leech Ranged
  1265. int failed = Misc.random(5);
  1266. Client c2 = (Client)PlayerHandler.players[i];
  1267. if(failed < 5) {
  1268. c.Lranged = false;
  1269. return;
  1270. } else if(failed == 5) {
  1271. c2.playerLevel[4] -= Misc.random(8);
  1272. if (c2.playerLevel[4] < 1)
  1273. c2.playerLevel[4] = 1;
  1274. c2.getPA().refreshSkill(4);
  1275. }
  1276. if(c.oldPlayerIndex > 0) {
  1277. if(PlayerHandler.players[c.oldPlayerIndex] != null) {
  1278. final int pX = c.getX();
  1279. final int pY = c.getY();
  1280. final int nX = PlayerHandler.players[i].getX();
  1281. final int nY = PlayerHandler.players[i].getY();
  1282. final int offX = (pY - nY)* -1;
  1283. final int offY = (pX - nX)* -1;
  1284. c.getPA().createPlayersProjectile2(pX, pY, offX, offY, 50, 50, 2236, 9, 9, - c.oldPlayerIndex - 1, 24, 0);
  1285. c2.sendMessage("Your ranged has been leeched by " +Misc.optimizeText(c.playerName)+"!");
  1286. c2.gfx0(2238);
  1287. c.startAnimation(12575);
  1288. c.Lranged = false;
  1289. }
  1290. }
  1291. }
  1292.  
  1293. if(c.curseActive[12]) { //Leech Magic
  1294. int failed = Misc.random(5);
  1295. Client c2 = (Client)PlayerHandler.players[i];
  1296. if(failed < 5) {
  1297. c.Lmagic = false;
  1298. return;
  1299. } else if(failed == 5) {
  1300. c2.playerLevel[6] -= Misc.random(8);
  1301. if (c2.playerLevel[6] < 1)
  1302. c2.playerLevel[6] = 1;
  1303. c2.getPA().refreshSkill(6);
  1304. }
  1305. if(c.oldPlayerIndex > 0) {
  1306. if(PlayerHandler.players[c.oldPlayerIndex] != null) {
  1307. final int pX = c.getX();
  1308. final int pY = c.getY();
  1309. final int nX = PlayerHandler.players[i].getX();
  1310. final int nY = PlayerHandler.players[i].getY();
  1311. final int offX = (pY - nY)* -1;
  1312. final int offY = (pX - nX)* -1;
  1313. c.getPA().createPlayersProjectile2(pX, pY, offX, offY, 50, 50, 2240, 9, 9, - c.oldPlayerIndex - 1, 24, 0);
  1314. c2.sendMessage("Your Magic has been leeched by " +Misc.optimizeText(c.playerName)+"!");
  1315. c2.gfx0(2242);
  1316. c.startAnimation(12575);
  1317. c.Lmagic = false;
  1318. }
  1319. }
  1320. }
  1321.  
  1322. if(c.curseActive[16]) { //Leech Special
  1323. int failed = Misc.random(10);
  1324. Client c2 = (Client)PlayerHandler.players[i];
  1325. if(failed < 10) {
  1326. c.Lspecial = false;
  1327. return;
  1328. } else if(failed == 10) {
  1329. c2.specAmount -= 0.5;
  1330. //c2.specAmount -= Misc.random(8);
  1331. if (c2.specAmount < 1)
  1332. c2.specAmount = 1;
  1333. }
  1334. if(c.oldPlayerIndex > 0) {
  1335. if(PlayerHandler.players[c.oldPlayerIndex] != null) {
  1336. final int pX = c.getX();
  1337. final int pY = c.getY();
  1338. final int nX = PlayerHandler.players[i].getX();
  1339. final int nY = PlayerHandler.players[i].getY();
  1340. final int offX = (pY - nY)* -1;
  1341. final int offY = (pX - nX)* -1;
  1342. c.getPA().createPlayersProjectile2(pX, pY, offX, offY, 50, 50, 2256, 9, 9, - c.oldPlayerIndex - 1, 24, 0);
  1343. c2.sendMessage("Your special attack has been leeched by " +Misc.optimizeText(c.playerName)+"!");
  1344. c2.gfx0(2258);
  1345. c.startAnimation(12575);
  1346. c.getItems().updateSpecialBar();
  1347. c.Lspecial = false;
  1348. }
  1349. }
  1350. }
  1351.  
  1352. if(c.curseActive[18]) { // SoulSplit GFX's - CAUSES CRASH
  1353. if(c.oldPlayerIndex > 0) {
  1354. if(Server.playerHandler.players[c.oldPlayerIndex] != null) {
  1355. try {
  1356. final int pX = c.getX();
  1357. final int pY = c.getY();
  1358. final int nX = Server.playerHandler.players[i].getX();
  1359. final int nY = Server.playerHandler.players[i].getY();
  1360. final int offX = (pY - nY)* -1;
  1361. final int offY = (pX - nX)* -1;
  1362. c.SSPLIT = true;
  1363. c.getPA().createPlayersProjectile2(pX, pY, offX, offY, 50, 50, 2263, 9, 9, - c.oldPlayerIndex - 1, 24, 0);
  1364. EventManager.getSingleton().addEvent(new Event() {
  1365. public void execute(EventContainer b) {
  1366. Server.playerHandler.players[c.oldPlayerIndex].gfx0(2264); // 1738
  1367. c.SSPLIT = false;
  1368. b.stop();
  1369. }
  1370. }, 500);
  1371. /*EventManager.getSingleton().addEvent(new Event() { // CAUSES CRASH
  1372. public void execute(EventContainer b) {
  1373. //c.getPA().createPlayersProjectile2(nX, nY, offX, offY, 50, 50, 2263, 9, 9, - c.playerId - 1, 24, 0);
  1374. b.stop();
  1375. }
  1376. }, 800);*/
  1377. } catch (Exception e) {
  1378. e.printStackTrace();
  1379. }
  1380. }
  1381. }
  1382. }
  1383.  
  1384. if(usingBow && Config.CRYSTAL_BOW_DEGRADES) { // crystal bow degrading
  1385. if(c.playerEquipment[c.playerWeapon] == 4212) { // new crystal bow becomes full bow on the first shot
  1386. c.getItems().wearItem(4214, 1, 3);
  1387. }
  1388.  
  1389. if(c.playerEquipment[c.playerWeapon] == 13899) {
  1390. c.vlsLeft -= 1;
  1391. c.degradeVls();
  1392. }
  1393. if(c.playerEquipment[c.playerWeapon] == 13905) {
  1394. c.vSpearLeft -=1;
  1395. c.degradeVSpear();
  1396. }
  1397. if(c.playerEquipment[c.playerChest] == 13858) {
  1398. c.zTopLeft -=1;
  1399. c.degradeZTop();
  1400. }
  1401. if(c.playerEquipment[c.playerLegs] == 13861) {
  1402. c.zBottomLeft -=1;
  1403. c.degradeZBottom();
  1404. }
  1405. if(c.playerEquipment[c.playerWeapon] == 13902){
  1406. c.statLeft -= 1;
  1407. c.degradeStat();
  1408. }
  1409. if(c.playerEquipment[c.playerChest] == 13887) {
  1410. c.vTopLeft -=1;
  1411. c.degradeVTop();
  1412. }
  1413. if(c.playerEquipment[c.playerLegs] == 13893) {
  1414. c.vLegsLeft -=1;
  1415. c.degradeVLegs();
  1416. }
  1417. if(c.playerEquipment[c.playerWeapon] == 13867) {
  1418. c.zStaffLeft -=1;
  1419. c.degradeZStaff();
  1420. }
  1421. if(c.playerEquipment[c.playerHat] == 13864) {
  1422. c.zHoodLeft -=1;
  1423. c.degradeZHood();
  1424. }
  1425. if(c.playerEquipment[c.playerChest] == 13870) {
  1426. c.mBodyLeft -=1;
  1427. c.degradeMBody();
  1428. }
  1429. if(c.playerEquipment[c.playerLegs] == 13873) {
  1430. c.mChapsLeft -=1;
  1431. c.degradeMChaps();
  1432. }
  1433. if(c.playerEquipment[c.playerChest] == 13884) {
  1434. c.sTopLeft -=1;
  1435. c.degradeSTop();
  1436. }
  1437. if(c.playerEquipment[c.playerLegs] == 13890) {
  1438. c.sLegsLeft -=1;
  1439. c.degradeSLegs();
  1440. }
  1441. if(c.playerEquipment[c.playerHat] == 13896) {
  1442. c.sHelmLeft -=1;
  1443. c.degradeSHelm();
  1444. }
  1445.  
  1446. if(c.crystalBowArrowCount >= 250){
  1447. switch(c.playerEquipment[c.playerWeapon]) {
  1448.  
  1449. case 4223: // 1/10 bow
  1450. c.getItems().wearItem(-1, 1, 3);
  1451. c.sendMessage("Your crystal bow has fully degraded.");
  1452. if(!c.getItems().addItem(4207, 1)) {
  1453. Server.itemHandler.createGroundItem(c, 4207, c.getX(), c.getY(), 1, c.getId());
  1454. }
  1455. c.crystalBowArrowCount = 0;
  1456. break;
  1457.  
  1458. default:
  1459. c.getItems().wearItem(++c.playerEquipment[c.playerWeapon], 1, 3);
  1460. c.sendMessage("Your crystal bow degrades.");
  1461. c.crystalBowArrowCount = 0;
  1462. break;
  1463. }
  1464. }
  1465. }
  1466. }
  1467. }
  1468. }
  1469.  
  1470. public boolean usingCrystalBow() {
  1471. return c.playerEquipment[c.playerWeapon] >= 4212 && c.playerEquipment[c.playerWeapon] <= 4223;
  1472. }
  1473. public boolean kalphite1(int i) {
  1474. switch (Server.npcHandler.npcs[i].npcType) {
  1475. case 1158:
  1476. return true;
  1477. }
  1478. return false;
  1479. }
  1480.  
  1481. public boolean kalphite2(int i) {
  1482. switch (Server.npcHandler.npcs[i].npcType) {
  1483. case 1160:
  1484. return true;
  1485. }
  1486. return false;
  1487. }
  1488.  
  1489. public void appendVengeance(int otherPlayer, int damage) {
  1490. if (damage <= 0)
  1491. return;
  1492. Player o = Server.playerHandler.players[otherPlayer];
  1493. o.forcedText = "Taste Vengeance!";
  1494. o.forcedChatUpdateRequired = true;
  1495. o.updateRequired = true;
  1496. o.vengOn = false;
  1497. if ((o.playerLevel[3] - damage) > 0) {
  1498. damage = (int)(damage * 0.75);
  1499. if (damage > c.playerLevel[3]) {
  1500. damage = c.playerLevel[3];
  1501. }
  1502. c.setHitDiff2(damage);
  1503. c.setHitUpdateRequired2(true);
  1504. c.playerLevel[3] -= damage;
  1505. c.getPA().refreshSkill(3);
  1506. }
  1507. c.updateRequired = true;
  1508. }
  1509.  
  1510. public void appendVengeanceNPC(int otherPlayer, int damage) {
  1511. if (damage <= 0)
  1512. return;
  1513. if (c.npcIndex > 0 && Server.npcHandler.npcs[c.npcIndex] != null) {
  1514. c.forcedText = "Taste Vengeance!";
  1515. c.forcedChatUpdateRequired = true;
  1516. c.updateRequired = true;
  1517. c.vengOn = false;
  1518. if ((Server.npcHandler.npcs[c.npcIndex].HP - damage) > 0) {
  1519. damage = (int)(damage * 0.75);
  1520. if (damage > Server.npcHandler.npcs[c.npcIndex].HP) {
  1521. damage = Server.npcHandler.npcs[c.npcIndex].HP;
  1522. }
  1523. Server.npcHandler.npcs[c.npcIndex].HP -= damage;
  1524. Server.npcHandler.npcs[c.npcIndex].hitDiff2 = damage;
  1525. Server.npcHandler.npcs[c.npcIndex].hitUpdateRequired2 = true;
  1526. Server.npcHandler.npcs[c.npcIndex].updateRequired = true;
  1527. }
  1528. }
  1529. c.updateRequired = true;
  1530. }
  1531.  
  1532. public void playerDelayedHit(int i) {
  1533. if (Server.playerHandler.players[i] != null) {
  1534. if (Server.playerHandler.players[i].isDead || c.isDead || Server.playerHandler.players[i].playerLevel[3] <= 0 || c.playerLevel[3] <= 0) {
  1535. c.playerIndex = 0;
  1536. return;
  1537. }
  1538. if (Server.playerHandler.players[i].respawnTimer > 0) {
  1539. c.faceUpdate(0);
  1540. c.playerIndex = 0;
  1541. return;
  1542. }
  1543. Client o = (Client) Server.playerHandler.players[i];
  1544. o.getPA().removeAllWindows();
  1545. if (o.playerIndex <= 0 && o.npcIndex <= 0) {
  1546. if (o.autoRet == 1) {
  1547. o.playerIndex = c.playerId;
  1548. }
  1549. }
  1550. if(o.attackTimer <= 3 || o.attackTimer == 0 && o.playerIndex == 0 && !c.castingMagic) { // block animation
  1551. o.startAnimation(o.getCombat().getBlockEmote());
  1552. }
  1553. if(o.inTrade) {
  1554. o.getTradeAndDuel().declineTrade();
  1555. }
  1556. /* if(c.projectileStage == 0 && !c.usingMagic && !c.castingMagic) { // melee hit damage
  1557. applyPlayerMeleeDamage(i, 1, Misc.random(calculateMeleeMaxHit()));
  1558. if(c.doubleHit && !c.usingClaws) {
  1559. applyPlayerMeleeDamage(i, 2, Misc.random(calculateMeleeMaxHit()));
  1560. }
  1561. if(c.doubleHit && c.usingClaws) {
  1562. applyPlayerMeleeDamage(i, 2, c.previousDamage / 2);
  1563. }
  1564. }*/
  1565.  
  1566. if(c.projectileStage == 0 && !c.usingMagic && !c.castingMagic) { // melee hit damage
  1567. if (!c.usingClaws)
  1568. applyPlayerMeleeDamage(i, 1, Misc.random(calculateMeleeMaxHit()));
  1569. if(c.doubleHit && !c.usingClaws) {
  1570. applyPlayerMeleeDamage(i, 2, Misc.random(calculateMeleeMaxHit()));
  1571. }
  1572. if(c.doubleHit && c.usingClaws) {
  1573. //System.out.println(c.clawDamage + " " + c.clawDamage/2 + " " + c.clawDamage/4 + " " + c.clawDamage/4 + 1);
  1574. c.delayedDamage = c.clawDamage;
  1575. c.delayedDamage2 = c.clawDamage/2;
  1576. applyPlayerMeleeDamage(i, 1, c.clawDamage);
  1577. applyPlayerMeleeDamage(i, 2, c.clawDamage/2);
  1578. }
  1579. }
  1580.  
  1581. if(!c.castingMagic && c.projectileStage > 0) { // range hit damage
  1582. int damage = Misc.random(rangeMaxHit());
  1583. int damage2 = -1;
  1584. int PrayerDrain = damage / 4;
  1585. if (c.lastWeaponUsed == 11235 || c.bowSpecShot == 1)
  1586. damage2 = Misc.random(rangeMaxHit());
  1587. boolean ignoreDef = false;
  1588. if (Misc.random(4) == 1 && c.lastArrowUsed == 9243 && c.playerEquipment[c.playerWeapon] == 9185) {
  1589. ignoreDef = true;
  1590. o.gfx0(758);
  1591. }
  1592. if(Misc.random(10+o.getCombat().calculateRangeDefence()) > Misc.random(10+calculateRangeAttack()) && !ignoreDef) {
  1593. damage = 0;
  1594. }
  1595.  
  1596. if (c.lastWeaponUsed == 11235 || c.bowSpecShot == 1) {
  1597. if (Misc.random(10+o.getCombat().calculateRangeDefence()) > Misc.random(10+calculateRangeAttack()))
  1598. damage2 = 0;
  1599. }
  1600.  
  1601. if (c.dbowSpec) {
  1602. o.gfx100(1100);
  1603. if (damage < 8)
  1604. damage = 8;
  1605. if (damage2 < 8)
  1606. damage2 = 8;
  1607. c.dbowSpec = false;
  1608. }
  1609. if (damage > 0 && Misc.random(5) == 1 && c.lastArrowUsed == 9244 && c.playerEquipment[c.playerWeapon] == 9185) {
  1610. damage *= 1.45;
  1611. o.gfx0(756);
  1612. }
  1613. if(o.prayerActive[17] || o.curseActive[8] && System.currentTimeMillis() - o.protRangeDelay > 1500) { // if prayer active reduce damage by half
  1614. damage = (int)damage * 60 / 100;
  1615. if (o.playerEquipment[o.playerShield] == 15023 && o.playerLevel[5] >= 1 && damage >= 1) {
  1616. //if (Misc.random(2) == 1) {
  1617. damage = (int)damage * 42 / 100;
  1618. damage2 = (int)damage2 * 42 / 100;
  1619. o.playerLevel[5] -= PrayerDrain;
  1620. o.getPA().refreshSkill(5);
  1621.  
  1622. if (o.playerLevel[5] <= 0) {
  1623. o.playerLevel[5] = 0;
  1624. o.getCombat().resetPrayers();
  1625. o.getPA().refreshSkill(5);
  1626. //}
  1627. }
  1628. }
  1629.  
  1630. if (o.playerEquipment[o.playerShield] == 13742 && !o.prayerActive[17] || !o.curseActive[8] && damage >= 1) {
  1631. if(Misc.random(4) == 3) {
  1632. damage = (int)damage * 65 / 100;
  1633. damage2 = (int)damage2 * 65 / 100;
  1634. }
  1635. }
  1636.  
  1637. if (c.lastWeaponUsed == 11235 || c.bowSpecShot == 1)
  1638. damage2 = (int)damage2 * 60 / 100;
  1639. }
  1640. if (o.playerEquipment[o.playerWeapon] == 15486 && damage >= 1 && o.SolProtect >= 1) {
  1641. damage = (int)damage / 2;
  1642. damage2 = (int)damage2 / 2;
  1643. }
  1644.  
  1645. if (o.playerEquipment[o.playerShield] == 15023 && !o.prayerActive[17] || !o.curseActive[8] && o.playerLevel[5] >= 1 && damage >= 1) {
  1646. //if(Misc.random(2) == 1) {
  1647. damage = (int)damage * 70 / 100;
  1648. damage2 = (int)damage2 * 70 / 100;
  1649. o.playerLevel[5] -= PrayerDrain;
  1650. o.getPA().refreshSkill(5);
  1651.  
  1652. if (o.playerLevel[5] <= 0) {
  1653. o.playerLevel[5] = 0;
  1654. o.getCombat().resetPrayers();
  1655. o.getPA().refreshSkill(5);
  1656. //}
  1657. }
  1658. }
  1659. if (Server.playerHandler.players[i].playerLevel[3] - damage < 0) {
  1660. damage = Server.playerHandler.players[i].playerLevel[3];
  1661. }
  1662. if (Server.playerHandler.players[i].playerLevel[3] - damage - damage2 < 0) {
  1663. damage2 = Server.playerHandler.players[i].playerLevel[3] - damage;
  1664. }
  1665. if (damage < 0)
  1666. damage = 0;
  1667. if (damage2 < 0 && damage2 != -1)
  1668. damage2 = 0;
  1669. if (o.vengOn) {
  1670. appendVengeance(i, damage);
  1671. appendVengeance(i, damage2);
  1672. }
  1673. if (damage > 0)
  1674. //applyRecoil(damage, i);
  1675. Deflect(damage, i);
  1676. if (damage2 > 0)
  1677. //applyRecoil(damage2, i);
  1678. Deflect(damage2, i);
  1679. if(c.fightMode == 3) {
  1680. c.getPA().addSkillXP((damage*Config.RANGE_EXP_RATE/3), 4);
  1681. c.getPA().addSkillXP((damage*Config.RANGE_EXP_RATE/3), 1);
  1682. c.getPA().addSkillXP((damage*Config.RANGE_EXP_RATE/3), 3);
  1683. c.getPA().refreshSkill(1);
  1684. c.getPA().refreshSkill(3);
  1685. c.getPA().refreshSkill(4);
  1686. } else {
  1687. c.getPA().addSkillXP((damage*Config.RANGE_EXP_RATE), 4);
  1688. c.getPA().addSkillXP((damage*Config.RANGE_EXP_RATE/3), 3);
  1689. c.getPA().refreshSkill(3);
  1690. c.getPA().refreshSkill(4);
  1691. }
  1692. boolean dropArrows = true;
  1693.  
  1694. for(int noArrowId : c.NO_ARROW_DROP) {
  1695. if(c.lastWeaponUsed == noArrowId) {
  1696. dropArrows = false;
  1697. break;
  1698. }
  1699. }
  1700. if(dropArrows) {
  1701. c.getItems().dropArrowPlayer();
  1702. }
  1703. Server.playerHandler.players[i].underAttackBy = c.playerId;
  1704. Server.playerHandler.players[i].logoutDelay = System.currentTimeMillis();
  1705. Server.playerHandler.players[i].singleCombatDelay = System.currentTimeMillis();
  1706. Server.playerHandler.players[i].killerId = c.playerId;
  1707. //Server.playerHandler.players[i].setHitDiff(damage);
  1708. //Server.playerHandler.players[i].playerLevel[3] -= damage;
  1709. Server.playerHandler.players[i].dealDamage(damage);
  1710. Server.playerHandler.players[i].damageTaken[c.playerId] += damage;
  1711. c.killedBy = Server.playerHandler.players[i].playerId;
  1712. Server.playerHandler.players[i].handleHitMask(damage);
  1713. if (damage2 != -1) {
  1714. //Server.playerHandler.players[i].playerLevel[3] -= damage2;
  1715. Server.playerHandler.players[i].dealDamage(damage2);
  1716. Server.playerHandler.players[i].damageTaken[c.playerId] += damage2;
  1717. Server.playerHandler.players[i].handleHitMask(damage2);
  1718.  
  1719. }
  1720. o.getPA().refreshSkill(3);
  1721.  
  1722. //Server.playerHandler.players[i].setHitUpdateRequired(true);
  1723. Server.playerHandler.players[i].updateRequired = true;
  1724. applySmite(i, damage);
  1725. if (damage2 != -1)
  1726. applySmite(i, damage2);
  1727.  
  1728. } else if (c.projectileStage > 0) { // magic hit damage
  1729. int damage = Misc.random(finalMagicDamage(c));
  1730. if(godSpells()) {
  1731. if(System.currentTimeMillis() - c.godSpellDelay < Config.GOD_SPELL_CHARGE) {
  1732. damage += 10;
  1733. }
  1734. }
  1735. if(c.playerEquipment[c.playerWeapon] == 15486) {
  1736. damage += 5;
  1737. }
  1738. int PrayerDrain = damage / 4;
  1739. //c.playerIndex = 0;
  1740. if (c.magicFailed)
  1741. damage = 0;
  1742.  
  1743. if(o.prayerActive[16] || o.curseActive[7] && System.currentTimeMillis() - o.protMageDelay > 1500) { // if prayer active reduce damage by half
  1744. damage = (int)damage * 60 / 100;
  1745. if (o.playerEquipment[o.playerShield] == 15023 && o.playerLevel[5] >= 1 && damage >= 1) {
  1746. //if (Misc.random(2) == 1) {
  1747. damage = (int)damage * 42 / 100;
  1748. o.playerLevel[5] -= PrayerDrain;
  1749. o.getPA().refreshSkill(5);
  1750.  
  1751. if (o.playerLevel[5] <= 0) {
  1752. o.playerLevel[5] = 0;
  1753. o.getCombat().resetPrayers();
  1754. o.getPA().refreshSkill(5);
  1755. }
  1756. }
  1757. }
  1758. //}
  1759.  
  1760. if (o.playerEquipment[o.playerShield] == 13742 && !o.prayerActive[16] || !o.curseActive[7] && damage >= 1) {
  1761. if(Misc.random(4) == 3) {
  1762. damage = (int)damage * 65 / 100;
  1763. }
  1764. }
  1765.  
  1766. if (o.playerEquipment[o.playerWeapon] == 15486 && damage >= 1 && o.SolProtect >= 1) {
  1767. damage = (int)damage / 2;
  1768. }
  1769.  
  1770. if (o.playerEquipment[o.playerShield] == 15023 && !o.prayerActive[16] || !o.curseActive[7] && o.playerLevel[5] >= 1 && damage >= 1) {
  1771. //if(Misc.random(2) == 1) {
  1772. damage = (int)damage * 70 / 100;
  1773. o.getPA().refreshSkill(5);
  1774. o.playerLevel[5] -= PrayerDrain;
  1775.  
  1776. if (o.playerLevel[5] <= 0) {
  1777. o.playerLevel[5] = 0;
  1778. o.getCombat().resetPrayers();
  1779. o.getPA().refreshSkill(5);
  1780. //}
  1781. }
  1782. }
  1783. if (Server.playerHandler.players[i].playerLevel[3] - damage < 0) {
  1784. damage = Server.playerHandler.players[i].playerLevel[3];
  1785. }
  1786. if (o.vengOn)
  1787. appendVengeance(i, damage);
  1788. if (damage > 0)
  1789. //applyRecoil(damage, i);
  1790. Deflect(damage, i);
  1791. c.getPA().addSkillXP((c.MAGIC_SPELLS[c.oldSpellId][7] + damage*Config.MAGIC_EXP_RATE), 6);
  1792. c.getPA().addSkillXP((c.MAGIC_SPELLS[c.oldSpellId][7] + damage*Config.MAGIC_EXP_RATE/3), 3);
  1793. c.getPA().refreshSkill(3);
  1794. c.getPA().refreshSkill(6);
  1795.  
  1796. if(getEndGfxHeight() == 100 && !c.magicFailed){ // end GFX
  1797. Server.playerHandler.players[i].gfx100(c.MAGIC_SPELLS[c.oldSpellId][5]);
  1798. } else if (!c.magicFailed){
  1799. Server.playerHandler.players[i].gfx0(c.MAGIC_SPELLS[c.oldSpellId][5]);
  1800. } else if(c.magicFailed) {
  1801. Server.playerHandler.players[i].gfx100(85);
  1802. }
  1803.  
  1804. if(!c.magicFailed) {
  1805. if(System.currentTimeMillis() - Server.playerHandler.players[i].reduceStat > 35000) {
  1806. Server.playerHandler.players[i].reduceStat = System.currentTimeMillis();
  1807. switch(c.MAGIC_SPELLS[c.oldSpellId][0]) {
  1808. case 12987:
  1809. case 13011:
  1810. case 12999:
  1811. case 13023:
  1812. Server.playerHandler.players[i].playerLevel[0] -= ((o.getPA().getLevelForXP(Server.playerHandler.players[i].playerXP[0]) * 10) / 100);
  1813. break;
  1814. }
  1815. }
  1816.  
  1817. switch(c.MAGIC_SPELLS[c.oldSpellId][0]) {
  1818. case 12445: //teleblock
  1819. if (System.currentTimeMillis() - o.teleBlockDelay > o.teleBlockLength) {
  1820. o.teleBlockDelay = System.currentTimeMillis();
  1821. o.sendMessage("You have been teleblocked.");
  1822. if (o.prayerActive[16] || o.curseActive[7] && System.currentTimeMillis() - o.protMageDelay > 1500)
  1823. o.teleBlockLength = 150000;
  1824. else
  1825. o.teleBlockLength = 300000;
  1826. }
  1827. break;
  1828.  
  1829. case 12901:
  1830. case 12919: // blood spells
  1831. case 12911:
  1832. case 12929:
  1833. int heal = (int)(damage / 4);
  1834. if(c.playerLevel[3] + heal > c.getPA().getLevelForXP(c.playerXP[3])) {
  1835. c.playerLevel[3] = c.getPA().getLevelForXP(c.playerXP[3]);
  1836. } else {
  1837. c.playerLevel[3] += heal;
  1838. }
  1839. c.getPA().refreshSkill(3);
  1840. break;
  1841.  
  1842. case 1153:
  1843. Server.playerHandler.players[i].playerLevel[0] -= ((o.getPA().getLevelForXP(Server.playerHandler.players[i].playerXP[0]) * 5) / 100);
  1844. o.sendMessage("Your attack level has been reduced!");
  1845. Server.playerHandler.players[i].reduceSpellDelay[c.reduceSpellId] = System.currentTimeMillis();
  1846. o.getPA().refreshSkill(0);
  1847. break;
  1848.  
  1849. case 1157:
  1850. Server.playerHandler.players[i].playerLevel[2] -= ((o.getPA().getLevelForXP(Server.playerHandler.players[i].playerXP[2]) * 5) / 100);
  1851. o.sendMessage("Your strength level has been reduced!");
  1852. Server.playerHandler.players[i].reduceSpellDelay[c.reduceSpellId] = System.currentTimeMillis();
  1853. o.getPA().refreshSkill(2);
  1854. break;
  1855.  
  1856. case 1161:
  1857. Server.playerHandler.players[i].playerLevel[1] -= ((o.getPA().getLevelForXP(Server.playerHandler.players[i].playerXP[1]) * 5) / 100);
  1858. o.sendMessage("Your defence level has been reduced!");
  1859. Server.playerHandler.players[i].reduceSpellDelay[c.reduceSpellId] = System.currentTimeMillis();
  1860. o.getPA().refreshSkill(1);
  1861. break;
  1862.  
  1863. case 1542:
  1864. Server.playerHandler.players[i].playerLevel[1] -= ((o.getPA().getLevelForXP(Server.playerHandler.players[i].playerXP[1]) * 10) / 100);
  1865. o.sendMessage("Your defence level has been reduced!");
  1866. Server.playerHandler.players[i].reduceSpellDelay[c.reduceSpellId] = System.currentTimeMillis();
  1867. o.getPA().refreshSkill(1);
  1868. break;
  1869.  
  1870. case 1543:
  1871. Server.playerHandler.players[i].playerLevel[2] -= ((o.getPA().getLevelForXP(Server.playerHandler.players[i].playerXP[2]) * 10) / 100);
  1872. o.sendMessage("Your strength level has been reduced!");
  1873. Server.playerHandler.players[i].reduceSpellDelay[c.reduceSpellId] = System.currentTimeMillis();
  1874. o.getPA().refreshSkill(2);
  1875. break;
  1876.  
  1877. case 1562:
  1878. Server.playerHandler.players[i].playerLevel[0] -= ((o.getPA().getLevelForXP(Server.playerHandler.players[i].playerXP[0]) * 10) / 100);
  1879. o.sendMessage("Your attack level has been reduced!");
  1880. Server.playerHandler.players[i].reduceSpellDelay[c.reduceSpellId] = System.currentTimeMillis();
  1881. o.getPA().refreshSkill(0);
  1882. break;
  1883. }
  1884. }
  1885.  
  1886. Server.playerHandler.players[i].logoutDelay = System.currentTimeMillis();
  1887. Server.playerHandler.players[i].underAttackBy = c.playerId;
  1888. Server.playerHandler.players[i].killerId = c.playerId;
  1889. Server.playerHandler.players[i].singleCombatDelay = System.currentTimeMillis();
  1890. if(finalMagicDamage(c) != 0) {
  1891. //Server.playerHandler.players[i].playerLevel[3] -= damage;
  1892. Server.playerHandler.players[i].dealDamage(damage);
  1893. Server.playerHandler.players[i].damageTaken[c.playerId] += damage;
  1894. c.totalPlayerDamageDealt += damage;
  1895. if (!c.magicFailed) {
  1896. //Server.playerHandler.players[i].setHitDiff(damage);
  1897. //Server.playerHandler.players[i].setHitUpdateRequired(true);
  1898. Server.playerHandler.players[i].handleHitMask(damage);
  1899. }
  1900. }
  1901. applySmite(i, damage);
  1902. c.killedBy = Server.playerHandler.players[i].playerId;
  1903. o.getPA().refreshSkill(3);
  1904. Server.playerHandler.players[i].updateRequired = true;
  1905. c.usingMagic = false;
  1906. c.castingMagic = false;
  1907. if (o.inMulti() && multis()) {
  1908. c.barrageCount = 0;
  1909. for (int j = 0; j < Server.playerHandler.players.length; j++) {
  1910. if (Server.playerHandler.players[j] != null) {
  1911. if (j == o.playerId)
  1912. continue;
  1913. if (c.barrageCount >= 9)
  1914. break;
  1915. if (o.goodDistance(o.getX(), o.getY(), Server.playerHandler.players[j].getX(), Server.playerHandler.players[j].getY(), 1))
  1916. appendMultiBarrage(j, c.magicFailed);
  1917. }
  1918. }
  1919. }
  1920. c.getPA().refreshSkill(3);
  1921. c.getPA().refreshSkill(6);
  1922. c.oldSpellId = 0;
  1923. }
  1924. }
  1925. c.getPA().requestUpdates();
  1926. int oldindex = c.oldPlayerIndex;
  1927. if(c.bowSpecShot <= 0) {
  1928. c.oldPlayerIndex = 0;
  1929. c.projectileStage = 0;
  1930. c.lastWeaponUsed = 0;
  1931. c.doubleHit = false;
  1932. c.bowSpecShot = 0;
  1933. }
  1934. if(c.bowSpecShot != 0) {
  1935. c.bowSpecShot = 0;
  1936. }
  1937. }
  1938.  
  1939. public int getWeaponDistance(String weaponName) {
  1940. if(c.usingMagic) {
  1941. return 10;
  1942. }
  1943.  
  1944. if(weaponName.contains("knife")){
  1945. if(c.fightMode == 3) {
  1946. return 6;
  1947. } else {
  1948. return 4;
  1949. }
  1950. }
  1951. if(weaponName.contains("dart")) {
  1952. if(c.fightMode == 3) {
  1953. return 5;
  1954. } else {
  1955. return 3;
  1956. }
  1957. }
  1958. if(weaponName.contains("thrownaxe") || c.playerEquipment[c.playerWeapon] == 13883){
  1959. if(c.fightMode == 3) {
  1960. return 6;
  1961. } else {
  1962. return 4;
  1963. }
  1964. }
  1965. if(weaponName.contains("javelin") || c.playerEquipment[c.playerWeapon] == 13879){
  1966. if(c.fightMode == 3) {
  1967. return 7;
  1968. } else {
  1969. return 5;
  1970. }
  1971. }
  1972.  
  1973. if(weaponName.contains("shortbow")){
  1974. if(c.fightMode == 3) {
  1975. return 9;
  1976. } else {
  1977. return 7;
  1978. }
  1979. }
  1980.  
  1981. if(weaponName.contains("crossbow")){
  1982. if(c.fightMode == 3) {
  1983. return 9;
  1984. } else {
  1985. return 7;
  1986. }
  1987. }
  1988.  
  1989. if(weaponName.contains("composite bow")){
  1990. if(c.fightMode == 3) {
  1991. return 11;
  1992. } else {
  1993. return 10;
  1994. }
  1995. }
  1996.  
  1997. if(weaponName.contains("dark bow")){
  1998. if(c.fightMode == 3) {
  1999. return 13;
  2000. } else {
  2001. return 12;
  2002. }
  2003. }
  2004.  
  2005. if(weaponName.contains("longbow") ||weaponName.contains("crystal")) {
  2006. return 10;
  2007. }
  2008.  
  2009. if(weaponName.contains("halberd")) {
  2010. return 2;
  2011. }
  2012.  
  2013. switch(c.playerEquipment[c.playerWeapon]) {
  2014. case 6522:
  2015. if(c.fightMode == 3) {
  2016. return 6;
  2017. } else {
  2018. return 5;
  2019. }
  2020. }
  2021. return 1;
  2022. }
  2023.  
  2024. public boolean multis() {
  2025. switch (c.MAGIC_SPELLS[c.oldSpellId][0]) {
  2026. case 12891:
  2027. case 12881:
  2028. case 13011:
  2029. case 13023:
  2030. case 12919: // blood spells
  2031. case 12929:
  2032. case 12963:
  2033. case 12975:
  2034. return true;
  2035. }
  2036. return false;
  2037.  
  2038. }
  2039. public void appendMultiBarrage(int playerId, boolean splashed) {
  2040. if (Server.playerHandler.players[playerId] != null) {
  2041. Client c2 = (Client)Server.playerHandler.players[playerId];
  2042. if (c2.isDead || c2.respawnTimer > 0)
  2043. return;
  2044. if (checkMultiBarrageReqs(playerId)) {
  2045. c.barrageCount++;
  2046. if (Misc.random(mageAtk()) > Misc.random(mageDef()) && !c.magicFailed) {
  2047. if(getEndGfxHeight() == 100){ // end GFX
  2048. c2.gfx100(c.MAGIC_SPELLS[c.oldSpellId][5]);
  2049. } else {
  2050. c2.gfx0(c.MAGIC_SPELLS[c.oldSpellId][5]);
  2051. }
  2052. int damage = Misc.random(finalMagicDamage(c));
  2053. if (c2.prayerActive[12] || c2.curseActive[7]) {
  2054. damage *= (int)(.60);
  2055. }
  2056. if (c2.playerLevel[3] - damage < 0) {
  2057. damage = c2.playerLevel[3];
  2058. }
  2059. c.getPA().addSkillXP((c.MAGIC_SPELLS[c.oldSpellId][7] + damage*Config.MAGIC_EXP_RATE), 6);
  2060. c.getPA().addSkillXP((c.MAGIC_SPELLS[c.oldSpellId][7] + damage*Config.MAGIC_EXP_RATE/3), 3);
  2061.  
  2062. //Server.playerHandler.players[playerId].setHitDiff(damage);
  2063. //Server.playerHandler.players[playerId].setHitUpdateRequired(true);
  2064. Server.playerHandler.players[playerId].handleHitMask(damage);
  2065. //Server.playerHandler.players[playerId].playerLevel[3] -= damage;
  2066. Server.playerHandler.players[playerId].dealDamage(damage);
  2067. Server.playerHandler.players[playerId].damageTaken[c.playerId] += damage;
  2068. c2.getPA().refreshSkill(3);
  2069. c.totalPlayerDamageDealt += damage;
  2070. multiSpellEffect(playerId, damage);
  2071. } else {
  2072. c2.gfx100(85);
  2073. }
  2074. }
  2075. }
  2076. }
  2077.  
  2078. public void multiSpellEffect(int playerId, int damage) {
  2079. switch(c.MAGIC_SPELLS[c.oldSpellId][0]) {
  2080. case 13011:
  2081. case 13023:
  2082. if(System.currentTimeMillis() - Server.playerHandler.players[playerId].reduceStat > 35000) {
  2083. Server.playerHandler.players[playerId].reduceStat = System.currentTimeMillis();
  2084. Server.playerHandler.players[playerId].playerLevel[0] -= ((Server.playerHandler.players[playerId].getLevelForXP(Server.playerHandler.players[playerId].playerXP[0]) * 10) / 100);
  2085. }
  2086. break;
  2087. case 12919: // blood spells
  2088. case 12929:
  2089. int heal = (int)(damage / 4);
  2090. if(c.playerLevel[3] + heal >= c.getPA().getLevelForXP(c.playerXP[3])) {
  2091. c.playerLevel[3] = c.getPA().getLevelForXP(c.playerXP[3]);
  2092. } else {
  2093. c.playerLevel[3] += heal;
  2094. }
  2095. c.getPA().refreshSkill(3);
  2096. break;
  2097. case 12891:
  2098. case 12881:
  2099. if (Server.playerHandler.players[playerId].freezeTimer < -4) {
  2100. Server.playerHandler.players[playerId].freezeTimer = getFreezeTime();
  2101. Server.playerHandler.players[playerId].stopMovement();
  2102. }
  2103. break;
  2104. }
  2105. }
  2106.  
  2107. public void applyPlayerClawDamage(int i, int damageMask, int damage){
  2108. int PrayerDrain = damage / 4;
  2109. Client o = (Client) Server.playerHandler.players[i];
  2110. if(o == null) {
  2111. return;
  2112. }
  2113.  
  2114. c.previousDamage = damage;
  2115. boolean veracsEffect = false;
  2116. boolean guthansEffect = false;
  2117. if (c.getPA().fullVeracs()) {
  2118. if (Misc.random(4) == 1) {
  2119. veracsEffect = true;
  2120. }
  2121. }
  2122. if (c.getPA().fullGuthans()) {
  2123. if (Misc.random(4) == 1) {
  2124. guthansEffect = true;
  2125. }
  2126. }
  2127. if (damageMask == 1) {
  2128. damage = c.delayedDamage;
  2129. c.delayedDamage = 0;
  2130. } else {
  2131. damage = c.delayedDamage2;
  2132. c.delayedDamage2 = 0;
  2133. }
  2134. if(Misc.random(o.getCombat().calculateMeleeDefence()) > Misc.random(calculateMeleeAttack()) && !veracsEffect) {
  2135. damage = 0;
  2136. c.bonusAttack = 0;
  2137. } else if (c.playerEquipment[c.playerWeapon] == 5698 && o.poisonDamage <= 0 && Misc.random(3) == 1) {
  2138. o.getPA().appendPoison(13);
  2139. c.bonusAttack += damage/3;
  2140. } else {
  2141. c.bonusAttack += damage/3;
  2142. }
  2143. if(o.prayerActive[18] || o.curseActive[9] && System.currentTimeMillis() - o.protMeleeDelay > 1500 && !veracsEffect) { // if prayer active reduce damage by 40%
  2144. damage = (int)damage * 60 / 100;
  2145. if (o.playerEquipment[o.playerShield] == 13740 && o.playerLevel[5] >= 1 && damage >= 1) {
  2146. //if (Misc.random(2) == 1) {
  2147. damage = (int)damage * 42 / 100;
  2148. //o.playerLevel[5] -= PrayerDrain;
  2149. o.getPA().refreshSkill(5);
  2150.  
  2151. if (o.playerLevel[5] <= 0) {
  2152. o.playerLevel[5] = 0;
  2153. o.getCombat().resetPrayers();
  2154. o.getPA().refreshSkill(5);
  2155. //}
  2156. }
  2157. }
  2158. }
  2159.  
  2160. if (o.playerEquipment[o.playerWeapon] == 15486 && damage >= 1 && o.SolProtect >= 1) {
  2161. damage = (int)damage / 2;
  2162. }
  2163.  
  2164. if (o.playerEquipment[o.playerShield] == 13742 && !o.prayerActive[18] || !o.curseActive[9] && damage >= 1) {
  2165. if(Misc.random(4) == 3) {
  2166. damage = (int)damage * 65 / 100;
  2167. }
  2168. }
  2169.  
  2170. if (o.playerEquipment[o.playerShield] == 13740 && !o.prayerActive[18] || !o.curseActive[9] && o.playerLevel[5] >= 1 && damage >= 1) {
  2171. //if(Misc.random(2) == 1) {
  2172. damage = (int)damage * 70 / 100;
  2173. o.getPA().refreshSkill(5);
  2174. //o.playerLevel[5] -= PrayerDrain;
  2175.  
  2176. if (o.playerLevel[5] <= 0) {
  2177. o.playerLevel[5] = 0;
  2178. o.getCombat().resetPrayers();
  2179. o.getPA().refreshSkill(5);
  2180. }
  2181. //}
  2182. }
  2183. if (c.maxNextHit) {
  2184. damage = calculateMeleeMaxHit();
  2185. }
  2186. if (damage > 0 && guthansEffect) {
  2187. c.playerLevel[3] += damage;
  2188. if (c.playerLevel[3] > c.getLevelForXP(c.playerXP[3]))
  2189. c.playerLevel[3] = c.getLevelForXP(c.playerXP[3]);
  2190. c.getPA().refreshSkill(3);
  2191. o.gfx0(398);
  2192. }
  2193. if (c.ssSpec && damageMask == 2) {
  2194. damage = 5 + Misc.random(11);
  2195. c.ssSpec = false;
  2196. }
  2197. if (Server.playerHandler.players[i].playerLevel[3] - damage < 0) {
  2198. damage = Server.playerHandler.players[i].playerLevel[3];
  2199. }
  2200. if (o.vengOn && damage > 0)
  2201. appendVengeance(i, damage);
  2202. if (damage > 0)
  2203. //applyRecoil(damage, i);
  2204. Deflect(damage, i);
  2205. switch(c.specEffect) {
  2206. case 1: // dragon scimmy special
  2207. if(damage > 0) {
  2208. if(o.prayerActive[16] || o.prayerActive[17] || o.prayerActive[18] || o.curseActive[7] || o.curseActive[8] || o.curseActive[9]) {
  2209. o.headIcon = -1;
  2210. o.getPA().sendFrame36(c.PRAYER_GLOW[16], 0);
  2211. o.getPA().sendFrame36(c.PRAYER_GLOW[17], 0);
  2212. o.getPA().sendFrame36(c.PRAYER_GLOW[18], 0);
  2213. o.getPA().sendFrame36(c.CURSE_GLOW[7], 0);
  2214. o.getPA().sendFrame36(c.CURSE_GLOW[8], 0);
  2215. o.getPA().sendFrame36(c.CURSE_GLOW[9], 0);
  2216. }
  2217. o.sendMessage("You have been injured!");
  2218. o.stopPrayerDelay = System.currentTimeMillis();
  2219. o.prayerActive[16] = false;
  2220. o.prayerActive[17] = false;
  2221. o.prayerActive[18] = false;
  2222. o.curseActive[7] = false;
  2223. o.curseActive[8] = false;
  2224. o.curseActive[9] = false;
  2225. o.getPA().requestUpdates();
  2226. }
  2227. break;
  2228. case 2:
  2229. if (Misc.random(2) == 1) {
  2230. if (damage > 0) {
  2231. if (o.freezeTimer <= 0)
  2232. o.freezeTimer = 30;
  2233. o.gfx0(369);
  2234. o.sendMessage("You have been frozen.");
  2235. o.frozenBy = c.playerId;
  2236. o.stopMovement();
  2237. c.sendMessage("You freeze your enemy.");
  2238. } else if (Misc.random(2) == 2) {
  2239. c.gfx100(1667);
  2240. }
  2241. }
  2242. break;
  2243. case 3:
  2244. if (damage > 0) {
  2245. o.playerLevel[1] -= damage;
  2246. o.sendMessage("You feel weak.");
  2247. if (o.playerLevel[1] < 1)
  2248. o.playerLevel[1] = 1;
  2249. o.getPA().refreshSkill(1);
  2250. }
  2251. break;
  2252. case 4:
  2253. if (damage > 0) {
  2254. if (c.playerLevel[3] + damage > c.getLevelForXP(c.playerXP[3]))
  2255. if (c.playerLevel[3] > c.getLevelForXP(c.playerXP[3]));
  2256. else
  2257. c.playerLevel[3] = c.getLevelForXP(c.playerXP[3]);
  2258. else
  2259. c.playerLevel[3] += damage;
  2260. c.getPA().refreshSkill(3);
  2261. }
  2262. break;
  2263. case 5:
  2264. c.clawDelay = 2;
  2265. break;
  2266. case 6:
  2267. o.vestaDelay = 12;
  2268. break;
  2269.  
  2270. }
  2271. c.specEffect = 0;
  2272. if(c.fightMode == 3) {
  2273. c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 0);
  2274. c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 1);
  2275. c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 2);
  2276. c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 3);
  2277. c.getPA().refreshSkill(0);
  2278. c.getPA().refreshSkill(1);
  2279. c.getPA().refreshSkill(2);
  2280. c.getPA().refreshSkill(3);
  2281. } else {
  2282. c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE), c.fightMode);
  2283. c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 3);
  2284. c.getPA().refreshSkill(c.fightMode);
  2285. c.getPA().refreshSkill(3);
  2286. }
  2287. Server.playerHandler.players[i].logoutDelay = System.currentTimeMillis();
  2288. Server.playerHandler.players[i].underAttackBy = c.playerId;
  2289. Server.playerHandler.players[i].killerId = c.playerId;
  2290. Server.playerHandler.players[i].singleCombatDelay = System.currentTimeMillis();
  2291. if (c.killedBy != Server.playerHandler.players[i].playerId)
  2292. c.totalPlayerDamageDealt = 0;
  2293. c.killedBy = Server.playerHandler.players[i].playerId;
  2294. applySmite(i, damage);
  2295. switch(damageMask) {
  2296. case 1:
  2297. /*if (!Server.playerHandler.players[i].getHitUpdateRequired()){
  2298. Server.playerHandler.players[i].setHitDiff(damage);
  2299. Server.playerHandler.players[i].setHitUpdateRequired(true);
  2300. } else {
  2301. Server.playerHandler.players[i].setHitDiff2(damage);
  2302. Server.playerHandler.players[i].setHitUpdateRequired2(true);
  2303. }*/
  2304. //Server.playerHandler.players[i].playerLevel[3] -= damage;
  2305. Server.playerHandler.players[i].dealDamage(damage);
  2306. Server.playerHandler.players[i].damageTaken[c.playerId] += damage;
  2307. c.totalPlayerDamageDealt += damage;
  2308. Server.playerHandler.players[i].updateRequired = true;
  2309. o.getPA().refreshSkill(3);
  2310. break;
  2311.  
  2312. case 2:
  2313. /*if (!Server.playerHandler.players[i].getHitUpdateRequired2()){
  2314. Server.playerHandler.players[i].setHitDiff2(damage);
  2315. Server.playerHandler.players[i].setHitUpdateRequired2(true);
  2316. } else {
  2317. Server.playerHandler.players[i].setHitDiff(damage);
  2318. Server.playerHandler.players[i].setHitUpdateRequired(true);
  2319. }*/
  2320. //Server.playerHandler.players[i].playerLevel[3] -= damage;
  2321. Server.playerHandler.players[i].dealDamage(damage);
  2322. Server.playerHandler.players[i].damageTaken[c.playerId] += damage;
  2323. c.totalPlayerDamageDealt += damage;
  2324. Server.playerHandler.players[i].updateRequired = true;
  2325. c.doubleHit = false;
  2326. o.getPA().refreshSkill(3);
  2327. break;
  2328. }
  2329. Server.playerHandler.players[i].handleHitMask(damage);
  2330. }
  2331.  
  2332.  
  2333. public void applyPlayerMeleeDamage(int i, int damageMask, int damage){
  2334. Client o = (Client) Server.playerHandler.players[i];
  2335. if(o == null) {
  2336. return;
  2337. }
  2338. damage = 0;
  2339. boolean veracsEffect = false;
  2340. boolean guthansEffect = false;
  2341. if (c.getPA().fullVeracs()) {
  2342. if (Misc.random(4) == 1) {
  2343. veracsEffect = true;
  2344. }
  2345. }
  2346. if (c.getPA().fullGuthans()) {
  2347. if (Misc.random(4) == 1) {
  2348. guthansEffect = true;
  2349. }
  2350. }
  2351. if (damageMask == 1) {
  2352. damage = c.delayedDamage;
  2353. c.delayedDamage = 0;
  2354. } else {
  2355. damage = c.delayedDamage2;
  2356. c.delayedDamage2 = 0;
  2357. }
  2358. if(Misc.random(o.getCombat().calculateMeleeDefence()) > Misc.random(calculateMeleeAttack()) && !veracsEffect && !c.usingClaws) {
  2359. damage = 0;
  2360. c.bonusAttack = 0;
  2361. } else if (c.playerEquipment[c.playerWeapon] == 5698 && o.poisonDamage <= 0 && Misc.random(3) == 1) {
  2362. o.getPA().appendPoison(13);
  2363. c.bonusAttack += damage/3;
  2364. } else {
  2365. c.bonusAttack += damage/3;
  2366. }
  2367. int PrayerDrain = damage / 4;
  2368. if(o.prayerActive[18] || o.curseActive[9] && System.currentTimeMillis() - o.protMeleeDelay > 1500 && !veracsEffect) { // if prayer active reduce damage by 40%
  2369. damage = (int)damage * 60 / 100;
  2370. if (o.playerEquipment[o.playerShield] == 13740 && o.playerLevel[5] >= 1 && damage >= 1) {
  2371. //if (Misc.random(2) == 1) {
  2372. damage = (int)damage * 42 / 100;
  2373. //o.playerLevel[5] -= PrayerDrain;
  2374. o.getPA().refreshSkill(5);
  2375.  
  2376. if (o.playerLevel[5] <= 0) {
  2377. o.playerLevel[5] = 0;
  2378. o.getCombat().resetPrayers();
  2379. o.getPA().refreshSkill(5);
  2380. //}
  2381. }
  2382. }
  2383. }
  2384.  
  2385. if (o.playerEquipment[o.playerShield] == 13742 && !o.prayerActive[18] || !o.curseActive[9] && damage >= 1) {
  2386. if(Misc.random(4) == 3) {
  2387. damage = (int)damage * 65 / 100;
  2388. }
  2389. }
  2390.  
  2391. if (o.playerEquipment[o.playerShield] == 13740 && !o.prayerActive[18] || !o.curseActive[9] && o.playerLevel[5] >= 1 && damage >= 1) {
  2392. damage = (int)damage * 70 / 100;
  2393. o.playerLevel[5] -= PrayerDrain;
  2394. o.getPA().refreshSkill(5);
  2395. if (o.playerLevel[5] <= 0) {
  2396. o.playerLevel[5] = 0;
  2397. o.getCombat().resetPrayers();
  2398. o.getPA().refreshSkill(5);
  2399. }
  2400. }
  2401.  
  2402. if (o.playerEquipment[o.playerWeapon] == 15486 && damage >= 1 && o.SolProtect >= 1) {
  2403. damage = (int)damage / 2;
  2404. }
  2405.  
  2406. if (c.maxNextHit) {
  2407. damage = calculateMeleeMaxHit();
  2408. }
  2409. if (damage > 0 && guthansEffect) {
  2410. c.playerLevel[3] += damage;
  2411. if (c.playerLevel[3] > c.getLevelForXP(c.playerXP[3]))
  2412. c.playerLevel[3] = c.getLevelForXP(c.playerXP[3]);
  2413. c.getPA().refreshSkill(3);
  2414. o.gfx0(398);
  2415. }
  2416. if (c.ssSpec && damageMask == 2) {
  2417. damage = 5 + Misc.random(11);
  2418. c.ssSpec = false;
  2419. }
  2420. if (Server.playerHandler.players[i].playerLevel[3] - damage < 0) {
  2421. damage = Server.playerHandler.players[i].playerLevel[3];
  2422. }
  2423. if (o.vengOn && damage > 0)
  2424. appendVengeance(i, damage);
  2425. if (damage > 0)
  2426. //applyRecoil(damage, i);
  2427. Deflect(damage, i);
  2428. switch(c.specEffect) {
  2429. case 5:
  2430. c.clawDelay = 2;
  2431. break;
  2432. case 1: // dragon scimmy special
  2433. if(damage > 0) {
  2434. if(o.prayerActive[16] || o.prayerActive[17] || o.prayerActive[18] || o.curseActive[7] || o.curseActive[8] || o.curseActive[9]) {
  2435. o.headIcon = -1;
  2436. o.getPA().sendFrame36(c.PRAYER_GLOW[16], 0);
  2437. o.getPA().sendFrame36(c.PRAYER_GLOW[17], 0);
  2438. o.getPA().sendFrame36(c.PRAYER_GLOW[18], 0);
  2439. o.getPA().sendFrame36(c.CURSE_GLOW[7], 0);
  2440. o.getPA().sendFrame36(c.CURSE_GLOW[8], 0);
  2441. o.getPA().sendFrame36(c.CURSE_GLOW[9], 0);
  2442. }
  2443. o.sendMessage("You have been injured!");
  2444. o.stopPrayerDelay = System.currentTimeMillis();
  2445. o.prayerActive[16] = false;
  2446. o.prayerActive[17] = false;
  2447. o.prayerActive[18] = false;
  2448. o.curseActive[7] = false;
  2449. o.curseActive[8] = false;
  2450. o.curseActive[9] = false;
  2451. o.getPA().requestUpdates();
  2452. }
  2453. break;
  2454. case 2:
  2455. if (damage > 0) {
  2456. if (o.freezeTimer <= 0)
  2457. o.freezeTimer = 30;
  2458. o.gfx0(2104);
  2459. o.sendMessage("You have been frozen.");
  2460. o.frozenBy = c.playerId;
  2461. o.stopMovement();
  2462. c.sendMessage("You freeze your enemy.");
  2463. }
  2464. break;
  2465. case 3:
  2466. if (damage > 0) {
  2467. o.playerLevel[1] -= damage;
  2468. o.sendMessage("You feel weak.");
  2469. if (o.playerLevel[1] < 1)
  2470. o.playerLevel[1] = 1;
  2471. o.getPA().refreshSkill(1);
  2472. }
  2473. break;
  2474. case 4:
  2475. if (damage > 0) {
  2476. if (c.playerLevel[3] + damage > c.getLevelForXP(c.playerXP[3]))
  2477. if (c.playerLevel[3] > c.getLevelForXP(c.playerXP[3]));
  2478. else
  2479. c.playerLevel[3] = c.getLevelForXP(c.playerXP[3]);
  2480. else
  2481. c.playerLevel[3] += damage;
  2482. c.getPA().refreshSkill(3);
  2483. }
  2484. break;
  2485. }
  2486. c.specEffect = 0;
  2487. if(c.fightMode == 3) {
  2488. c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 0);
  2489. c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 1);
  2490. c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 2);
  2491. c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 3);
  2492. c.getPA().refreshSkill(0);
  2493. c.getPA().refreshSkill(1);
  2494. c.getPA().refreshSkill(2);
  2495. c.getPA().refreshSkill(3);
  2496. } else {
  2497. c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE), c.fightMode);
  2498. c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 3);
  2499. c.getPA().refreshSkill(c.fightMode);
  2500. c.getPA().refreshSkill(3);
  2501. }
  2502. Server.playerHandler.players[i].logoutDelay = System.currentTimeMillis();
  2503. Server.playerHandler.players[i].underAttackBy = c.playerId;
  2504. Server.playerHandler.players[i].killerId = c.playerId;
  2505. Server.playerHandler.players[i].singleCombatDelay = System.currentTimeMillis();
  2506. if (c.killedBy != Server.playerHandler.players[i].playerId)
  2507. c.totalPlayerDamageDealt = 0;
  2508. c.killedBy = Server.playerHandler.players[i].playerId;
  2509. applySmite(i, damage);
  2510. switch(damageMask) {
  2511. case 1:
  2512. /*if (!Server.playerHandler.players[i].getHitUpdateRequired()){
  2513. Server.playerHandler.players[i].setHitDiff(damage);
  2514. Server.playerHandler.players[i].setHitUpdateRequired(true);
  2515. } else {
  2516. Server.playerHandler.players[i].setHitDiff2(damage);
  2517. Server.playerHandler.players[i].setHitUpdateRequired2(true);
  2518. }*/
  2519. //Server.playerHandler.players[i].playerLevel[3] -= damage;
  2520. Server.playerHandler.players[i].dealDamage(damage);
  2521. Server.playerHandler.players[i].damageTaken[c.playerId] += damage;
  2522. c.totalPlayerDamageDealt += damage;
  2523. Server.playerHandler.players[i].updateRequired = true;
  2524. o.getPA().refreshSkill(3);
  2525. break;
  2526.  
  2527. case 2:
  2528. /*if (!Server.playerHandler.players[i].getHitUpdateRequired2()){
  2529. Server.playerHandler.players[i].setHitDiff2(damage);
  2530. Server.playerHandler.players[i].setHitUpdateRequired2(true);
  2531. } else {
  2532. Server.playerHandler.players[i].setHitDiff(damage);
  2533. Server.playerHandler.players[i].setHitUpdateRequired(true);
  2534. }*/
  2535. //Server.playerHandler.players[i].playerLevel[3] -= damage;
  2536. Server.playerHandler.players[i].dealDamage(damage);
  2537. Server.playerHandler.players[i].damageTaken[c.playerId] += damage;
  2538. c.totalPlayerDamageDealt += damage;
  2539. Server.playerHandler.players[i].updateRequired = true;
  2540. c.doubleHit = false;
  2541. o.getPA().refreshSkill(3);
  2542. break;
  2543. }
  2544. Server.playerHandler.players[i].handleHitMask(damage);
  2545. c.previousDamage = damage;
  2546. }
  2547.  
  2548. public void applySmite(int index, int damage) {
  2549. if (!c.prayerActive[23] && !c.curseActive[18])
  2550. return;
  2551. if (damage <= 0)
  2552. return;
  2553. if (Server.playerHandler.players[index] != null) {
  2554. Client c2 = (Client)Server.playerHandler.players[index];
  2555. if(c.curseActive[18] && !c.prayerActive[23] && c.playerLevel[3] <= 99) {
  2556. int heal = (int)(damage/5);
  2557. if(c.playerLevel[3] + heal >= c.getPA().getLevelForXP(c.playerXP[3])) {
  2558. c.playerLevel[3] = c.getPA().getLevelForXP(c.playerXP[3]);
  2559. } else {
  2560. c.playerLevel[3] += heal;
  2561. }
  2562. c.getPA().refreshSkill(3);
  2563. }
  2564. c2.playerLevel[5] -= (int)(damage/4);
  2565. if (c2.playerLevel[5] <= 0) {
  2566. c2.playerLevel[5] = 0;
  2567. c2.getCombat().resetPrayers();
  2568. }
  2569. c2.getPA().refreshSkill(5);
  2570. }
  2571.  
  2572. }
  2573.  
  2574. public void fireProjectilePlayer() {
  2575. if(c.oldPlayerIndex > 0) {
  2576. if(Server.playerHandler.players[c.oldPlayerIndex] != null) {
  2577. c.projectileStage = 2;
  2578. int pX = c.getX();
  2579. int pY = c.getY();
  2580. int oX = Server.playerHandler.players[c.oldPlayerIndex].getX();
  2581. int oY = Server.playerHandler.players[c.oldPlayerIndex].getY();
  2582. int offX = (pY - oY)* -1;
  2583. int offY = (pX - oX)* -1;
  2584. if(c.playerEquipment[c.playerWeapon] == 15241) {
  2585. if(!c.specGfx) {
  2586. c.gfx0(2138);
  2587. }
  2588. c.getPA().createPlayersProjectile2(pX, pY, offX, offY, 50, 55, getRangeProjectileGFX(), 22, 22, c.oldPlayerIndex - 1, getStartDelay(), -1);
  2589. c.handCannonDestory();
  2590. c.specGfx = false;
  2591. } else if (!c.msbSpec)
  2592. c.getPA().createPlayersProjectile(pX, pY, offX, offY, 50, getProjectileSpeed(), getRangeProjectileGFX(), 43, 31, - c.oldPlayerIndex - 1, getStartDelay());
  2593. else if (c.msbSpec) {
  2594. c.msbSpec = false;
  2595. c.getPA().createPlayersProjectile2(pX, pY, offX, offY, 50, 55, getRangeProjectileGFX(), 22, 22, c.oldNpcIndex + 1, getStartDelay(), -1);
  2596. }
  2597. if (usingDbow())
  2598. c.getPA().createPlayersProjectile2(pX, pY, offX, offY, 50, getProjectileSpeed(), getRangeProjectileGFX(), 60, 31, - c.oldPlayerIndex - 1, getStartDelay(), 35);
  2599. }
  2600. }
  2601. }
  2602. public boolean usingDbow() {
  2603. return c.playerEquipment[c.playerWeapon] == 11235;
  2604. }
  2605.  
  2606.  
  2607.  
  2608.  
  2609.  
  2610. /**Prayer**/
  2611.  
  2612. public void activatePrayer(int i) {
  2613. if(c.duelRule[7]){
  2614. for(int p = 0; p < c.PRAYER.length; p++) { // reset prayer glows
  2615. c.prayerActive[p] = false;
  2616. c.getPA().sendFrame36(c.PRAYER_GLOW[p], 0);
  2617. }
  2618. c.sendMessage("Prayer has been disabled in this duel!");
  2619. return;
  2620. }
  2621. if(c.inRFD()){
  2622. for(int p = 0; p < c.PRAYER.length; p++) { // reset prayer glows
  2623. c.prayerActive[p] = false;
  2624. c.getPA().sendFrame36(c.PRAYER_GLOW[p], 0);
  2625. }
  2626. c.sendMessage("You cannot use prayer in here!");
  2627. return;
  2628. }
  2629. if (i == 24 && c.getPA().getLevelForXP(c.playerXP[1]) < 70) {
  2630. c.getPA().sendFrame36(c.PRAYER_GLOW[i], 0);
  2631. c.sendMessage("You need 60 Defence to use Chivarly");
  2632. return;
  2633. }
  2634. if (i == 25 && c.getPA().getLevelForXP(c.playerXP[1]) < 70) {
  2635. c.getPA().sendFrame36(c.PRAYER_GLOW[i], 0);
  2636. c.sendMessage("You need 70 defence to use Piety");
  2637. return;
  2638. }
  2639.  
  2640. int[] defPray = {0,5,13,24,25};
  2641. int[] strPray = {1,6,14,24,25};
  2642. int[] atkPray = {2,7,15,24,25};
  2643. int[] rangePray = {3,11,19};
  2644. int[] magePray = {4,12,20};
  2645.  
  2646. if(c.playerLevel[5] > 0 || !Config.PRAYER_POINTS_REQUIRED){
  2647. if(c.getPA().getLevelForXP(c.playerXP[5]) >= c.PRAYER_LEVEL_REQUIRED[i] || !Config.PRAYER_LEVEL_REQUIRED) {
  2648. boolean headIcon = false;
  2649. switch(i) {
  2650. case 0:
  2651. case 5:
  2652. case 13:
  2653. if(c.prayerActive[i] == false) {
  2654. for (int j = 0; j < defPray.length; j++) {
  2655. if (defPray[j] != i) {
  2656. c.prayerActive[defPray[j]] = false;
  2657. c.getPA().sendFrame36(c.PRAYER_GLOW[defPray[j]], 0);
  2658. }
  2659. }
  2660. }
  2661. break;
  2662.  
  2663. case 1:
  2664. case 6:
  2665. case 14:
  2666. if(c.prayerActive[i] == false) {
  2667. for (int j = 0; j < strPray.length; j++) {
  2668. if (strPray[j] != i) {
  2669. c.prayerActive[strPray[j]] = false;
  2670. c.getPA().sendFrame36(c.PRAYER_GLOW[strPray[j]], 0);
  2671. }
  2672. }
  2673. for (int j = 0; j < rangePray.length; j++) {
  2674. if (rangePray[j] != i) {
  2675. c.prayerActive[rangePray[j]] = false;
  2676. c.getPA().sendFrame36(c.PRAYER_GLOW[rangePray[j]], 0);
  2677. }
  2678. }
  2679. for (int j = 0; j < magePray.length; j++) {
  2680. if (magePray[j] != i) {
  2681. c.prayerActive[magePray[j]] = false;
  2682. c.getPA().sendFrame36(c.PRAYER_GLOW[magePray[j]], 0);
  2683. }
  2684. }
  2685. }
  2686. break;
  2687.  
  2688. case 2:
  2689. case 7:
  2690. case 15:
  2691. if(c.prayerActive[i] == false) {
  2692. for (int j = 0; j < atkPray.length; j++) {
  2693. if (atkPray[j] != i) {
  2694. c.prayerActive[atkPray[j]] = false;
  2695. c.getPA().sendFrame36(c.PRAYER_GLOW[atkPray[j]], 0);
  2696. }
  2697. }
  2698. for (int j = 0; j < rangePray.length; j++) {
  2699. if (rangePray[j] != i) {
  2700. c.prayerActive[rangePray[j]] = false;
  2701. c.getPA().sendFrame36(c.PRAYER_GLOW[rangePray[j]], 0);
  2702. }
  2703. }
  2704. for (int j = 0; j < magePray.length; j++) {
  2705. if (magePray[j] != i) {
  2706. c.prayerActive[magePray[j]] = false;
  2707. c.getPA().sendFrame36(c.PRAYER_GLOW[magePray[j]], 0);
  2708. }
  2709. }
  2710. }
  2711. break;
  2712.  
  2713. case 3://range prays
  2714. case 11:
  2715. case 19:
  2716. if(c.prayerActive[i] == false) {
  2717. for (int j = 0; j < atkPray.length; j++) {
  2718. if (atkPray[j] != i) {
  2719. c.prayerActive[atkPray[j]] = false;
  2720. c.getPA().sendFrame36(c.PRAYER_GLOW[atkPray[j]], 0);
  2721. }
  2722. }
  2723. for (int j = 0; j < strPray.length; j++) {
  2724. if (strPray[j] != i) {
  2725. c.prayerActive[strPray[j]] = false;
  2726. c.getPA().sendFrame36(c.PRAYER_GLOW[strPray[j]], 0);
  2727. }
  2728. }
  2729. for (int j = 0; j < rangePray.length; j++) {
  2730. if (rangePray[j] != i) {
  2731. c.prayerActive[rangePray[j]] = false;
  2732. c.getPA().sendFrame36(c.PRAYER_GLOW[rangePray[j]], 0);
  2733. }
  2734. }
  2735. for (int j = 0; j < magePray.length; j++) {
  2736. if (magePray[j] != i) {
  2737. c.prayerActive[magePray[j]] = false;
  2738. c.getPA().sendFrame36(c.PRAYER_GLOW[magePray[j]], 0);
  2739. }
  2740. }
  2741. }
  2742. break;
  2743. case 4:
  2744. case 12:
  2745. case 20:
  2746. if(c.prayerActive[i] == false) {
  2747. for (int j = 0; j < atkPray.length; j++) {
  2748. if (atkPray[j] != i) {
  2749. c.prayerActive[atkPray[j]] = false;
  2750. c.getPA().sendFrame36(c.PRAYER_GLOW[atkPray[j]], 0);
  2751. }
  2752. }
  2753. for (int j = 0; j < strPray.length; j++) {
  2754. if (strPray[j] != i) {
  2755. c.prayerActive[strPray[j]] = false;
  2756. c.getPA().sendFrame36(c.PRAYER_GLOW[strPray[j]], 0);
  2757. }
  2758. }
  2759. for (int j = 0; j < rangePray.length; j++) {
  2760. if (rangePray[j] != i) {
  2761. c.prayerActive[rangePray[j]] = false;
  2762. c.getPA().sendFrame36(c.PRAYER_GLOW[rangePray[j]], 0);
  2763. }
  2764. }
  2765. for (int j = 0; j < magePray.length; j++) {
  2766. if (magePray[j] != i) {
  2767. c.prayerActive[magePray[j]] = false;
  2768. c.getPA().sendFrame36(c.PRAYER_GLOW[magePray[j]], 0);
  2769. }
  2770. }
  2771. }
  2772. break;
  2773. case 10:
  2774. c.lastProtItem = System.currentTimeMillis();
  2775. break;
  2776.  
  2777.  
  2778. case 16:
  2779. case 17:
  2780. case 18:
  2781. if(System.currentTimeMillis() - c.stopPrayerDelay < 5000) {
  2782. c.sendMessage("You have been injured and can't use this prayer!");
  2783. c.getPA().sendFrame36(c.PRAYER_GLOW[16], 0);
  2784. c.getPA().sendFrame36(c.PRAYER_GLOW[17], 0);
  2785. c.getPA().sendFrame36(c.PRAYER_GLOW[18], 0);
  2786. return;
  2787. }
  2788. if (i == 16)
  2789. c.protMageDelay = System.currentTimeMillis();
  2790. else if (i == 17)
  2791. c.protRangeDelay = System.currentTimeMillis();
  2792. else if (i == 18)
  2793. c.protMeleeDelay = System.currentTimeMillis();
  2794. case 21:
  2795. case 22:
  2796. case 23:
  2797. headIcon = true;
  2798. for(int p = 16; p < 24; p++) {
  2799. if(i != p && p != 19 && p != 20) {
  2800. c.prayerActive[p] = false;
  2801. c.getPA().sendFrame36(c.PRAYER_GLOW[p], 0);
  2802. }
  2803. }
  2804. break;
  2805. case 24:
  2806. if (c.prayerActive[i] == false) {
  2807.  
  2808. for (int j = 0; j < atkPray.length; j++) {
  2809. if (atkPray[j] != i) {
  2810. c.prayerActive[atkPray[j]] = false;
  2811. c.getPA().sendFrame36(c.PRAYER_GLOW[atkPray[j]], 0);
  2812. }
  2813. }
  2814. for (int j = 0; j < strPray.length; j++) {
  2815. if (strPray[j] != i) {
  2816. c.prayerActive[strPray[j]] = false;
  2817. c.getPA().sendFrame36(c.PRAYER_GLOW[strPray[j]], 0);
  2818. }
  2819. }
  2820. for (int j = 0; j < rangePray.length; j++) {
  2821. if (rangePray[j] != i) {
  2822. c.prayerActive[rangePray[j]] = false;
  2823. c.getPA().sendFrame36(c.PRAYER_GLOW[rangePray[j]], 0);
  2824. }
  2825. }
  2826. for (int j = 0; j < magePray.length; j++) {
  2827. if (magePray[j] != i) {
  2828. c.prayerActive[magePray[j]] = false;
  2829. c.getPA().sendFrame36(c.PRAYER_GLOW[magePray[j]], 0);
  2830. }
  2831. }
  2832. for (int j = 0; j < defPray.length; j++) {
  2833. if (defPray[j] != i) {
  2834. c.prayerActive[defPray[j]] = false;
  2835. c.getPA().sendFrame36(c.PRAYER_GLOW[defPray[j]], 0);
  2836. }
  2837. }
  2838. }
  2839. break;
  2840. case 25:
  2841.  
  2842. if (c.prayerActive[i] == false) {
  2843.  
  2844. for (int j = 0; j < atkPray.length; j++) {
  2845. if (atkPray[j] != i) {
  2846. c.prayerActive[atkPray[j]] = false;
  2847. c.getPA().sendFrame36(c.PRAYER_GLOW[atkPray[j]], 0);
  2848. }
  2849. }
  2850. for (int j = 0; j < strPray.length; j++) {
  2851. if (strPray[j] != i) {
  2852. c.prayerActive[strPray[j]] = false;
  2853. c.getPA().sendFrame36(c.PRAYER_GLOW[strPray[j]], 0);
  2854. }
  2855. }
  2856. for (int j = 0; j < rangePray.length; j++) {
  2857. if (rangePray[j] != i) {
  2858. c.prayerActive[rangePray[j]] = false;
  2859. c.getPA().sendFrame36(c.PRAYER_GLOW[rangePray[j]], 0);
  2860. }
  2861. }
  2862. for (int j = 0; j < magePray.length; j++) {
  2863. if (magePray[j] != i) {
  2864. c.prayerActive[magePray[j]] = false;
  2865. c.getPA().sendFrame36(c.PRAYER_GLOW[magePray[j]], 0);
  2866. }
  2867. }
  2868. for (int j = 0; j < defPray.length; j++) {
  2869. if (defPray[j] != i) {
  2870. c.prayerActive[defPray[j]] = false;
  2871. c.getPA().sendFrame36(c.PRAYER_GLOW[defPray[j]], 0);
  2872. }
  2873. }
  2874. }
  2875. break;
  2876. }
  2877.  
  2878. if(!headIcon) {
  2879. if(c.prayerActive[i] == false) {
  2880. c.prayerActive[i] = true;
  2881. c.getPA().sendFrame36(c.PRAYER_GLOW[i], 1);
  2882. } else {
  2883. c.prayerActive[i] = false;
  2884. c.getPA().sendFrame36(c.PRAYER_GLOW[i], 0);
  2885. }
  2886. } else {
  2887. if(c.prayerActive[i] == false) {
  2888. c.prayerActive[i] = true;
  2889. c.getPA().sendFrame36(c.PRAYER_GLOW[i], 1);
  2890. c.headIcon = c.PRAYER_HEAD_ICONS[i];
  2891. c.getPA().requestUpdates();
  2892. } else {
  2893. c.prayerActive[i] = false;
  2894. c.getPA().sendFrame36(c.PRAYER_GLOW[i], 0);
  2895. c.headIcon = -1;
  2896. c.getPA().requestUpdates();
  2897. }
  2898. }
  2899. } else {
  2900. c.getPA().sendFrame36(c.PRAYER_GLOW[i],0);
  2901. c.getPA().sendFrame126("You need a @blu@Prayer level of "+c.PRAYER_LEVEL_REQUIRED[i]+" to use "+c.PRAYER_NAME[i]+".", 357);
  2902. c.getPA().sendFrame126("Click here to continue", 358);
  2903. c.getPA().sendFrame164(356);
  2904. c.nextChat = 0;
  2905. }
  2906. } else {
  2907. c.getPA().sendFrame36(c.PRAYER_GLOW[i],0);
  2908. c.sendMessage("You have run out of prayer points!");
  2909. }
  2910.  
  2911. }
  2912.  
  2913. /**
  2914. *Specials
  2915. **/
  2916.  
  2917. public void activateSpecial(int weapon, int i){
  2918. if(Server.npcHandler.npcs[i] == null && c.npcIndex > 0) {
  2919. return;
  2920. }
  2921. if(Server.playerHandler.players[i] == null && c.playerIndex > 0) {
  2922. return;
  2923. }
  2924. c.doubleHit = false;
  2925. c.specEffect = 0;
  2926. c.projectileStage = 0;
  2927. c.specMaxHitIncrease = 2;
  2928. if(c.npcIndex > 0) {
  2929. c.oldNpcIndex = i;
  2930. } else if (c.playerIndex > 0){
  2931. c.oldPlayerIndex = i;
  2932. Server.playerHandler.players[i].underAttackBy = c.playerId;
  2933. Server.playerHandler.players[i].logoutDelay = System.currentTimeMillis();
  2934. Server.playerHandler.players[i].singleCombatDelay = System.currentTimeMillis();
  2935. Server.playerHandler.players[i].killerId = c.playerId;
  2936. }
  2937. switch(weapon) {
  2938. case 15241: // hand cannon special effect
  2939. c.usingBow = true;
  2940. c.rangeItemUsed = c.playerEquipment[c.playerArrows];
  2941. c.getItems().deleteArrow();
  2942. c.lastWeaponUsed = weapon;
  2943. c.startAnimation(12175);
  2944. c.specAccuracy = 1.5;
  2945. c.specDamage = 1.15;
  2946. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  2947. if (c.fightMode == 2)
  2948. c.attackTimer-=4;
  2949. c.handCannonSpec();
  2950. break;
  2951. case 1305: // dragon long
  2952. c.gfx100(248);
  2953. c.startAnimation(1058);
  2954. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  2955. c.specAccuracy = 1.10;
  2956. c.specDamage = 1.20;
  2957. break;
  2958.  
  2959. case 1215: // dragon daggers
  2960. case 1231:
  2961. case 5680:
  2962. case 5698:
  2963. c.gfx100(252);
  2964. c.startAnimation(1062);
  2965. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  2966. c.doubleHit = true;
  2967. c.specAccuracy = 5.00;
  2968. c.specDamage = 1.05;
  2969. break;
  2970.  
  2971. case 10887:
  2972. c.gfx100(1027);
  2973. c.specAccuracy = 5.0;
  2974. c.specDamage = 1.15;
  2975. c.startAnimation(5870);
  2976. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  2977. break;
  2978.  
  2979. case 14484:
  2980. c.gfx0(1950);
  2981. c.startAnimation(10961);
  2982. c.specAccuracy = 10.0;
  2983. c.clawDamage = 0;
  2984.  
  2985. if (c.playerIndex > 0) {
  2986. Client o = (Client) Server.playerHandler.players[c.playerIndex];
  2987. if (Misc.random(calculateMeleeAttack()) > Misc.random(o.getCombat().calculateMeleeDefence())) {
  2988. c.clawDamage = Misc.random(calculateMeleeMaxHit() + Misc.random(2));
  2989. }
  2990. c.clawIndex = c.playerIndex;
  2991. c.clawType = 1;
  2992. } else if (c.npcIndex > 0) {
  2993. NPC n = Server.npcHandler.npcs[c.npcIndex];
  2994. if (Misc.random(calculateMeleeAttack()) > Misc.random(n.defence)) {
  2995. c.clawDamage = Misc.random(calculateMeleeMaxHit() + Misc.random(2));
  2996. }
  2997. c.clawIndex = c.npcIndex;
  2998. c.clawType = 2;
  2999. }
  3000.  
  3001. c.doubleHit = true;
  3002. c.usingClaws = true;
  3003. c.specEffect = 5;
  3004. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  3005. break;
  3006.  
  3007. case 4151: // whip
  3008. case 15441: // whip
  3009. case 15442: // whip
  3010. case 15443: // whip
  3011. case 15444: // whip
  3012. if(Server.npcHandler.npcs[i] != null) {
  3013. Server.npcHandler.npcs[i].gfx100(341);
  3014. }
  3015. c.specAccuracy = 1.10;
  3016. c.startAnimation(1658);
  3017. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  3018. break;
  3019.  
  3020. case 11694: // ags
  3021. c.startAnimation(7074);
  3022. c.specDamage = 1.30;
  3023. c.specAccuracy = 4.55;
  3024. c.gfx0(1222);
  3025. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  3026. break;
  3027.  
  3028. case 19780:
  3029. c.gfx100(1224);
  3030. c.startAnimation(1872);
  3031. c.specAccuracy = 5.00;
  3032. c.specDamage = 2.00;
  3033. c.ssSpec = true;
  3034. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  3035. break;
  3036.  
  3037. case 11730:
  3038. c.gfx100(1224);
  3039. c.startAnimation(7072);
  3040. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  3041. c.doubleHit = true;
  3042. c.ssSpec = true;
  3043. c.specAccuracy = 1.30;
  3044. break;
  3045.  
  3046. case 13905: // Vesta spear
  3047. c.startAnimation(10499);
  3048. c.gfx0(1835);
  3049. c.specAccuracy = 1.25;
  3050. c.specEffect = 6;
  3051. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  3052. break;
  3053.  
  3054. case 13899: // Vesta LongSword
  3055. c.startAnimation(10502);
  3056. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase()+1);
  3057. c.specDamage = 1.35;
  3058. c.specAccuracy = 2.00;
  3059. break;
  3060. case 13902: // Statius
  3061. c.startAnimation(10505);
  3062. c.gfx0(1840);
  3063. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase()+1);
  3064. c.specDamage = 1.35;
  3065. c.specAccuracy = 2.25;
  3066. break;
  3067.  
  3068. case 11700:
  3069. c.startAnimation(7070);
  3070. c.gfx0(1221);
  3071. if (c.playerIndex > 0) {
  3072. } else {
  3073. Server.npcHandler.npcs[c.npcIndex].gfx0(2104);
  3074. }
  3075. c.specAccuracy = 1.35;
  3076. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  3077. c.specEffect = 2;
  3078. break;
  3079.  
  3080. case 11696:
  3081. c.startAnimation(7073);
  3082. c.gfx0(1223);
  3083. c.specDamage = 1.30;
  3084. c.specAccuracy = 1.85;
  3085. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  3086. c.specEffect = 3;
  3087. break;
  3088.  
  3089. case 11698:
  3090. c.startAnimation(7071);
  3091. c.gfx0(1220);
  3092. c.specAccuracy = 2.00;
  3093. c.specDamage = 1.30;
  3094. c.specEffect = 4;
  3095. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  3096. break;
  3097.  
  3098. case 1249:
  3099. c.startAnimation(405);
  3100. c.gfx100(253);
  3101. if (c.playerIndex > 0) {
  3102. Client o = (Client)Server.playerHandler.players[i];
  3103. o.getPA().getSpeared(c.absX, c.absY);
  3104. }
  3105. break;
  3106.  
  3107. case 3204: // d hally
  3108. c.gfx100(282);
  3109. c.startAnimation(1203);
  3110. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  3111. if(Server.npcHandler.npcs[i] != null && c.npcIndex > 0) {
  3112. if(!c.goodDistance(c.getX(), c.getY(), Server.npcHandler.npcs[i].getX(), Server.npcHandler.npcs[i].getY(), 1)){
  3113. c.doubleHit = true;
  3114. }
  3115. }
  3116. if(Server.playerHandler.players[i] != null && c.playerIndex > 0) {
  3117. if(!c.goodDistance(c.getX(), c.getY(), Server.playerHandler.players[i].getX(),Server.playerHandler.players[i].getY(), 1)){
  3118. c.doubleHit = true;
  3119. c.delayedDamage2 = Misc.random(calculateMeleeMaxHit());
  3120. }
  3121. }
  3122. break;
  3123.  
  3124. case 4153: // maul
  3125. c.startAnimation(1667);
  3126. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  3127. /*if (c.playerIndex > 0)
  3128. gmaulPlayer(i);
  3129. else
  3130. gmaulNpc(i);*/
  3131. c.gfx100(337);
  3132. break;
  3133.  
  3134. case 4587: // dscimmy
  3135. c.gfx100(347);
  3136. c.specEffect = 1;
  3137. c.startAnimation(1872);
  3138. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  3139. break;
  3140.  
  3141. case 1434: // mace
  3142. c.startAnimation(1060);
  3143. c.gfx100(251);
  3144. c.specMaxHitIncrease = 3;
  3145. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase())+1;
  3146. c.specDamage = 1.35;
  3147. c.specAccuracy = 1.15;
  3148. break;
  3149.  
  3150. case 859: // magic long
  3151. c.usingBow = true;
  3152. c.bowSpecShot = 3;
  3153. c.rangeItemUsed = c.playerEquipment[c.playerArrows];
  3154. c.getItems().deleteArrow();
  3155. c.lastWeaponUsed = weapon;
  3156. c.startAnimation(426);
  3157. c.gfx100(250);
  3158. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  3159. c.projectileStage = 1;
  3160. if (c.fightMode == 2)
  3161. c.attackTimer--;
  3162. break;
  3163.  
  3164. case 13883: // Morrigan Throwing Axe
  3165. c.usingRangeWeapon = true;
  3166. c.rangeItemUsed = c.playerEquipment[c.playerWeapon];
  3167. c.getItems().deleteArrow();
  3168. c.lastWeaponUsed = weapon;
  3169. c.startAnimation(10501);
  3170. c.gfx0(1836);
  3171. c.hitDelay = 3;
  3172. c.specAccuracy = 1.90;
  3173. c.specDamage = 1.20;
  3174. c.projectileStage = 1;
  3175. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  3176. if (c.fightMode == 2)
  3177. c.attackTimer--;
  3178. if (c.playerIndex > 0)
  3179. fireProjectilePlayer();
  3180. else if (c.npcIndex > 0)
  3181. fireProjectileNpc();
  3182. break;
  3183.  
  3184. case 13879: // Morrigan Javeline
  3185. c.usingRangeWeapon = true;
  3186. c.rangeItemUsed = c.playerEquipment[c.playerWeapon];
  3187. c.getItems().deleteArrow();
  3188. c.lastWeaponUsed = weapon;
  3189. c.startAnimation(10504);
  3190. c.gfx0(1838);
  3191. c.specAccuracy = 2.00;
  3192. c.specDamage = 1.30;
  3193. c.hitDelay = 3;
  3194. c.projectileStage = 1;
  3195. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  3196. if (c.fightMode == 2)
  3197. c.attackTimer--;
  3198. if (c.playerIndex > 0)
  3199. fireProjectilePlayer();
  3200. else if (c.npcIndex > 0)
  3201. fireProjectileNpc();
  3202. break;
  3203.  
  3204. case 861: // magic short
  3205. c.usingBow = true;
  3206. c.bowSpecShot = 1;
  3207. c.rangeItemUsed = c.playerEquipment[c.playerArrows];
  3208. c.getItems().deleteArrow();
  3209. c.lastWeaponUsed = weapon;
  3210. c.startAnimation(1074);
  3211. c.hitDelay = 3;
  3212. c.projectileStage = 1;
  3213. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  3214. if (c.fightMode == 2)
  3215. c.attackTimer--;
  3216. if (c.playerIndex > 0)
  3217. fireProjectilePlayer();
  3218. else if (c.npcIndex > 0)
  3219. fireProjectileNpc();
  3220. break;
  3221.  
  3222. case 11235: // dark bow
  3223. case 15701: // dark bow
  3224. case 15702: // dark bow
  3225. case 15703: // dark bow
  3226. case 15704: // dark bow
  3227. c.usingBow = true;
  3228. c.dbowSpec = true;
  3229. c.rangeItemUsed = c.playerEquipment[c.playerArrows];
  3230. c.getItems().deleteArrow();
  3231. c.getItems().deleteArrow();
  3232. c.lastWeaponUsed = weapon;
  3233. c.hitDelay = 3;
  3234. c.startAnimation(426);
  3235. c.projectileStage = 1;
  3236. c.gfx100(getRangeStartGFX());
  3237. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  3238. if (c.fightMode == 2)
  3239. c.attackTimer--;
  3240. if (c.playerIndex > 0)
  3241. fireProjectilePlayer();
  3242. else if (c.npcIndex > 0)
  3243. fireProjectileNpc();
  3244. c.specAccuracy = 1.75;
  3245. c.specDamage = 1.50;
  3246. break;
  3247. }
  3248. c.delayedDamage = Misc.random(calculateMeleeMaxHit());
  3249. c.delayedDamage2 = Misc.random(calculateMeleeMaxHit());
  3250. c.usingSpecial = false;
  3251. c.getItems().updateSpecialBar();
  3252. }
  3253.  
  3254.  
  3255. public boolean checkSpecAmount(int weapon) {
  3256. switch(weapon) {
  3257. case 1249:
  3258. case 1215:
  3259. case 1231:
  3260. case 5680:
  3261. case 5698:
  3262. case 1305:
  3263. case 1434:
  3264. case 13899:
  3265. if(c.specAmount >= 2.5) {
  3266. c.specAmount -= 2.5;
  3267. c.getItems().addSpecialBar(weapon);
  3268. return true;
  3269. }
  3270. return false;
  3271.  
  3272.  
  3273.  
  3274. case 4151:
  3275. case 15241:
  3276. case 15441: // whip
  3277. case 15442: // whip
  3278. case 15443: // whip
  3279. case 15444: // whip
  3280. case 11694:
  3281. case 14484:
  3282. case 11698:
  3283. case 4153:
  3284. case 13902:
  3285. case 13905:
  3286. case 13883:
  3287. case 13879:
  3288. case 19780:
  3289. case 15486:
  3290. case 10887:
  3291. if(c.specAmount >= 5) {
  3292. c.specAmount -= 5;
  3293. c.getItems().addSpecialBar(weapon);
  3294. return true;
  3295. }
  3296. return false;
  3297.  
  3298. case 3204:
  3299. if(c.specAmount >= 3) {
  3300. c.specAmount -= 3;
  3301. c.getItems().addSpecialBar(weapon);
  3302. return true;
  3303. }
  3304. return false;
  3305.  
  3306. case 1377:
  3307. case 11696:
  3308. case 11730:
  3309. if(c.specAmount >= 10) {
  3310. c.specAmount -= 10;
  3311. c.getItems().addSpecialBar(weapon);
  3312. return true;
  3313. }
  3314. return false;
  3315. case 4587:
  3316. case 859:
  3317. case 861:
  3318. case 15701: // dark bow
  3319. case 15702: // dark bow
  3320. case 15703: // dark bow
  3321. case 15704: // dark bow
  3322. case 11235:
  3323. case 11700:
  3324. if(c.specAmount >= 5.5) {
  3325. c.specAmount -= 5.5;
  3326. c.getItems().addSpecialBar(weapon);
  3327. return true;
  3328. }
  3329. return false;
  3330.  
  3331.  
  3332. default:
  3333. return true; // incase u want to test a weapon
  3334. }
  3335. }
  3336.  
  3337. public void resetPlayerAttack() {
  3338. c.usingMagic = false;
  3339. c.npcIndex = 0;
  3340. c.faceUpdate(0);
  3341. c.playerIndex = 0;
  3342. c.getPA().resetFollow();
  3343. //c.sendMessage("Reset attack.");
  3344. }
  3345.  
  3346. public int getCombatDifference(int combat1, int combat2) {
  3347. if(combat1 > combat2) {
  3348. return (combat1 - combat2);
  3349. }
  3350. if(combat2 > combat1) {
  3351. return (combat2 - combat1);
  3352. }
  3353. return 0;
  3354. }
  3355.  
  3356. /**
  3357. *Get killer id
  3358. **/
  3359.  
  3360. public int getKillerId(int playerId) {
  3361. int oldDamage = 0;
  3362. int count = 0;
  3363. int killerId = 0;
  3364. for (int i = 1; i < Config.MAX_PLAYERS; i++) {
  3365. if (Server.playerHandler.players[i] != null) {
  3366. if(Server.playerHandler.players[i].killedBy == playerId) {
  3367. if (Server.playerHandler.players[i].withinDistance(Server.playerHandler.players[playerId])) {
  3368. if(Server.playerHandler.players[i].totalPlayerDamageDealt > oldDamage) {
  3369. oldDamage = Server.playerHandler.players[i].totalPlayerDamageDealt;
  3370. killerId = i;
  3371. }
  3372. }
  3373. Server.playerHandler.players[i].totalPlayerDamageDealt = 0;
  3374. Server.playerHandler.players[i].killedBy = 0;
  3375. }
  3376. }
  3377. }
  3378. return killerId;
  3379. }
  3380.  
  3381.  
  3382.  
  3383. double[] prayerData = {
  3384. 1, // Thick Skin.
  3385. 1, // Burst of Strength.
  3386. 1, // Clarity of Thought.
  3387. 1, // Sharp Eye.
  3388. 1, // Mystic Will.
  3389. 2, // Rock Skin.
  3390. 2, // SuperHuman Strength.
  3391. 2, // Improved Reflexes.
  3392. 0.4, // Rapid restore.
  3393. 0.6, // Rapid Heal.
  3394. 0.6, // Protect Items.
  3395. 1.5, // Hawk eye.
  3396. 2, // Mystic Lore.
  3397. 4, // Steel Skin.
  3398. 4, // Ultimate Strength.
  3399. 4, // Incredible Reflexes.
  3400. 4, // Protect from Magic.
  3401. 4, // Protect from Missiles.
  3402. 4, // Protect from Melee.
  3403. 4, // Eagle Eye.
  3404. 4, // Mystic Might.
  3405. 1, // Retribution.
  3406. 2, // Redemption.
  3407. 6, // Smite.
  3408. 8, // Chivalry.
  3409. 8, // Piety.
  3410. };
  3411.  
  3412. double[] curseData = {
  3413. 0.6, // Protect Item
  3414. 2, // Sap Warrior
  3415. 2, // Sap Range
  3416. 2, // Sap Mage
  3417. 2, // Sap Spirit
  3418. 1, // Berserker
  3419. 4, // Deflect Summoning
  3420. 4, // Deflect Mage
  3421. 4, // Deflect Range
  3422. 4, // Deflect Melee
  3423. 4, // Leech Attack
  3424. 4, // Leech Range
  3425. 4, // Leech Mage
  3426. 4, // Leech Defence
  3427. 4, // Leech Strength
  3428. 4, // Leech Energy
  3429. 4, // Leech Special
  3430. 4, // Wrath
  3431. 8, // Soul Split
  3432. 10, // Turmoil
  3433. };
  3434.  
  3435. public void handlePrayerDrain() {
  3436. c.usingPrayer = false;
  3437. double toRemove = 0.0;
  3438. for (int j = 0; j < prayerData.length; j++) {
  3439. if (c.prayerActive[j]) {
  3440. toRemove += prayerData[j]/20;
  3441. c.usingPrayer = true;
  3442. }
  3443. }
  3444. for (int j = 0; j < curseData.length; j++) {
  3445. if (c.curseActive[j]) {
  3446. toRemove += curseData[j]/20;
  3447. c.usingPrayer = true;
  3448. }
  3449. }
  3450. if (toRemove > 0) {
  3451. toRemove /= (1 + (0.035 * c.playerBonus[11]));
  3452. }
  3453. c.prayerPoint -= toRemove;
  3454. if (c.prayerPoint <= 0) {
  3455. c.prayerPoint = 1.0 + c.prayerPoint;
  3456. reducePrayerLevel();
  3457. }
  3458. }
  3459.  
  3460. public void reducePrayerLevel() {
  3461. if(c.playerLevel[5] - 1 > 0) {
  3462. c.playerLevel[5] -= 1;
  3463. } else {
  3464. c.sendMessage("You have run out of prayer points!");
  3465. c.playerLevel[5] = 0;
  3466. c.getCombat().resetPrayers();
  3467. c.prayerId = -1;
  3468. }
  3469. c.getPA().refreshSkill(5);
  3470. }
  3471.  
  3472. public void resetPrayers() {
  3473. for(int i = 0; i < c.prayerActive.length; i++) {
  3474. c.prayerActive[i] = false;
  3475. c.getPA().sendFrame36(c.PRAYER_GLOW[i], 0);
  3476. }
  3477. for(int i = 0; i < c.curseActive.length; i++) {
  3478. c.curseActive[i] = false;
  3479. c.getPA().sendFrame36(c.CURSE_GLOW[i], 0);
  3480. }
  3481. c.headIcon = -1;
  3482. c.getPA().requestUpdates();
  3483. }
  3484.  
  3485. /**
  3486. * Wildy and duel info
  3487. **/
  3488.  
  3489. public boolean checkReqs() {
  3490. if(Server.playerHandler.players[c.playerIndex] == null) {
  3491. return false;
  3492. }
  3493. if (c.playerIndex == c.playerId)
  3494. return false;
  3495. if (c.inPits && Server.playerHandler.players[c.playerIndex].inPits)
  3496. return true;
  3497. if(Server.playerHandler.players[c.playerIndex].inDuelArena() && c.duelStatus != 5 && !c.usingMagic) {
  3498. if(c.arenas() || c.duelStatus == 5) {
  3499. c.sendMessage("You can't challenge inside the arena!");
  3500. return false;
  3501. }
  3502. c.getTradeAndDuel().requestDuel(c.playerIndex);
  3503. return false;
  3504. }
  3505. if(c.duelStatus == 5 && Server.playerHandler.players[c.playerIndex].duelStatus == 5) {
  3506. if(Server.playerHandler.players[c.playerIndex].duelingWith == c.getId()) {
  3507. return true;
  3508. } else {
  3509. c.sendMessage("This isn't your opponent!");
  3510. return false;
  3511. }
  3512. }
  3513. if(!Server.playerHandler.players[c.playerIndex].inWild() && Server.playerHandler.players[c.playerIndex].safeTimer <= 0) {
  3514. c.sendMessage("That player is not in the wilderness.");
  3515. c.stopMovement();
  3516. c.getCombat().resetPlayerAttack();
  3517. return false;
  3518. }
  3519. if(Server.playerHandler.players[c.playerIndex].safeZone()) {
  3520. c.sendMessage("This player is currently in a safe zone.");
  3521. c.stopMovement();
  3522. c.getCombat().resetPlayerAttack();
  3523. return false;
  3524. }
  3525.  
  3526. if(!c.inWild() && c.safeTimer <= 0) {
  3527. c.sendMessage("You are not in the wilderness.");
  3528. c.stopMovement();
  3529. c.getCombat().resetPlayerAttack();
  3530. return false;
  3531. }
  3532. if(c.safeZone()) {
  3533. c.sendMessage("You are standing in a safe zone.");
  3534. c.stopMovement();
  3535. c.getCombat().resetPlayerAttack();
  3536. return false;
  3537. }
  3538. if(!c.inFunPk()){
  3539. if(Config.COMBAT_LEVEL_DIFFERENCE) {
  3540. int combatDif1 = c.getCombat().getCombatDifference(c.combatLevel, Server.playerHandler.players[c.playerIndex].combatLevel);
  3541. if(combatDif1 > c.wildLevel || combatDif1 > Server.playerHandler.players[c.playerIndex].wildLevel) {
  3542. c.sendMessage("Your combat level difference is too great to attack that player here.");
  3543. c.stopMovement();
  3544. c.getCombat().resetPlayerAttack();
  3545. return false;
  3546. }
  3547. }
  3548. }
  3549.  
  3550. if(Config.SINGLE_AND_MULTI_ZONES) {
  3551. if(!Server.playerHandler.players[c.playerIndex].inMulti()) { // single combat zones
  3552. if(Server.playerHandler.players[c.playerIndex].underAttackBy != c.playerId && Server.playerHandler.players[c.playerIndex].underAttackBy != 0) {
  3553. c.sendMessage("That player is already in combat.");
  3554. c.stopMovement();
  3555. c.getCombat().resetPlayerAttack();
  3556. return false;
  3557. }
  3558. if(Server.playerHandler.players[c.playerIndex].playerId != c.underAttackBy && c.underAttackBy != 0 || c.underAttackBy2 > 0) {
  3559. c.sendMessage("You are already in combat.");
  3560. c.stopMovement();
  3561. c.getCombat().resetPlayerAttack();
  3562. return false;
  3563. }
  3564. }
  3565. }
  3566. return true;
  3567. }
  3568.  
  3569. public boolean checkMultiBarrageReqs(int i) {
  3570. if(Server.playerHandler.players[i] == null) {
  3571. return false;
  3572. }
  3573. if (i == c.playerId)
  3574. return false;
  3575. if (c.inPits && Server.playerHandler.players[i].inPits)
  3576. return true;
  3577. if(!Server.playerHandler.players[i].inWild()) {
  3578. return false;
  3579. }
  3580. if(Config.COMBAT_LEVEL_DIFFERENCE && !c.inFunPk() && !Server.playerHandler.players[i].inFunPk()) {
  3581. int combatDif1 = c.getCombat().getCombatDifference(c.combatLevel, Server.playerHandler.players[i].combatLevel);
  3582. if(combatDif1 > c.wildLevel || combatDif1 > Server.playerHandler.players[i].wildLevel) {
  3583. c.sendMessage("Your combat level difference is too great to attack that player here.");
  3584. return false;
  3585. }
  3586. }
  3587.  
  3588. if(Config.SINGLE_AND_MULTI_ZONES) {
  3589. if(!Server.playerHandler.players[i].inMulti()) { // single combat zones
  3590. if(Server.playerHandler.players[i].underAttackBy != c.playerId && Server.playerHandler.players[i].underAttackBy != 0) {
  3591. return false;
  3592. }
  3593. if(Server.playerHandler.players[i].playerId != c.underAttackBy && c.underAttackBy != 0) {
  3594. c.sendMessage("You are already in combat.");
  3595. return false;
  3596. }
  3597. }
  3598. }
  3599. return true;
  3600. }
  3601.  
  3602. /**
  3603. *Weapon stand, walk, run, etc emotes
  3604. **/
  3605.  
  3606. public void getPlayerAnimIndex(String weaponName){
  3607. c.playerStandIndex = 0x328;
  3608. c.playerTurnIndex = 0x337;
  3609. c.playerWalkIndex = 0x333;
  3610. c.playerTurn180Index = 0x334;
  3611. c.playerTurn90CWIndex = 0x335;
  3612. c.playerTurn90CCWIndex = 0x336;
  3613. c.playerRunIndex = 0x338;
  3614.  
  3615. if(weaponName.contains("halberd") || weaponName.contains("guthan")) {
  3616. c.playerStandIndex = 809;
  3617. c.playerWalkIndex = 1146;
  3618. c.playerRunIndex = 1210;
  3619. return;
  3620. }
  3621. if(weaponName.contains("dharok")) {
  3622. c.playerStandIndex = 0x811;
  3623. c.playerWalkIndex = 0x67F;
  3624. c.playerRunIndex = 0x680;
  3625. return;
  3626. }
  3627. if(weaponName.contains("ahrim")) {
  3628. c.playerStandIndex = 809;
  3629. c.playerWalkIndex = 1146;
  3630. c.playerRunIndex = 1210;
  3631. return;
  3632. }
  3633. if(weaponName.contains("verac")) {
  3634. c.playerStandIndex = 0x328;
  3635. c.playerWalkIndex = 0x333;
  3636. c.playerRunIndex = 824;
  3637. return;
  3638. }
  3639. if (weaponName.contains("longsword") || weaponName.contains("scimitar") || weaponName.contains("silverlight") || weaponName.contains("korasi's")) {
  3640. c.playerStandIndex = 12021;
  3641. c.playerRunIndex = 12023;
  3642. c.playerWalkIndex = 12024;
  3643. return;
  3644. }
  3645. if (weaponName.contains("wand") || weaponName.contains("staff") || weaponName.contains("staff") || weaponName.contains("spear")) {
  3646. c.playerStandIndex = 8980;
  3647. c.playerRunIndex = 1210;
  3648. c.playerWalkIndex = 1146;
  3649. return;
  3650. }
  3651. if(weaponName.contains("karil")) {
  3652. c.playerStandIndex = 2074;
  3653. c.playerWalkIndex = 2076;
  3654. c.playerRunIndex = 2077;
  3655. return;
  3656. }
  3657. if(weaponName.contains("2h sword") || weaponName.contains("godsword") || weaponName.contains("saradomin sw")) {
  3658. c.playerStandIndex = 7047;
  3659. c.playerWalkIndex = 7046;
  3660. c.playerRunIndex = 7039;
  3661. return;
  3662. }
  3663. if(weaponName.contains("bow")) {
  3664. c.playerStandIndex = 808;
  3665. c.playerWalkIndex = 819;
  3666. c.playerRunIndex = 824;
  3667. return;
  3668. }
  3669.  
  3670. switch(c.playerEquipment[c.playerWeapon]) {
  3671. case 18349: // rapier chaotic
  3672. c.playerStandIndex = 12021;
  3673. c.playerWalkIndex = 12024;
  3674. c.playerRunIndex = 12023;
  3675. break;
  3676. case 18353: // maul chaotic
  3677. c.playerStandIndex = 13217;
  3678. c.playerWalkIndex = 13218;
  3679. c.playerRunIndex = 13220;
  3680. break;
  3681. case 4151:
  3682. case 15441: // whip
  3683. case 15442: // whip
  3684. case 15443: // whip
  3685. case 15444: // whip
  3686. c.playerStandIndex = 11973;
  3687. c.playerWalkIndex = 11975;
  3688. c.playerRunIndex = 1661;
  3689. break;
  3690. case 15039:
  3691. c.playerStandIndex = 12000;
  3692. c.playerWalkIndex = 1663;
  3693. c.playerRunIndex = 1664;
  3694. break;
  3695. case 10887:
  3696. c.playerStandIndex = 5869;
  3697. c.playerWalkIndex = 5867;
  3698. c.playerRunIndex = 5868;
  3699. break;
  3700. case 6528:
  3701. c.playerStandIndex = 0x811;
  3702. c.playerWalkIndex = 2064;
  3703. c.playerRunIndex = 1664;
  3704. break;
  3705. case 4153:
  3706. c.playerStandIndex = 1662;
  3707. c.playerWalkIndex = 1663;
  3708. c.playerRunIndex = 1664;
  3709. break;
  3710. case 15241:
  3711. c.playerStandIndex = 12155;
  3712. c.playerWalkIndex = 12154;
  3713. c.playerRunIndex = 12154;
  3714. break;
  3715. case 11694:
  3716. case 11696:
  3717. case 11730:
  3718. case 11698:
  3719. case 11700:
  3720. c.playerStandIndex = 4300;
  3721. c.playerWalkIndex = 4306;
  3722. c.playerRunIndex = 4305;
  3723. break;
  3724. case 1305:
  3725. c.playerStandIndex = 809;
  3726. break;
  3727. }
  3728. }
  3729.  
  3730. /**
  3731. * Weapon emotes
  3732. **/
  3733.  
  3734. public int getWepAnim(String weaponName) {
  3735. if(c.playerEquipment[c.playerWeapon] <= 0) {
  3736. switch(c.fightMode) {
  3737. case 0:
  3738. return 422;
  3739. case 2:
  3740. return 423;
  3741. case 1:
  3742. return 451;
  3743. }
  3744. }
  3745. if(weaponName.contains("knife") || weaponName.contains("dart") || weaponName.contains("javelin") || weaponName.contains("thrownaxe")){
  3746. return 806;
  3747. }
  3748. if(weaponName.contains("halberd")) {
  3749. return 440;
  3750. }
  3751. if(weaponName.startsWith("dragon dagger")) {
  3752. return 402;
  3753. }
  3754. if(weaponName.endsWith("dagger")) {
  3755. return 412;
  3756. }
  3757. if(weaponName.contains("2h sword") || weaponName.contains("godsword") || weaponName.contains("saradomin sword")) {
  3758. switch(c.fightMode) {
  3759. case 0:
  3760. return 7041;
  3761. case 2:
  3762. return 7042;
  3763. case 1:
  3764. return 7048;
  3765. }
  3766. }
  3767. if(weaponName.contains("scimitar") || weaponName.contains("longsword") || weaponName.contains("korasi's")) {
  3768. switch(c.fightMode) {
  3769. case 0:
  3770. return 12029;
  3771. case 1: // New Scimmi models
  3772. return 12029;
  3773. case 2:
  3774. return 12029;
  3775. case 3:
  3776. return 12028;
  3777. }
  3778. }
  3779. if(weaponName.contains("rapier")) {
  3780. switch(c.fightMode) {
  3781. case 0:
  3782. return 386;
  3783. case 1:
  3784. return 386;
  3785. case 2:
  3786. return 386;
  3787. case 3:
  3788. return 386;
  3789. }
  3790. }
  3791. if(weaponName.contains("dharok")) {
  3792. switch(c.fightMode) {
  3793. case 0:
  3794. return 2067;
  3795. case 1:
  3796. return 2067;
  3797. case 2:
  3798. return 2067;
  3799. case 3:
  3800. return 2066;
  3801. }
  3802. }
  3803. if(weaponName.contains("sword")) {
  3804. return 451;
  3805. }
  3806. if(weaponName.contains("karil")) {
  3807. return 2075;
  3808. }
  3809. if(weaponName.contains("chaotic crossbow")) {
  3810. return 4230;
  3811. }
  3812. if(weaponName.contains("bow") && !weaponName.contains("'bow")) {
  3813. return 426;
  3814. }
  3815. if (weaponName.contains("'bow"))
  3816. return 4230;
  3817.  
  3818. switch(c.playerEquipment[c.playerWeapon]) { // if you don't want to use strings
  3819. case 6522:
  3820. return 2614;
  3821. case 13905:
  3822. return 2080;
  3823. case 4153: // granite maul
  3824. return 1665;
  3825. case 4726: // guthan
  3826. return 2080;
  3827. case 13879:
  3828. case 13883:
  3829. return 806;
  3830. case 14484: // Dclaw
  3831. return 393;
  3832. case 15039: // Chaotic maul
  3833. return 2661;
  3834. case 15241:
  3835. return 12153;
  3836. case 4747: // torag
  3837. return 0x814;
  3838. case 4710: // ahrim
  3839. return 406;
  3840. case 18353:
  3841. return 13055;
  3842. case 18349:
  3843. return 386;
  3844. case 4755: // verac
  3845. return 2062;
  3846. case 4734: // karil
  3847. return 2075;
  3848. case 10887:
  3849. return 5865;
  3850. case 4151:
  3851. case 15441: // whip
  3852. case 15442: // whip
  3853. case 15443: // whip
  3854. case 15444: // whip
  3855. return 1658;
  3856. case 6528:
  3857. return 2661;
  3858. default:
  3859. return 451;
  3860. }
  3861. }
  3862.  
  3863. /**
  3864. * Block emotes
  3865. */
  3866. public int getBlockEmote() {
  3867. if (c.playerEquipment[c.playerShield] >= 8844 && c.playerEquipment[c.playerShield] <= 8850) {
  3868. return 4177;
  3869. }
  3870. if (c.playerEquipment[c.playerShield] >= 20072) {
  3871. return 4177;
  3872. }
  3873. switch(c.playerEquipment[c.playerWeapon]) {
  3874.  
  3875. case 19780:
  3876. return 12030;
  3877.  
  3878. case 4755:
  3879. return 2063;
  3880.  
  3881. case 10887:
  3882. return 5866;
  3883.  
  3884. case 4153:
  3885. return 1666;
  3886.  
  3887. case 15241:
  3888. return 12156;
  3889.  
  3890. case 15039:
  3891. return 12004;
  3892.  
  3893. case 18353:
  3894. return 13054;
  3895.  
  3896. case 18349:
  3897. return 13038;
  3898.  
  3899. case 11694:
  3900. case 11698:
  3901. case 11700: // scimmy anim 12030
  3902. case 11696:
  3903. case 11730:
  3904. case 861:
  3905. return -1;
  3906. default:
  3907. return 1156;
  3908. }
  3909. }
  3910.  
  3911. /**
  3912. * Weapon and magic attack speed!
  3913. **/
  3914.  
  3915. public int getAttackDelay(String s) {
  3916. if(c.usingMagic) {
  3917. switch(c.MAGIC_SPELLS[c.spellId][0]) {
  3918. case 12871: // ice blitz
  3919. case 13023: // shadow barrage
  3920. case 12891: // ice barrage
  3921. return 5;
  3922.  
  3923. default:
  3924. return 5;
  3925. }
  3926. }
  3927. if(c.playerEquipment[c.playerWeapon] == -1)
  3928. return 4;//unarmed
  3929.  
  3930. switch (c.playerEquipment[c.playerWeapon]) {
  3931. case 11235:
  3932. case 15701: // dark bow
  3933. case 15702: // dark bow
  3934. case 15703: // dark bow
  3935. case 15704: // dark bow
  3936. return 9;
  3937. case 13879:
  3938. return 8;
  3939. case 15241: // hand cannon
  3940. return 12156;
  3941. case 15037:
  3942. case 11730:
  3943. return 4;
  3944. case 14484:
  3945. return 5;
  3946. case 13883:
  3947. return 6;
  3948. case 10887:
  3949. case 6528:
  3950. case 15039:
  3951. return 7;
  3952. case 13905:
  3953. return 5;
  3954. }
  3955.  
  3956. if(s.endsWith("greataxe"))
  3957. return 7;
  3958. else if(s.equals("torags hammers"))
  3959. return 5;
  3960. else if(s.equals("guthans warspear"))
  3961. return 5;
  3962. else if(s.equals("veracs flail"))
  3963. return 5;
  3964. else if(s.equals("ahrims staff"))
  3965. return 6;
  3966. else if(s.contains("staff")){
  3967. if(s.contains("zamarok") || s.contains("guthix") || s.contains("saradomian") || s.contains("slayer") || s.contains("ancient"))
  3968. return 4;
  3969. else
  3970. return 5;
  3971. } else if(s.contains("bow")){
  3972. if(s.contains("composite") || s.equals("seercull"))
  3973. return 5;
  3974. else if (s.contains("aril"))
  3975. return 4;
  3976. else if(s.contains("Ogre"))
  3977. return 8;
  3978. else if(s.contains("short") || s.contains("hunt") || s.contains("sword"))
  3979. return 4;
  3980. else if(s.contains("long") || s.contains("crystal"))
  3981. return 6;
  3982. else if(s.contains("'bow"))
  3983. return 7;
  3984.  
  3985. return 5;
  3986. }
  3987. else if(s.contains("dagger"))
  3988. return 4;
  3989. else if(s.contains("godsword") || s.contains("2h"))
  3990. return 6;
  3991. else if(s.contains("longsword"))
  3992. return 5;
  3993. else if(s.contains("sword"))
  3994. return 4;
  3995. else if(s.contains("scimitar"))
  3996. return 4;
  3997. else if(s.contains("mace"))
  3998. return 5;
  3999. else if(s.contains("battleaxe"))
  4000. return 6;
  4001. else if(s.contains("pickaxe"))
  4002. return 5;
  4003. else if(s.contains("thrownaxe"))
  4004. return 5;
  4005. else if(s.contains("axe"))
  4006. return 5;
  4007. else if(s.contains("warhammer"))
  4008. return 6;
  4009. else if(s.contains("2h"))
  4010. return 7;
  4011. else if(s.contains("spear"))
  4012. return 5;
  4013. else if(s.contains("claw"))
  4014. return 4;
  4015. else if(s.contains("halberd"))
  4016. return 7;
  4017.  
  4018. //sara sword, 2400ms
  4019. else if(s.equals("granite maul"))
  4020. return 7;
  4021. else if(s.equals("toktz-xil-ak"))//sword
  4022. return 4;
  4023. else if(s.equals("tzhaar-ket-em"))//mace
  4024. return 5;
  4025. else if(s.equals("tzhaar-ket-om"))//maul
  4026. return 7;
  4027. else if(s.equals("toktz-xil-ek"))//knife
  4028. return 4;
  4029. else if(s.equals("toktz-xil-ul"))//rings
  4030. return 4;
  4031. else if(s.equals("toktz-mej-tal"))//staff
  4032. return 6;
  4033. else if(s.contains("whip"))
  4034. return 4;
  4035. else if(s.contains("dart"))
  4036. return 3;
  4037. else if(s.contains("knife"))
  4038. return 3;
  4039. else if(s.contains("javelin"))
  4040. return 6;
  4041. return 5;
  4042. }
  4043. /**
  4044. * How long it takes to hit your enemy
  4045. **/
  4046. public int getHitDelay(String weaponName) {
  4047. if(c.usingMagic) {
  4048. switch(c.MAGIC_SPELLS[c.spellId][0]) {
  4049. case 12891:
  4050. return 4;
  4051. case 12871:
  4052. return 6;
  4053. default:
  4054. return 4;
  4055. }
  4056. } else {
  4057.  
  4058. if(weaponName.contains("knife") || weaponName.contains("dart") || weaponName.contains("javelin") || weaponName.contains("thrownaxe") || c.playerEquipment[c.playerWeapon] == 13879 || c.playerEquipment[c.playerWeapon] == 13883){
  4059. return 3;
  4060. }
  4061. if(weaponName.contains("cross") || weaponName.contains("c'bow") || weaponName.contains("chaotic crossbow")) {
  4062. return 4;
  4063. }
  4064. if(weaponName.contains("bow") && !c.dbowSpec) {
  4065. return 4;
  4066. } else if (c.dbowSpec) {
  4067. return 4;
  4068. }
  4069.  
  4070. switch(c.playerEquipment[c.playerWeapon]) {
  4071. case 6522: // Toktz-xil-ul
  4072. return 3;
  4073.  
  4074.  
  4075. default:
  4076. return 2;
  4077. }
  4078. }
  4079. }
  4080.  
  4081. public int getRequiredDistance() {
  4082. if (c.followId > 0 && c.freezeTimer <= 0 && !c.isMoving)
  4083. return 2;
  4084. else if(c.followId > 0 && c.freezeTimer <= 0 && c.isMoving) {
  4085. return 3;
  4086. } else {
  4087. return 1;
  4088. }
  4089. }
  4090.  
  4091. public boolean usingHally() {
  4092. switch(c.playerEquipment[c.playerWeapon]) {
  4093. case 3190:
  4094. case 3192:
  4095. case 3194:
  4096. case 3196:
  4097. case 3198:
  4098. case 3200:
  4099. case 3202:
  4100. case 3204:
  4101. return true;
  4102.  
  4103. default:
  4104. return false;
  4105. }
  4106. }
  4107.  
  4108. /**
  4109. * Melee
  4110. **/
  4111.  
  4112. public int calculateMeleeAttack() {
  4113. int attackLevel = c.playerLevel[0];
  4114. //2, 5, 11, 18, 19
  4115. if (c.prayerActive[2]) {
  4116. attackLevel += c.getLevelForXP(c.playerXP[c.playerAttack]) * 0.05;
  4117. } else if (c.prayerActive[7]) {
  4118. attackLevel += c.getLevelForXP(c.playerXP[c.playerAttack]) * 0.1;
  4119. } else if (c.prayerActive[15]) {
  4120. attackLevel += c.getLevelForXP(c.playerXP[c.playerAttack]) * 0.15;
  4121. } else if (c.prayerActive[24]) {
  4122. attackLevel += c.getLevelForXP(c.playerXP[c.playerAttack]) * 0.18;
  4123. } else if (c.prayerActive[25]) {
  4124. attackLevel += c.getLevelForXP(c.playerXP[c.playerAttack]) * 0.22;
  4125. } else if (c.curseActive[19]) { // turmoil
  4126. attackLevel += c.getLevelForXP(c.playerXP[c.playerAttack]) * 0.17 + c.getatt;
  4127. }
  4128. if (c.fullVoidEliteMelee() || c.fullVoidMelee() || c.fullStatius() || c.fullVesta() || c.fullTorva())
  4129. attackLevel += c.getLevelForXP(c.playerXP[c.playerAttack]) * 0.2;
  4130. attackLevel *= c.specAccuracy;
  4131. int i = c.playerBonus[bestMeleeAtk()];
  4132. i += c.bonusAttack;
  4133. if (c.playerEquipment[c.playerAmulet] == 11128 && c.playerEquipment[c.playerWeapon] == 6528) {
  4134. i *= 1.30;
  4135. }
  4136. return (int)(attackLevel + (attackLevel * 0.17) + (i + i * 0.05));
  4137. }
  4138. public int bestMeleeAtk()
  4139. {
  4140. if(c.playerBonus[0] > c.playerBonus[1] && c.playerBonus[0] > c.playerBonus[2])
  4141. return 0;
  4142. if(c.playerBonus[1] > c.playerBonus[0] && c.playerBonus[1] > c.playerBonus[2])
  4143. return 1;
  4144. return c.playerBonus[2] <= c.playerBonus[1] || c.playerBonus[2] <= c.playerBonus[0] ? 0 : 2;
  4145. }
  4146.  
  4147. public int calculateMeleeMaxHit() {
  4148. double maxHit = 0;
  4149. int strBonus = c.playerBonus[10];
  4150. int strength = c.playerLevel[2];
  4151. int lvlForXP = c.getLevelForXP(c.playerXP[2]);
  4152. if(c.prayerActive[1]) {
  4153. strength += (int)(lvlForXP * .05);
  4154. } else
  4155. if(c.prayerActive[6]) {
  4156. strength += (int)(lvlForXP * .10);
  4157. } else
  4158. if(c.prayerActive[14]) {
  4159. strength += (int)(lvlForXP * .15);
  4160. } else
  4161. if(c.prayerActive[24]) {
  4162. strength += (int)(lvlForXP * .18);
  4163. } else
  4164. if(c.prayerActive[25]) {
  4165. strength += (int)(lvlForXP * .23);
  4166. }
  4167. if(c.curseActive[10]) { // Leech Attack
  4168. strength += (int)(lvlForXP * .10 + c.getstr);
  4169. }
  4170. if(c.curseActive[13]) { // Leech Defense
  4171. strength += (int)(lvlForXP * .10 + c.getstr);
  4172. }
  4173. if(c.curseActive[14]) { // Leech Strength
  4174. strength += (int)(lvlForXP * .10 + c.getstr);
  4175. }
  4176. if(c.curseActive[11]) { // Leech Ranged
  4177. strength += (int)(lvlForXP * .10 + c.getstr);
  4178. }
  4179. if(c.curseActive[12]) { // Leech Magic
  4180. strength += (int)(lvlForXP * .10 + c.getstr);
  4181. }
  4182. if(c.curseActive[16]) { // Leech Special
  4183. strength += (int)(lvlForXP * .10 + c.getstr);
  4184. }
  4185. if(c.curseActive[19]) { // turmoil
  4186. strength += (int)(lvlForXP * .25 + c.getstr);
  4187. }
  4188. if(c.playerEquipment[c.playerHat] == 2526 && c.playerEquipment[c.playerChest] == 2520 && c.playerEquipment[c.playerLegs] == 2522) {
  4189. maxHit += (maxHit * 10 / 100);
  4190. }
  4191. if(c.playerEquipment[c.playerShield] == 20072) {
  4192. maxHit *= 1.03;
  4193. }
  4194. if(c.fullTorva()) {
  4195. maxHit *= 1.18;
  4196. }
  4197. if(c.fullStatius()) {
  4198. maxHit *= 1.16;
  4199. }
  4200. if(c.fullVesta()) {
  4201. maxHit *= 1.17;
  4202. }
  4203. if (c.fullVoidEliteMelee()) {
  4204. maxHit *= 1.15;
  4205. }
  4206. if (c.fullVoidMelee())
  4207. maxHit = (int)(maxHit * 1.15);
  4208. maxHit += 1.05D + (double)(strBonus * strength) * 0.00175D;
  4209. maxHit += (double)strength * 0.11D;
  4210.  
  4211. if (c.playerEquipment[c.playerWeapon] == 4718 && c.playerEquipment[c.playerHat] == 4716 && c.playerEquipment[c.playerChest] == 4720 && c.playerEquipment[c.playerLegs] == 4722) {
  4212. maxHit += (c.getPA().getLevelForXP(c.playerXP[3]) - c.playerLevel[3]) / 2;
  4213. }
  4214.  
  4215. if (c.specDamage > 1)
  4216. maxHit = (int)(maxHit * c.specDamage);
  4217.  
  4218. if (maxHit < 0)
  4219. maxHit = 1;
  4220.  
  4221. if (c.playerEquipment[c.playerAmulet] == 11128
  4222. && c.playerEquipment[c.playerWeapon] == 6528)
  4223. {
  4224.  
  4225. maxHit *= 1.20;
  4226.  
  4227. }
  4228. return (int)Math.floor(maxHit);
  4229.  
  4230. }
  4231.  
  4232. public int calculateMeleeDefence()
  4233. {
  4234. int defenceLevel = c.playerLevel[1];
  4235. int i = c.playerBonus[bestMeleeDef()];
  4236. if (c.prayerActive[0]) {
  4237. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.05;
  4238. } else if (c.prayerActive[5]) {
  4239. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.1;
  4240. } else if (c.prayerActive[13]) {
  4241. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.15;
  4242. } else if (c.prayerActive[24]) {
  4243. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.2;
  4244. } else if (c.prayerActive[25]) {
  4245. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.25;
  4246. }
  4247. return (int)(defenceLevel + (defenceLevel * 0.15) + (i + i * 0.05));
  4248. }
  4249.  
  4250. public int bestMeleeDef()
  4251. {
  4252. if(c.playerBonus[5] > c.playerBonus[6] && c.playerBonus[5] > c.playerBonus[7])
  4253. return 5;
  4254. if(c.playerBonus[6] > c.playerBonus[5] && c.playerBonus[6] > c.playerBonus[7])
  4255. return 6;
  4256. return c.playerBonus[7] <= c.playerBonus[5] || c.playerBonus[7] <= c.playerBonus[6] ? 5 : 7;
  4257. }
  4258.  
  4259. /**
  4260. * Range
  4261. **/
  4262.  
  4263. public int calculateRangeAttack() {
  4264. int attackLevel = c.playerLevel[4];
  4265. attackLevel *= c.specAccuracy;
  4266. if (c.fullVoidRange() || c.fullPernix() || c.fullVoidEliteRange())
  4267. attackLevel += c.getLevelForXP(c.playerXP[c.playerRanged]) * 0.2;
  4268. if (c.prayerActive[3])
  4269. attackLevel *= 1.05;
  4270. else if (c.prayerActive[11])
  4271. attackLevel *= 1.92;
  4272. else if (c.prayerActive[19])
  4273. attackLevel *= 1.15;
  4274. //dbow spec
  4275. if (c.fullVoidRange() && c.specAccuracy > 1.15) {
  4276. attackLevel *= 1.95;
  4277. }
  4278. if (c.fullVoidRange()) {
  4279. attackLevel *= 1.95;
  4280. }
  4281. if (c.fullVoidEliteRange() && c.specAccuracy > 1.15) {
  4282. attackLevel *= 1.95;
  4283. }
  4284. if (c.fullVoidEliteRange()) {
  4285. attackLevel *= 1.95;
  4286. }
  4287. if (c.zaryteBow()) {
  4288. attackLevel *= 1.95;
  4289. }
  4290. if (c.cCbow()) {
  4291. attackLevel *= 1.96;
  4292. }
  4293. if (c.fullPernix()) {
  4294. attackLevel *= 1.95;
  4295. }
  4296. if (c.faithfulShield()) {
  4297. attackLevel *= 1.30;
  4298. }
  4299. return (int) (attackLevel + (c.playerBonus[4] * 2.15));
  4300. }
  4301.  
  4302. public int calculateRangeDefence() {
  4303. int defenceLevel = c.playerLevel[1];
  4304. if (c.prayerActive[0]) {
  4305. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.05;
  4306. } else if (c.prayerActive[5]) {
  4307. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.1;
  4308. } else if (c.prayerActive[13]) {
  4309. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.17;
  4310. } else if (c.prayerActive[24]) {
  4311. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.2;
  4312. } else if (c.prayerActive[25]) {
  4313. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.25;
  4314. } else if (c.curseActive[19]) { // turmoil
  4315. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.15 + c.getdef;
  4316. }
  4317. return (int) (defenceLevel + c.playerBonus[9] + (c.playerBonus[9] / 2));
  4318. }
  4319.  
  4320. public boolean usingBolts() {
  4321. return c.playerEquipment[c.playerArrows] >= 9130 && c.playerEquipment[c.playerArrows] <= 9145 || c.playerEquipment[c.playerArrows] >= 9230 && c.playerEquipment[c.playerArrows] <= 9245 || c.playerEquipment[c.playerArrows] == 15243;
  4322. }
  4323. public int rangeMaxHit() {
  4324. int rangeLevel = c.playerLevel[4];
  4325. double modifier = 1.0;
  4326. double wtf = c.specDamage;
  4327. int itemUsed = c.usingBow ? c.lastArrowUsed : c.lastWeaponUsed;
  4328. if (c.prayerActive[3])
  4329. modifier += 0.07;
  4330. else if (c.prayerActive[11])
  4331. modifier += 0.19;
  4332. else if (c.prayerActive[19])
  4333. modifier += 0.16;
  4334. if (c.playerEquipment[c.playerWeapon] == 9185)
  4335. modifier += 0.25;
  4336. if (c.playerEquipment[c.playerWeapon] == 18357)
  4337. modifier += 0.28;
  4338. if (c.playerEquipment[c.playerWeapon] == 20172)
  4339. modifier += 0.26;
  4340. if (c.playerEquipment[c.playerAmulet] == 15126)
  4341. modifier += 0.05;
  4342. if (c.fullVoidRange())
  4343. modifier += 0.15;
  4344. if (c.fullVoidEliteRange())
  4345. modifier += 0.16;
  4346. if (c.zaryteBow())
  4347. modifier +=.30;
  4348. if (c.cCbow())
  4349. modifier += .42;
  4350. if (c.faithfulShield())
  4351. modifier +=.06;
  4352. if (c.fullPernix())
  4353. modifier += .20;
  4354. double c = modifier * rangeLevel;
  4355. int rangeStr = getRangeStr(itemUsed);
  4356. double max =(c + 18) * (rangeStr + 64) / 640;
  4357. if (wtf != 1)
  4358. max *= wtf;
  4359. if (max < 1)
  4360. max = 1;
  4361. return (int)max;
  4362. }
  4363.  
  4364. public int getRangeStr(int i) {
  4365. if (i == 4214)
  4366. return 70;
  4367. switch (i) {
  4368. //bronze to rune bolts
  4369. case 877://bronze bolts
  4370. return 10;
  4371. case 9140://iron bolts
  4372. return 46;
  4373. case 9141://steel bolts
  4374. return 64;
  4375. case 9142://mith bolts
  4376. return 82;
  4377. case 9241://emerald bolts e
  4378. return 85;
  4379. case 9240://saphhire bolts e
  4380. return 83;
  4381. case 9143://addy bolts
  4382. return 100;
  4383. case 9243://diamond bolts e
  4384. return 105;
  4385. case 9242://ruby bolts e
  4386. return 103;
  4387. case 9144://rune bolts
  4388. return 115;
  4389. case 9244://dragon bolts e
  4390. return 132;
  4391. case 13882:
  4392. case 13881:
  4393. case 13880:
  4394. case 13879:
  4395. return 170;
  4396. case 13883:
  4397. return 130;
  4398.  
  4399. //bronze to dragon arrows
  4400. case 882:
  4401. return 7;
  4402. case 884:
  4403. return 10;
  4404. case 886:
  4405. return 16;
  4406. case 888:
  4407. return 22;
  4408. case 890:
  4409. return 31;
  4410. case 892:
  4411. case 4740:
  4412. return 35;
  4413. case 11212:
  4414. return 80;
  4415. //knifes
  4416. case 864:
  4417. return 3;
  4418. case 863:
  4419. return 4;
  4420. case 865:
  4421. return 7;
  4422. case 866:
  4423. return 10;
  4424. case 867:
  4425. return 14;
  4426. case 868:
  4427. return 54;
  4428. }
  4429. return 0;
  4430. }
  4431.  
  4432. /*public int rangeMaxHit() {
  4433. int rangehit = 0;
  4434. rangehit += c.playerLevel[4] / 7.5;
  4435. int weapon = c.lastWeaponUsed;
  4436. int Arrows = c.lastArrowUsed;
  4437. if (weapon == 4223) {//Cbow 1/10
  4438. rangehit = 2;
  4439. rangehit += c.playerLevel[4] / 7;
  4440. } else if (weapon == 4222) {//Cbow 2/10
  4441. rangehit = 3;
  4442. rangehit += c.playerLevel[4] / 7;
  4443. } else if (weapon == 4221) {//Cbow 3/10
  4444. rangehit = 3;
  4445. rangehit += c.playerLevel[4] / 6.5;
  4446. } else if (weapon == 4220) {//Cbow 4/10
  4447. rangehit = 4;
  4448. rangehit += c.playerLevel[4] / 6.5;
  4449. } else if (weapon == 4219) {//Cbow 5/10
  4450. rangehit = 4;
  4451. rangehit += c.playerLevel[4] / 6;
  4452. } else if (weapon == 4218) {//Cbow 6/10
  4453. rangehit = 5;
  4454. rangehit += c.playerLevel[4] / 6;
  4455. } else if (weapon == 4217) {//Cbow 7/10
  4456. rangehit = 5;
  4457. rangehit += c.playerLevel[4] / 5.5;
  4458. } else if (weapon == 4216) {//Cbow 8/10
  4459. rangehit = 6;
  4460. rangehit += c.playerLevel[4] / 5.5;
  4461. } else if (weapon == 4215) {//Cbow 9/10
  4462. rangehit = 6;
  4463. rangehit += c.playerLevel[4] / 5;
  4464. } else if (weapon == 4214) {//Cbow Full
  4465. rangehit = 7;
  4466. rangehit += c.playerLevel[4] / 5;
  4467. } else if (weapon == 6522) {
  4468. rangehit = 5;
  4469. rangehit += c.playerLevel[4] / 6;
  4470. } else if (weapon == 9029) {//dragon darts
  4471. rangehit = 8;
  4472. rangehit += c.playerLevel[4] / 10;
  4473. } else if (weapon == 811 || weapon == 868) {//rune darts
  4474. rangehit = 2;
  4475. rangehit += c.playerLevel[4] / 8.5;
  4476. } else if (weapon == 13879) {
  4477. rangehit = 10;
  4478. rangehit += c.playerLevel[4] / 17;
  4479. } else if (weapon == 13880) {
  4480. rangehit = 10;
  4481. rangehit += c.playerLevel[4] / 17;
  4482. } else if (weapon == 13881) {
  4483. rangehit = 10;
  4484. rangehit += c.playerLevel[4] / 17;
  4485. } else if (weapon == 13882) {
  4486. rangehit = 10;
  4487. rangehit += c.playerLevel[4] / 17;
  4488. } else if (weapon == 13883) {
  4489. rangehit = 7;
  4490. rangehit += c.playerLevel[4] / 17;
  4491. } else if (weapon == 20171) {
  4492. rangehit = 11;
  4493. rangehit += c.playerLevel[4] / 17;
  4494. } else if (weapon == 18357) {
  4495. rangehit = 12;
  4496. rangehit += c.playerLevel[4] / 17;
  4497. } else if (weapon == 15241) {
  4498. rangehit = 10;
  4499. rangehit += c.playerLevel[4] / 17;
  4500. } else if (weapon == 810 || weapon == 867) {//adamant darts
  4501. rangehit = 2;
  4502. rangehit += c.playerLevel[4] / 9;
  4503. } else if (weapon == 809 || weapon == 866) {//mithril darts
  4504. rangehit = 2;
  4505. rangehit += c.playerLevel[4] / 9.5;
  4506. } else if (weapon == 808 || weapon == 865) {//Steel darts
  4507. rangehit = 2;
  4508. rangehit += c.playerLevel[4] / 10;
  4509. } else if (weapon == 807 || weapon == 863) {//Iron darts
  4510. rangehit = 2;
  4511. rangehit += c.playerLevel[4] / 10.5;
  4512. } else if (weapon == 806 || weapon == 864) {//Bronze darts
  4513. rangehit = 1;
  4514. rangehit += c.playerLevel[4] / 11;
  4515. } else if (Arrows == 4740 && weapon == 4734) {//BoltRacks
  4516. rangehit = 3;
  4517. rangehit += c.playerLevel[4] / 6;
  4518. } else if (Arrows == 11212) {//dragon arrows
  4519. rangehit = 4;
  4520. rangehit += c.playerLevel[4] / 5.5;
  4521. } else if (Arrows == 892) {//rune arrows
  4522. rangehit = 3;
  4523. rangehit += c.playerLevel[4] / 6;
  4524. } else if (Arrows == 890) {//adamant arrows
  4525. rangehit = 2;
  4526. rangehit += c.playerLevel[4] / 7;
  4527. } else if (Arrows == 888) {//mithril arrows
  4528. rangehit = 2;
  4529. rangehit += c.playerLevel[4] / 7.5;
  4530. } else if (Arrows == 886) {//steel arrows
  4531. rangehit = 2;
  4532. rangehit += c.playerLevel[4] / 8;
  4533. } else if (Arrows == 884) {//Iron arrows
  4534. rangehit = 2;
  4535. rangehit += c.playerLevel[4] / 9;
  4536. } else if (Arrows == 882) {//Bronze arrows
  4537. rangehit = 1;
  4538. rangehit += c.playerLevel[4] / 9.5;
  4539. } else if (Arrows == 9244) {
  4540. rangehit = 8;
  4541. rangehit += c.playerLevel[4] / 3;
  4542. } else if (Arrows == 9139) {
  4543. rangehit = 12;
  4544. rangehit += c.playerLevel[4] / 4;
  4545. } else if (Arrows == 9140) {
  4546. rangehit = 2;
  4547. rangehit += c.playerLevel[4] / 7;
  4548. } else if (Arrows == 9141) {
  4549. rangehit = 3;
  4550. rangehit += c.playerLevel[4] / 6;
  4551. } else if (Arrows == 9142) {
  4552. rangehit = 4;
  4553. rangehit += c.playerLevel[4] / 6;
  4554. } else if (Arrows == 9143) {
  4555. rangehit = 7;
  4556. rangehit += c.playerLevel[4] / 5;
  4557. } else if (Arrows == 9144) {
  4558. rangehit = 7;
  4559. rangehit += c.playerLevel[4] / 4.5;
  4560. }
  4561. int bonus = 0;
  4562. bonus -= rangehit / 10;
  4563. rangehit += bonus;
  4564. if (c.specDamage != 1)
  4565. rangehit *= c.specDamage;
  4566. if (rangehit == 0)
  4567. rangehit++;
  4568. if (c.fullVoidRange()) {
  4569. rangehit *= 1.10;
  4570. }
  4571. if (c.fullVoidEliteRange()) {
  4572. rangehit *= 1.12;
  4573. }
  4574. if (c.prayerActive[3])
  4575. rangehit *= 1.05;
  4576. else if (c.prayerActive[11])
  4577. rangehit *= 1.10;
  4578. else if (c.prayerActive[19])
  4579. rangehit *= 1.15;
  4580. return rangehit;
  4581. }*/
  4582.  
  4583. public boolean properBolts() {
  4584. return c.playerEquipment[c.playerArrows] >= 9140 && c.playerEquipment[c.playerArrows] <= 9144
  4585. || c.playerEquipment[c.playerArrows] >= 9240 && c.playerEquipment[c.playerArrows] <= 9244 || c.playerEquipment[c.playerArrows] == 15243;
  4586. }
  4587.  
  4588. public int correctBowAndArrows() {
  4589. //if (usingBolts())
  4590. //return -1;
  4591. switch(c.playerEquipment[c.playerWeapon]) {
  4592.  
  4593. case 843:
  4594. case 845:
  4595. case 839:
  4596. case 841:
  4597. return 884;
  4598.  
  4599. case 847:
  4600. case 849:
  4601. return 886;
  4602.  
  4603. case 851:
  4604. case 853:
  4605. return 888;
  4606.  
  4607. case 855:
  4608. case 857:
  4609. return 890;
  4610.  
  4611. case 859:
  4612. case 861:
  4613. return 892;
  4614.  
  4615. case 4734:
  4616. case 4935:
  4617. case 4936:
  4618. case 4937:
  4619. return 4740;
  4620.  
  4621. case 11235:
  4622. case 14481:
  4623. case 14482:
  4624. case 20171:
  4625. return 11212;
  4626.  
  4627. case 15241:
  4628. return 15243;
  4629.  
  4630. case 18357:
  4631. return 9244;
  4632. }
  4633. return -1;
  4634. }
  4635.  
  4636. public int getRangeStartGFX() {
  4637. switch(c.rangeItemUsed) {
  4638.  
  4639. case 863:
  4640. return 220;
  4641. case 864:
  4642. return 219;
  4643. case 865:
  4644. return 221;
  4645. case 866: // knives
  4646. return 223;
  4647. case 867:
  4648. return 224;
  4649. case 868:
  4650. return 225;
  4651. case 869:
  4652. return 222;
  4653.  
  4654. case 806:
  4655. return 232;
  4656. case 807:
  4657. return 233;
  4658. case 808:
  4659. return 234;
  4660. case 809: // darts
  4661. return 235;
  4662. case 810:
  4663. return 236;
  4664. case 811:
  4665. return 237;
  4666.  
  4667. case 825:
  4668. return 206;
  4669. case 826:
  4670. return 207;
  4671. case 827: // javelin
  4672. return 208;
  4673. case 828:
  4674. return 209;
  4675. case 829:
  4676. return 210;
  4677. case 830:
  4678. return 211;
  4679.  
  4680. case 800:
  4681. return 42;
  4682. case 801:
  4683. return 43;
  4684. case 802:
  4685. return 44; // axes
  4686. case 803:
  4687. return 45;
  4688. case 804:
  4689. return 46;
  4690. case 805:
  4691. return 48;
  4692.  
  4693. case 882:
  4694. return 19;
  4695.  
  4696. case 884:
  4697. return 18;
  4698.  
  4699. case 886:
  4700. return 20;
  4701.  
  4702. case 888:
  4703. return 21;
  4704.  
  4705. case 890:
  4706. return 22;
  4707.  
  4708. case 892:
  4709. return 24;
  4710.  
  4711. case 11212:
  4712. return 26;
  4713.  
  4714. case 4212:
  4715. case 4214:
  4716. case 4215:
  4717. case 4216:
  4718. case 4217:
  4719. case 4218:
  4720. case 4219:
  4721. case 4220:
  4722. case 4221:
  4723. case 4222:
  4724. case 4223:
  4725. return 250;
  4726.  
  4727. }
  4728. return -1;
  4729. }
  4730.  
  4731. public void drawback() {
  4732. if (c.playerEquipment[c.playerArrows] == 882){
  4733. c.gfx0(18);
  4734. }
  4735. /*else if (playerEquipment[playerWeapon] == 13649){
  4736. javerlin(105, 1190);
  4737. }
  4738. else if (playerEquipment[playerWeapon] == 13650){
  4739. thaxe(105, 1195);
  4740. }*/
  4741. else if (c.playerEquipment[c.playerArrows] == 864){
  4742. c.gfx0(219);
  4743. }
  4744. else if (c.playerEquipment[c.playerArrows] == 863){
  4745. c.gfx0(220);
  4746. }
  4747. else if (c.playerEquipment[c.playerArrows] == 865){
  4748. c.gfx0(221);
  4749. }
  4750. else if (c.playerEquipment[c.playerArrows] == 866){
  4751. c.gfx0(223);
  4752. }
  4753. else if (c.playerEquipment[c.playerArrows] == 867){
  4754. c.gfx0(224);
  4755. }
  4756. else if (c.playerEquipment[c.playerArrows] == 868){
  4757. c.gfx0(225);
  4758. }
  4759. else if (c.playerEquipment[c.playerArrows] == 869){
  4760. c.gfx0(222);
  4761. }
  4762. else if (c.playerEquipment[c.playerArrows] == 884) {
  4763. c.gfx0(19);
  4764. }
  4765. else if (c.playerEquipment[c.playerArrows] == 888) {
  4766. c.gfx0(21);
  4767. }
  4768. else if (c.playerEquipment[c.playerArrows] == 890) {
  4769. c.gfx0(22);
  4770. }
  4771. else if (c.playerEquipment[c.playerArrows] == 11212) {
  4772. c.gfx0(26);
  4773. }
  4774. else if (c.playerEquipment[c.playerArrows] == 892) {
  4775. c.gfx0(24);
  4776.  
  4777. }
  4778. else if (c.playerEquipment[c.playerArrows] == 9244) {
  4779. c.gfx0(28);
  4780.  
  4781. }
  4782. else if (c.playerEquipment[c.playerArrows] == 725) {
  4783. c.gfx0(28);
  4784.  
  4785. }
  4786. else if (c.playerEquipment[c.playerArrows] == 9340) {
  4787. c.gfx0(28);
  4788.  
  4789. }
  4790. }
  4791.  
  4792.  
  4793. public int getRangeProjectileGFX() {
  4794. if (c.dbowSpec) {
  4795. return 1099;
  4796. }
  4797. if(c.bowSpecShot > 0) {
  4798. switch(c.rangeItemUsed) {
  4799. default:
  4800. return 249;
  4801. }
  4802. }
  4803. if (c.playerEquipment[c.playerWeapon] == 9185 || c.playerEquipment[c.playerWeapon] == 18357)
  4804. return 27;
  4805. switch(c.rangeItemUsed) {
  4806. case 13883:
  4807. return 1839;
  4808. case 13882:
  4809. case 13881:
  4810. case 13880:
  4811. case 13879:
  4812. return 1837;
  4813. case 863:
  4814. return 213;
  4815. case 864:
  4816. return 212;
  4817. case 865:
  4818. return 214;
  4819. case 866: // knives
  4820. return 216;
  4821. case 867:
  4822. return 217;
  4823. case 868:
  4824. return 218;
  4825. case 869:
  4826. return 215;
  4827.  
  4828. case 806:
  4829. return 226;
  4830. case 807:
  4831. return 227;
  4832. case 808:
  4833. return 228;
  4834. case 809: // darts
  4835. return 229;
  4836. case 810:
  4837. return 230;
  4838. case 811:
  4839. return 231;
  4840.  
  4841. case 825:
  4842. return 200;
  4843. case 826:
  4844. return 201;
  4845. case 827: // javelin
  4846. return 202;
  4847. case 828:
  4848. return 203;
  4849. case 829:
  4850. return 204;
  4851. case 830:
  4852. return 205;
  4853.  
  4854. case 6522: // Toktz-xil-ul
  4855. return 442;
  4856.  
  4857. case 800:
  4858. return 36;
  4859. case 801:
  4860. return 35;
  4861. case 802:
  4862. return 37; // axes
  4863. case 803:
  4864. return 38;
  4865. case 804:
  4866. return 39;
  4867. case 805:
  4868. return 40;
  4869.  
  4870. case 882:
  4871. return 10;
  4872.  
  4873. case 884:
  4874. return 9;
  4875.  
  4876. case 886:
  4877. return 11;
  4878.  
  4879. case 888:
  4880. return 12;
  4881.  
  4882. case 890:
  4883. return 13;
  4884.  
  4885. case 892:
  4886. return 15;
  4887.  
  4888. case 11212:
  4889. return 17;
  4890.  
  4891. case 4740: // bolt rack
  4892. return 27;
  4893.  
  4894.  
  4895.  
  4896. case 4212:
  4897. case 4214:
  4898. case 4215:
  4899. case 4216:
  4900. case 4217:
  4901. case 4218:
  4902. case 4219:
  4903. case 4220:
  4904. case 4221:
  4905. case 4222:
  4906. case 4223:
  4907. case 20171:
  4908. case 18357:
  4909. case 15241:
  4910. return 249;
  4911.  
  4912.  
  4913. }
  4914. return -1;
  4915. }
  4916.  
  4917. public int getProjectileSpeed() {
  4918. if (c.dbowSpec)
  4919. return 100;
  4920. return 70;
  4921. }
  4922.  
  4923. public int getProjectileShowDelay() {
  4924. switch(c.playerEquipment[c.playerWeapon]) {
  4925. case 863:
  4926. case 864:
  4927. case 865:
  4928. case 866: // knives
  4929. case 867:
  4930. case 868:
  4931. case 869:
  4932.  
  4933. case 806:
  4934. case 807:
  4935. case 808:
  4936. case 809: // darts
  4937. case 810:
  4938. case 811:
  4939.  
  4940. case 825:
  4941. case 826:
  4942. case 827: // javelin
  4943. case 828:
  4944. case 829:
  4945. case 830:
  4946.  
  4947. case 800:
  4948. case 801:
  4949. case 802:
  4950. case 803: // axes
  4951. case 804:
  4952. case 805:
  4953.  
  4954. case 4734:
  4955. case 9185:
  4956. case 18357:
  4957. case 4935:
  4958. case 4936:
  4959. case 4937:
  4960. case 20172:
  4961. case 15241:
  4962. return 15;
  4963.  
  4964.  
  4965. default:
  4966. return 5;
  4967. }
  4968. }
  4969.  
  4970. /**
  4971. * Mage
  4972. **/
  4973.  
  4974. public static int finalMagicDamage(Client c) {
  4975. double damage = c.MAGIC_SPELLS[c.oldSpellId][6];
  4976. double damageMultiplier = 1;
  4977. if (c.playerLevel[c.playerMagic] > c.getLevelForXP(c.playerXP[6])
  4978. && c.getLevelForXP(c.playerXP[6]) >= 95)
  4979. damageMultiplier += .03 * (c.playerLevel[c.playerMagic] - 99);
  4980. else
  4981. damageMultiplier = 1;
  4982. switch (c.playerEquipment[c.playerWeapon]) {
  4983. case 18371: // Gravite Staff
  4984. damageMultiplier += .05;
  4985. break;
  4986. case 4675: // Ancient Staff
  4987. case 4710: // Ahrim's Staff
  4988. case 4862: // Ahrim's Staff
  4989. case 4864: // Ahrim's Staff
  4990. case 4865: // Ahrim's Staff
  4991. case 6914: // Master Wand
  4992. case 8841: // Void Knight Mace
  4993. case 13867: // Zuriel's Staff
  4994. case 13869: // Zuriel's Staff (Deg)
  4995. damageMultiplier += .10;
  4996. break;
  4997. case 15486: // Staff of Light
  4998. damageMultiplier += .15;
  4999. break;
  5000. case 18355: // Chaotic Staff
  5001. damageMultiplier += .20;
  5002. break;
  5003. }
  5004. switch (c.playerEquipment[c.playerAmulet]) {
  5005. case 18333: // Arcane Pulse
  5006. damageMultiplier += .05;
  5007. break;
  5008. case 18334:// Arcane Blast
  5009. damageMultiplier += .10;
  5010. break;
  5011. case 18335:// Arcane Stream
  5012. damageMultiplier += .15;
  5013. break;
  5014. }
  5015. switch (c.playerEquipment[c.playerHat]) {
  5016. case 20159: // Virtus Mask
  5017. damageMultiplier += .03;
  5018. break;
  5019. }
  5020. switch (c.playerEquipment[c.playerChest]) {
  5021. case 20159: // Virtus Body
  5022. damageMultiplier += .06;
  5023. break;
  5024. }
  5025. switch (c.playerEquipment[c.playerLegs]) {
  5026. case 20159: // Virtus Legs
  5027. damageMultiplier += .04;
  5028. break;
  5029. }
  5030. damage *= damageMultiplier;
  5031. return (int) damage;
  5032. }
  5033.  
  5034. /**
  5035. * Magic
  5036. **/
  5037.  
  5038. public int mageAtk()
  5039. {
  5040. int attackLevel = c.playerLevel[6];
  5041. /*if (c.playerEquipment[c.playerWeapon] == 15486)
  5042. attackLevel += 0.15;*/
  5043. if (c.fullVoidMage() || c.fullVoidEliteMage())
  5044. attackLevel += c.getLevelForXP(c.playerXP[6]) * 0.2;
  5045. if (c.prayerActive[4])
  5046. attackLevel *= 1.05;
  5047. else if (c.prayerActive[12])
  5048. attackLevel *= 1.10;
  5049. else if (c.prayerActive[20])
  5050. attackLevel *= 1.15;
  5051. return (int) (attackLevel + (c.playerBonus[3] * 2));
  5052. }
  5053. public int mageDef()
  5054. {
  5055. int defenceLevel = c.playerLevel[1]/2 + c.playerLevel[6]/2;
  5056. if (c.prayerActive[0]) {
  5057. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.05;
  5058. } else if (c.prayerActive[3]) {
  5059. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.1;
  5060. } else if (c.prayerActive[9]) {
  5061. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.15;
  5062. } else if (c.prayerActive[18]) {
  5063. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.2;
  5064. } else if (c.prayerActive[19]) {
  5065. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.25;
  5066. }
  5067. return (int) (defenceLevel + c.playerBonus[8] + (c.playerBonus[8] / 3));
  5068. }
  5069.  
  5070. public boolean wearingStaff(int runeId) {
  5071. int wep = c.playerEquipment[c.playerWeapon];
  5072. switch (runeId) {
  5073. case 554:
  5074. if (wep == 1387)
  5075. return true;
  5076. break;
  5077. case 555:
  5078. if (wep == 1383)
  5079. return true;
  5080. break;
  5081. case 556:
  5082. if (wep == 1381)
  5083. return true;
  5084. break;
  5085. case 557:
  5086. if (wep == 1385)
  5087. return true;
  5088. break;
  5089. }
  5090. return false;
  5091. }
  5092.  
  5093. public boolean checkMagicReqs(int spell) {
  5094. if(c.usingMagic && Config.RUNES_REQUIRED) { // check for runes
  5095. if((!c.getItems().playerHasItem(c.MAGIC_SPELLS[spell][8], c.MAGIC_SPELLS[spell][9]) && !wearingStaff(c.MAGIC_SPELLS[spell][8])) ||
  5096. (!c.getItems().playerHasItem(c.MAGIC_SPELLS[spell][10], c.MAGIC_SPELLS[spell][11]) && !wearingStaff(c.MAGIC_SPELLS[spell][10])) ||
  5097. (!c.getItems().playerHasItem(c.MAGIC_SPELLS[spell][12], c.MAGIC_SPELLS[spell][13]) && !wearingStaff(c.MAGIC_SPELLS[spell][12])) ||
  5098. (!c.getItems().playerHasItem(c.MAGIC_SPELLS[spell][14], c.MAGIC_SPELLS[spell][15]) && !wearingStaff(c.MAGIC_SPELLS[spell][14]))){
  5099. c.sendMessage("You don't have the required runes to cast this spell.");
  5100. return false;
  5101. }
  5102. }
  5103.  
  5104. if(c.usingMagic && c.playerIndex > 0) {
  5105. if(Server.playerHandler.players[c.playerIndex] != null) {
  5106. for(int r = 0; r < c.REDUCE_SPELLS.length; r++){ // reducing spells, confuse etc
  5107. if(Server.playerHandler.players[c.playerIndex].REDUCE_SPELLS[r] == c.MAGIC_SPELLS[spell][0]) {
  5108. c.reduceSpellId = r;
  5109. if((System.currentTimeMillis() - Server.playerHandler.players[c.playerIndex].reduceSpellDelay[c.reduceSpellId]) > Server.playerHandler.players[c.playerIndex].REDUCE_SPELL_TIME[c.reduceSpellId]) {
  5110. Server.playerHandler.players[c.playerIndex].canUseReducingSpell[c.reduceSpellId] = true;
  5111. } else {
  5112. Server.playerHandler.players[c.playerIndex].canUseReducingSpell[c.reduceSpellId] = false;
  5113. }
  5114. break;
  5115. }
  5116. }
  5117. if(!Server.playerHandler.players[c.playerIndex].canUseReducingSpell[c.reduceSpellId]) {
  5118. c.sendMessage("That player is currently immune to this spell.");
  5119. c.usingMagic = false;
  5120. c.stopMovement();
  5121. resetPlayerAttack();
  5122. return false;
  5123. }
  5124. }
  5125. }
  5126.  
  5127. int staffRequired = getStaffNeeded();
  5128. if(c.usingMagic && staffRequired > 0 && Config.RUNES_REQUIRED) { // staff required
  5129. if(c.playerEquipment[c.playerWeapon] != staffRequired) {
  5130. c.sendMessage("You need a "+c.getItems().getItemName(staffRequired).toLowerCase()+" to cast this spell.");
  5131. return false;
  5132. }
  5133. }
  5134.  
  5135. if(c.usingMagic && Config.MAGIC_LEVEL_REQUIRED) { // check magic level
  5136. if(c.playerLevel[6] < c.MAGIC_SPELLS[spell][1]) {
  5137. c.sendMessage("You need to have a magic level of " +c.MAGIC_SPELLS[spell][1]+" to cast this spell.");
  5138. return false;
  5139. }
  5140. }
  5141. if(c.usingMagic && Config.RUNES_REQUIRED) {
  5142. if(c.MAGIC_SPELLS[spell][8] > 0) { // deleting runes
  5143. if (!wearingStaff(c.MAGIC_SPELLS[spell][8]))
  5144. c.getItems().deleteItem(c.MAGIC_SPELLS[spell][8], c.getItems().getItemSlot(c.MAGIC_SPELLS[spell][8]), c.MAGIC_SPELLS[spell][9]);
  5145. }
  5146. if(c.MAGIC_SPELLS[spell][10] > 0) {
  5147. if (!wearingStaff(c.MAGIC_SPELLS[spell][10]))
  5148. c.getItems().deleteItem(c.MAGIC_SPELLS[spell][10], c.getItems().getItemSlot(c.MAGIC_SPELLS[spell][10]), c.MAGIC_SPELLS[spell][11]);
  5149. }
  5150. if(c.MAGIC_SPELLS[spell][12] > 0) {
  5151. if (!wearingStaff(c.MAGIC_SPELLS[spell][12]))
  5152. c.getItems().deleteItem(c.MAGIC_SPELLS[spell][12], c.getItems().getItemSlot(c.MAGIC_SPELLS[spell][12]), c.MAGIC_SPELLS[spell][13]);
  5153. }
  5154. if(c.MAGIC_SPELLS[spell][14] > 0) {
  5155. if (!wearingStaff(c.MAGIC_SPELLS[spell][14]))
  5156. c.getItems().deleteItem(c.MAGIC_SPELLS[spell][14], c.getItems().getItemSlot(c.MAGIC_SPELLS[spell][14]), c.MAGIC_SPELLS[spell][15]);
  5157. }
  5158. }
  5159. return true;
  5160. }
  5161.  
  5162.  
  5163. public int getFreezeTime() {
  5164. switch(c.MAGIC_SPELLS[c.oldSpellId][0]) {
  5165. case 1572:
  5166. case 12861: // ice rush
  5167. return 10;
  5168.  
  5169. case 1582:
  5170. case 12881: // ice burst
  5171. return 17;
  5172.  
  5173. case 1592:
  5174. case 12871: // ice blitz
  5175. return 25;
  5176.  
  5177. case 12891: // ice barrage
  5178. return 33;
  5179.  
  5180. default:
  5181. return 0;
  5182. }
  5183. }
  5184.  
  5185. public void freezePlayer(int i) {
  5186.  
  5187.  
  5188. }
  5189.  
  5190. public int getStartHeight() {
  5191. switch(c.MAGIC_SPELLS[c.spellId][0]) {
  5192. case 1562: // stun
  5193. return 25;
  5194.  
  5195. case 12939:// smoke rush
  5196. return 35;
  5197.  
  5198. case 12987: // shadow rush
  5199. return 38;
  5200.  
  5201. case 12861: // ice rush
  5202. return 15;
  5203.  
  5204. case 12951: // smoke blitz
  5205. return 38;
  5206.  
  5207. case 12999: // shadow blitz
  5208. return 25;
  5209.  
  5210. case 12911: // blood blitz
  5211. return 25;
  5212.  
  5213. default:
  5214. return 43;
  5215. }
  5216. }
  5217.  
  5218.  
  5219.  
  5220. public int getEndHeight() {
  5221. switch(c.MAGIC_SPELLS[c.spellId][0]) {
  5222. case 1562: // stun
  5223. return 10;
  5224.  
  5225. case 12939: // smoke rush
  5226. return 20;
  5227.  
  5228. case 12987: // shadow rush
  5229. return 28;
  5230.  
  5231. case 12861: // ice rush
  5232. return 10;
  5233.  
  5234. case 12951: // smoke blitz
  5235. return 28;
  5236.  
  5237. case 12999: // shadow blitz
  5238. return 15;
  5239.  
  5240. case 12911: // blood blitz
  5241. return 10;
  5242.  
  5243. default:
  5244. return 31;
  5245. }
  5246. }
  5247.  
  5248. public int getStartDelay() {
  5249. if(c.playerEquipment[c.playerWeapon] == 15241)
  5250. return 30;
  5251. switch(c.MAGIC_SPELLS[c.spellId][0]) {
  5252. case 1539:
  5253. return 60;
  5254.  
  5255. default:
  5256. return 53;
  5257. }
  5258. }
  5259.  
  5260. public int getStaffNeeded() {
  5261. switch(c.MAGIC_SPELLS[c.spellId][0]) {
  5262. case 1539:
  5263. return 1409;
  5264.  
  5265. case 12037:
  5266. return 4170;
  5267.  
  5268. case 1190:
  5269. return 2415;
  5270.  
  5271. case 1191:
  5272. return 2416;
  5273.  
  5274. case 1192:
  5275. return 2417;
  5276.  
  5277. default:
  5278. return 0;
  5279. }
  5280. }
  5281.  
  5282. public boolean godSpells() {
  5283. switch(c.MAGIC_SPELLS[c.spellId][0]) {
  5284. case 1190:
  5285. return true;
  5286.  
  5287. case 1191:
  5288. return true;
  5289.  
  5290. case 1192:
  5291. return true;
  5292.  
  5293. default:
  5294. return false;
  5295. }
  5296. }
  5297.  
  5298. public int getEndGfxHeight() {
  5299. switch(c.MAGIC_SPELLS[c.oldSpellId][0]) {
  5300. case 12987:
  5301. case 12901:
  5302. case 12861:
  5303. case 12445:
  5304. case 1192:
  5305. case 13011:
  5306. case 12919:
  5307. case 12881:
  5308. case 12999:
  5309. case 12911:
  5310. case 12871:
  5311. case 13023:
  5312. case 12929:
  5313. case 12891:
  5314. return 0;
  5315.  
  5316. default:
  5317. return 100;
  5318. }
  5319. }
  5320.  
  5321. public int getStartGfxHeight() {
  5322. switch(c.MAGIC_SPELLS[c.spellId][0]) {
  5323. case 12871:
  5324. case 12891:
  5325. return 0;
  5326.  
  5327. default:
  5328. return 100;
  5329. }
  5330. }
  5331. /*public void handleDfs() {
  5332. if (System.currentTimeMillis() - c.dfsDelay > 30000) {
  5333. if(c.dfsCount == 0) {
  5334. c.sendMessage("Your shield has no charges left.");
  5335. return;
  5336. }
  5337. if (c.playerIndex > 0 && Server.playerHandler.players[c.playerIndex] != null) {
  5338. int damage = Misc.random(15) + 5;
  5339. c.startAnimation(2836);
  5340. c.gfx0(600);
  5341. Server.playerHandler.players[c.playerIndex].playerLevel[3] -= damage;
  5342. Server.playerHandler.players[c.playerIndex].hitDiff2 = damage;
  5343. Server.playerHandler.players[c.playerIndex].hitUpdateRequired2 = true;
  5344. Server.playerHandler.players[c.playerIndex].updateRequired = true;
  5345. c.dfsDelay = System.currentTimeMillis();
  5346. } else {
  5347. c.sendMessage("I should be in combat before using this.");
  5348. }
  5349. } else {
  5350. c.sendMessage("My shield hasn't finished recharging yet.");
  5351. }
  5352. }*/
  5353.  
  5354.  
  5355.  
  5356. public void handleDfs() {
  5357. final Player opp = Server.playerHandler.players[c.playerIndex];
  5358. if (opp == null)
  5359. return;
  5360. if (System.currentTimeMillis() - c.dfsDelay > 30000) {
  5361. if(c.dfsCount == 0) {
  5362. c.sendMessage("Your shield has no charges left.");
  5363. return;
  5364. }
  5365. if (c.playerIndex > 0 && Server.playerHandler.players[c.playerIndex] != null) {
  5366. c.projectileStage = 2;
  5367. final int pX = c.getX();
  5368. final int pY = c.getY();
  5369. final int oX = opp.getX();
  5370. final int oY = opp.getY();
  5371. final int offX = (pY - oY)* -1;
  5372. final int offY = (pX - oX)* -1;
  5373. c.startAnimation(6696);
  5374. c.gfx0(1165);
  5375. c.dfsCount -= 1;
  5376. EventManager.getSingleton().addEvent(new Event() {
  5377. int damage = (int)Math.round(Math.random() * 25);
  5378. public void execute(EventContainer b) {
  5379. if (opp != null) {
  5380. opp.gfx100(1167);
  5381. if (opp.playerLevel[3] - damage < 0) {
  5382. damage = opp.playerLevel[3];
  5383. }
  5384. opp.playerLevel[3] -= damage;
  5385. opp.hitDiff2 = damage;
  5386. opp.hitUpdateRequired2 = true;
  5387. opp.updateRequired = true;
  5388. }
  5389. b.stop();
  5390. }
  5391. }, 1700);
  5392. EventManager.getSingleton().addEvent(new Event() {
  5393. public void execute(EventContainer b) {
  5394. if (c.playerIndex != 0)
  5395. c.getPA().createPlayersProjectile2(pX, pY, offX, offY, 50, 50, 1166, 30, 30, - c.playerIndex - 1, 30, 5);
  5396. b.stop();
  5397. }
  5398. }, 1000);
  5399. c.dfsDelay = System.currentTimeMillis();
  5400. }
  5401. }
  5402. }
  5403. /*public void handleDfsNPC() {
  5404. if (System.currentTimeMillis() - c.dfsDelay > 30000) {
  5405. if(c.dfsCount == 0) {
  5406. c.sendMessage("Your shield has no charges left.");
  5407. return;
  5408. }
  5409. if (c.npcIndex > 0 && Server.npcHandler.npcs[c.npcIndex] != null) {
  5410. int damage = Misc.random(25) + 5;
  5411. c.dfsCount -= 1;
  5412. c.startAnimation(2836);
  5413. c.gfx0(600);
  5414. Server.npcHandler.npcs[c.npcIndex].HP -= damage;
  5415. Server.npcHandler.npcs[c.npcIndex].hitDiff2 = damage;
  5416. Server.npcHandler.npcs[c.npcIndex].hitUpdateRequired2 = true;
  5417. Server.npcHandler.npcs[c.npcIndex].updateRequired = true;
  5418. c.dfsDelay = System.currentTimeMillis();
  5419. } else {
  5420. c.sendMessage("I should be in combat before using this.");
  5421. }
  5422. } else {
  5423. c.sendMessage("My shield hasn't finished recharging yet.");
  5424. }
  5425. }*/
  5426. public void handleDfsNPC() {
  5427. try {
  5428. if(c.npcIndex > 0) {
  5429. if(c.dfsCount == 0) {
  5430. c.sendMessage("Your shield has no charges left.");
  5431. return;
  5432. }
  5433. if(Server.npcHandler.npcs[c.npcIndex] != null) {
  5434. c.projectileStage = 2;
  5435. final int pX = c.getX();
  5436. final int pY = c.getY();
  5437. final int nX = Server.npcHandler.npcs[c.npcIndex].getX();
  5438. final int nY = Server.npcHandler.npcs[c.npcIndex].getY();
  5439. final int offX = (pY - nY)* -1;
  5440. final int offY = (pX - nX)* -1;
  5441. if (System.currentTimeMillis() - c.dfsDelay > 30000) {
  5442. if (c.npcIndex > 0 && Server.npcHandler.npcs[c.npcIndex] != null) {
  5443. final int damage = Misc.random(15) + 10;
  5444. c.startAnimation(6696);
  5445. c.gfx0(1165);
  5446. c.dfsCount -= 1;
  5447. Server.npcHandler.npcs[c.npcIndex].hitUpdateRequired2 = true;
  5448. Server.npcHandler.npcs[c.npcIndex].updateRequired = true;
  5449. Server.npcHandler.npcs[c.npcIndex].hitDiff2 = damage;
  5450. Server.npcHandler.npcs[c.npcIndex].HP -= damage;
  5451. Server.npcHandler.npcs[c.npcIndex].gfx100(1167);
  5452. EventManager.getSingleton().addEvent(new Event() {
  5453. public void execute(EventContainer b) {
  5454. c.getPA().createPlayersProjectile(pX, pY, offX, offY, 50, 50, 1166, 31, 35, - c.npcIndex - 1, 30);
  5455. b.stop();
  5456. }
  5457. }, 1000);
  5458. if(Server.npcHandler.npcs[c.npcIndex].isDead == true) {
  5459. c.sendMessage("This NPC is already dead!");
  5460. return;
  5461. }
  5462. c.dfsDelay = System.currentTimeMillis();
  5463. } else {
  5464. c.sendMessage("I should be in combat before using this.");
  5465. }
  5466. } else {
  5467. c.sendMessage("My shield hasn't finished recharging yet.");
  5468. } }
  5469. }
  5470. }
  5471. catch (Exception e)
  5472. {
  5473. }
  5474. }
  5475.  
  5476. public void handleZerker() {
  5477.  
  5478. if(c.isDonator == 1){
  5479. if (System.currentTimeMillis() - c.dfsDelay > 60000) {
  5480. if (c.playerIndex > 0 && Server.playerHandler.players[c.playerIndex] != null) {
  5481. int damage = Misc.random(10) + 7;
  5482. c.startAnimation(369);
  5483. c.gfx0(369);
  5484. Server.playerHandler.players[c.playerIndex].playerLevel[3] -= damage;
  5485. Server.playerHandler.players[c.playerIndex].hitDiff2 = damage;
  5486. c.forcedText = "Feel the power of the Berserker Ring!";
  5487. Server.playerHandler.players[c.playerIndex].hitUpdateRequired2 = true;
  5488. Server.playerHandler.players[c.playerIndex].updateRequired = true;
  5489. c.dfsDelay = System.currentTimeMillis();
  5490. } else {
  5491. c.sendMessage("I should be in combat before using this.");
  5492. }
  5493. } else {
  5494. c.sendMessage("My ring hasn't finished recharging yet (60 Seconds)");
  5495. }if (c.isDonator == 0)
  5496. c.sendMessage("Only Donators can use the ring's Special attack");
  5497. }
  5498. }
  5499. public void handleWarrior() {
  5500. if(c.isDonator == 1){
  5501. if (System.currentTimeMillis() - c.dfsDelay > 60000) {
  5502. if (c.playerIndex > 0 && Server.playerHandler.players[c.playerIndex] != null) {
  5503. int damage = Misc.random(10) + 7;
  5504. c.startAnimation(369);
  5505. c.gfx0(369);
  5506. Server.playerHandler.players[c.playerIndex].playerLevel[3] -= damage;
  5507. c.forcedText = "Feel the power of the Warrior Ring!";
  5508. Server.playerHandler.players[c.playerIndex].hitDiff2 = damage;
  5509. Server.playerHandler.players[c.playerIndex].hitUpdateRequired2 = true;
  5510. Server.playerHandler.players[c.playerIndex].updateRequired = true;
  5511. c.dfsDelay = System.currentTimeMillis();
  5512. } else {
  5513. c.sendMessage("I should be in combat before using this.");
  5514. }
  5515. } else {
  5516. c.sendMessage("My ring hasn't finished recharging yet (60 Seconds)");
  5517. }if (c.isDonator == 0)
  5518. c.sendMessage("Only Donators can use the ring's Special attack");
  5519. }
  5520. }
  5521.  
  5522. public void handleSeers() {
  5523. /*
  5524.  
  5525. c.castingMagic = true;
  5526. if(c.isDonator == 1){
  5527. if (System.currentTimeMillis() - c.dfsDelay > 60000) {
  5528. if (c.playerIndex > 0 && Server.playerHandler.players[c.playerIndex] != null) {
  5529. int damage = Misc.random(10) + 7;
  5530. c.startAnimation(1979);
  5531. Server.playerHandler.players[c.playerIndex].gfx0(369);
  5532. c.gfx0(368);
  5533. Server.playerHandler.players[c.playerIndex].freezeTimer = 15;
  5534. Server.playerHandler.players[c.playerIndex].resetWalkingQueue();
  5535. Server.playerHandler.players[c.playerIndex].frozenBy = c.playerId;
  5536. Server.playerHandler.players[c.playerIndex].playerLevel[3] -= damage;
  5537. c.forcedText = ("Feel the power of the Seers Ring!");
  5538. Server.playerHandler.players[c.playerIndex].hitDiff2 = damage;
  5539.  
  5540. Server.playerHandler.players[c.playerIndex].hitUpdateRequired2 = true;
  5541. Server.playerHandler.players[c.playerIndex].updateRequired = true;
  5542. c.dfsDelay = System.currentTimeMillis();
  5543. } else {
  5544. c.sendMessage("I should be in combat before using this.");
  5545. }
  5546. } else {
  5547. c.sendMessage("My ring hasn't finished recharging yet (60 Seconds)");
  5548. }if (c.isDonator == 0)
  5549. */
  5550.  
  5551. }
  5552.  
  5553. public void Zammybook() {
  5554. c.startAnimation(1670);
  5555. EventManager.getSingleton().addEvent(new Event() {
  5556. public void execute(EventContainer b) {
  5557. c.forcedChatUpdateRequired = true;
  5558. c.updateRequired = true;
  5559. c.forcedText = ("Two great warriors, joined by hand,");
  5560. b.stop();
  5561. }
  5562. }, 400);
  5563. EventManager.getSingleton().addEvent(new Event() {
  5564. public void execute(EventContainer b) {
  5565. c.forcedText = ("to spread destruction across the land.");
  5566. c.forcedChatUpdateRequired = true;
  5567. c.updateRequired = true;
  5568. b.stop();
  5569. }
  5570. }, 1200);
  5571. EventManager.getSingleton().addEvent(new Event() {
  5572. public void execute(EventContainer b) {
  5573. c.forcedText = ("In Zamorak's name, now two are one.");
  5574. c.forcedChatUpdateRequired = true;
  5575. c.updateRequired = true;
  5576. b.stop();
  5577. }
  5578. }, 1900);
  5579.  
  5580.  
  5581. }
  5582.  
  5583. public void handleArcher() {
  5584. if(c.isDonator == 1){
  5585. if (System.currentTimeMillis() - c.dfsDelay > 60000) {
  5586. if (c.playerIndex > 0 && Server.playerHandler.players[c.playerIndex] != null) {
  5587. int damage = Misc.random(10) + 7;
  5588. c.startAnimation(369);
  5589. c.gfx0(369);
  5590. Server.playerHandler.players[c.playerIndex].playerLevel[3] -= damage;
  5591. Server.playerHandler.players[c.playerIndex].hitDiff2 = damage;
  5592. c.forcedText = "Feel the power of the Archer Ring!";
  5593. Server.playerHandler.players[c.playerIndex].hitUpdateRequired2 = true;
  5594. Server.playerHandler.players[c.playerIndex].updateRequired = true;
  5595. c.dfsDelay = System.currentTimeMillis();
  5596. } else {
  5597. c.sendMessage("I should be in combat before using this.");
  5598. }
  5599. } else {
  5600. c.sendMessage("My ring hasn't finished recharging yet (60 Seconds)");
  5601. }if (c.isDonator == 0)
  5602. c.sendMessage("Only Donators can use the ring's Special attack");
  5603. }
  5604. }
  5605.  
  5606. public void applyRecoil(int damage, int i) {
  5607. if (damage > 0 && Server.playerHandler.players[i].playerEquipment[c.playerRing] == 2550) {
  5608. int recDamage = damage/10 + 1;
  5609. if (!c.getHitUpdateRequired()) {
  5610. c.setHitDiff(recDamage);
  5611. removeRecoil(c);
  5612. c.recoilHits = recDamage;
  5613. c.setHitUpdateRequired(true);
  5614. } else if (!c.getHitUpdateRequired2()) {
  5615. c.setHitDiff2(recDamage);
  5616. c.setHitUpdateRequired2(true);
  5617. }
  5618. c.dealDamage(recDamage);
  5619. c.updateRequired = true;
  5620. }
  5621. }
  5622.  
  5623. public void Deflect(int damage, int i) {
  5624. if (damage > 0 && Server.playerHandler.players[i].curseActive[7] || Server.playerHandler.players[i].curseActive[8] || Server.playerHandler.players[i].curseActive[9]) {
  5625. int recDamage = damage/6;
  5626. if (!c.getHitUpdateRequired()) {
  5627. c.setHitDiff(recDamage);
  5628. c.recoilHits = recDamage;
  5629. c.setHitUpdateRequired(true);
  5630. } else if (!c.getHitUpdateRequired2()) {
  5631. c.setHitDiff2(recDamage);
  5632. c.setHitUpdateRequired2(true);
  5633. }
  5634. c.dealDamage(recDamage);
  5635. c.updateRequired = true;
  5636. }
  5637. }
  5638.  
  5639. public void applyRecoilNPC(int damage, int i) {
  5640. if (damage > 0 && c.playerEquipment[c.playerRing] == 2550) {
  5641. int recDamage = damage/10 + 1;
  5642. Server.npcHandler.npcs[c.npcIndex].HP -= recDamage;
  5643. Server.npcHandler.npcs[c.npcIndex].hitDiff2 = recDamage;
  5644. Server.npcHandler.npcs[c.npcIndex].hitUpdateRequired2 = true;
  5645. Server.npcHandler.npcs[c.npcIndex].updateRequired = true;
  5646. c.updateRequired = true;
  5647. removeRecoil(c);
  5648. c.recoilHits = damage;
  5649. }
  5650. }
  5651.  
  5652. public void removeRecoil(Client c) {
  5653. if(c.recoilHits >= 50) {
  5654. c.getItems().removeItem(2550, c.playerRing);
  5655. c.getItems().deleteItem(2550, c.getItems().getItemSlot(2550), 1);
  5656. c.sendMessage("Your ring of recoil shaters!");
  5657. c.recoilHits = 0;
  5658. } else {
  5659. c.recoilHits++;
  5660. }
  5661. }
  5662. public static void addCharge(Client c) {
  5663. if(c.playerEquipment[c.playerShield] != 11283) {
  5664. return;
  5665. }
  5666. if(c.dfsCount >= 40) {
  5667. c.dfsCount = 40;
  5668. c.sendMessage("Your shield has already 40 charges.");
  5669. return;
  5670. }
  5671.  
  5672. c.dfsCount++;
  5673. c.startAnimation(6695);
  5674. c.gfx0(1164);
  5675. c.sendMessage("You absord the fire breath and charge your Dragonfire shield.");
  5676. }
  5677.  
  5678. public int getBonusAttack(int i) {
  5679. switch (Server.npcHandler.npcs[i].npcType) {
  5680. case 2883:
  5681. return Misc.random(50) + 30;
  5682. case 2026:
  5683. case 2027:
  5684. case 2029:
  5685. case 2030:
  5686. return Misc.random(50) + 30;
  5687. }
  5688. return 0;
  5689. }
  5690.  
  5691.  
  5692.  
  5693. public void handleGmaulPlayer() {
  5694. if (c.playerIndex > 0) {
  5695. Client o = (Client)Server.playerHandler.players[c.playerIndex];
  5696. if (c.goodDistance(c.getX(), c.getY(), o.getX(), o.getY(), c.getCombat().getRequiredDistance())) {
  5697. if (c.getCombat().checkReqs()) {
  5698. if (c.getCombat().checkSpecAmount(4153)) {
  5699. boolean hit = Misc.random(c.getCombat().calculateMeleeAttack()) > Misc.random(o.getCombat().calculateMeleeDefence());
  5700. int damage = 0;
  5701. if (hit)
  5702. damage = Misc.random(c.getCombat().calculateMeleeMaxHit());
  5703. if (o.prayerActive[18] && System.currentTimeMillis() - o.protMeleeDelay > 1500)
  5704. damage *= .6;
  5705. if(o.playerLevel[3] - damage <= 0) {
  5706. damage = o.playerLevel[3];
  5707. }
  5708. if(o.playerLevel[3] > 0) {
  5709. o.handleHitMask(damage);
  5710. c.startAnimation(1667);
  5711. o.gfx100(337);
  5712. o.dealDamage(damage);
  5713. }
  5714. }
  5715. }
  5716. }
  5717. } else if(c.npcIndex > 0) {
  5718. int x = Server.npcHandler.npcs[c.npcIndex].absX;
  5719. int y = Server.npcHandler.npcs[c.npcIndex].absY;
  5720. if (c.goodDistance(c.getX(), c.getY(), x, y, 2)) {
  5721. if (c.getCombat().checkReqs()) {
  5722. if (c.getCombat().checkSpecAmount(4153)) {
  5723. int damage = Misc.random(c.getCombat().calculateMeleeMaxHit());
  5724. if(Server.npcHandler.npcs[c.npcIndex].HP - damage < 0) {
  5725. damage = Server.npcHandler.npcs[c.npcIndex].HP;
  5726. }
  5727. if(Server.npcHandler.npcs[c.npcIndex].HP > 0) {
  5728. Server.npcHandler.npcs[c.npcIndex].HP -= damage;
  5729. Server.npcHandler.npcs[c.npcIndex].handleHitMask(damage);
  5730. c.startAnimation(1667);
  5731. c.gfx100(337);
  5732. }
  5733. }
  5734. }
  5735. }
  5736. }
  5737. }
  5738.  
  5739. public boolean armaNpc(int i) {
  5740. switch (Server.npcHandler.npcs[i].npcType) {
  5741. case 6222:
  5742. case 6223:
  5743. case 6229:
  5744. case 6225:
  5745. case 6230:
  5746. case 6227:
  5747. case 6232:
  5748. case 6239:
  5749. case 6233:
  5750. case 6231:
  5751. return true;
  5752. }
  5753. return false;
  5754. }
  5755.  
  5756. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement