Guest User

Untitled

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