Guest User

Untitled

a guest
May 25th, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 342.05 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:
  2346. int base = (int) (calculateMeleeMaxHit() * 0.5);
  2347. damage = base + Misc.random(calculateMeleeMaxHit());
  2348. Server.playerHandler.players[i].gfx0(1248);
  2349. if (c.inMulti()) {
  2350. int chainedPlayerX = -1; //X coord of the first chained Player
  2351. int chainedPlayerY = -1; //Y coord of the first chained Player
  2352. int chainedPlayers = 0; //Total amount of chained npcs
  2353. for (int j = 0; j < Server.playerHandler.players.length; j++) {
  2354. if (Server.playerHandler.players[j] != null && Server.playerHandler.players[j].playerLevel[3] > 0 && j != i) {
  2355. int pX = o.getX(); //Opponent the player is directly attacking
  2356. int pY = o.getY(); //Opponent the player is directly attacking
  2357. int nX = Server.playerHandler.players[j].getX(); //Chained Player
  2358. int nY = Server.playerHandler.players[j].getY(); //Chained Player
  2359. if (chainedPlayers == 0) { //We're looking for the first Player to chain hit
  2360. if (Misc.distanceFromPoint(pX, pY, nX, nY) <= 4 && Misc.distanceFromPoint(pX, pY, nX, nY) >= 1) {
  2361. if (Server.playerHandler.players[j].inMulti()) {
  2362. chainedPlayers = 1;
  2363. c.korasiSpecDamage = damage;
  2364. c.korasiChainDelay = 1;
  2365. c.korasiChainTargetType = 1;
  2366. c.korasiChainTargetID1 = j;
  2367. chainedPlayerX = nX;
  2368. chainedPlayerY = nY;
  2369. //c.sendMessage("First chain added.");
  2370. }
  2371. }
  2372. } else if (chainedPlayers == 1) {
  2373. if (Misc.distanceFromPoint(chainedPlayerX, chainedPlayerY, nX, nY) <= 4 && Misc.distanceFromPoint(chainedPlayerX, chainedPlayerY, nX, nY) >= 1) {
  2374. if (Server.playerHandler.players[j].inMulti()) {
  2375. chainedPlayers = 2;
  2376. c.korasiChainDelay = 2;
  2377. c.korasiChainTargetType = 1;
  2378. c.korasiChainTargetID2 = c.korasiChainTargetID1;
  2379. c.korasiChainTargetID1 = j;
  2380. //c.sendMessage("Second chain added.");
  2381. break; //We break the because Korasi spec only chains twice
  2382. }
  2383. }
  2384. }
  2385. }
  2386. }
  2387. }
  2388. break;
  2389.  
  2390. }
  2391. c.specEffect = 0;
  2392. if(c.fightMode == 3) {
  2393. c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 0);
  2394. c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 1);
  2395. c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 2);
  2396. c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 3);
  2397. c.getPA().refreshSkill(0);
  2398. c.getPA().refreshSkill(1);
  2399. c.getPA().refreshSkill(2);
  2400. c.getPA().refreshSkill(3);
  2401. } else {
  2402. c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE), c.fightMode);
  2403. c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 3);
  2404. c.getPA().refreshSkill(c.fightMode);
  2405. c.getPA().refreshSkill(3);
  2406. }
  2407. Server.playerHandler.players[i].logoutDelay = System.currentTimeMillis();
  2408. Server.playerHandler.players[i].underAttackBy = c.playerId;
  2409. Server.playerHandler.players[i].killerId = c.playerId;
  2410. Server.playerHandler.players[i].singleCombatDelay = System.currentTimeMillis();
  2411. if (c.killedBy != Server.playerHandler.players[i].playerId)
  2412. c.totalPlayerDamageDealt = 0;
  2413. c.killedBy = Server.playerHandler.players[i].playerId;
  2414. applySmite(i, damage);
  2415. switch(damageMask) {
  2416. case 1:
  2417. /*if (!Server.playerHandler.players[i].getHitUpdateRequired()){
  2418. Server.playerHandler.players[i].setHitDiff(damage);
  2419. Server.playerHandler.players[i].setHitUpdateRequired(true);
  2420. } else {
  2421. Server.playerHandler.players[i].setHitDiff2(damage);
  2422. Server.playerHandler.players[i].setHitUpdateRequired2(true);
  2423. }*/
  2424. //Server.playerHandler.players[i].playerLevel[3] -= damage;
  2425. Server.playerHandler.players[i].dealDamage(damage);
  2426. Server.playerHandler.players[i].damageTaken[c.playerId] += damage;
  2427. c.totalPlayerDamageDealt += damage;
  2428. Server.playerHandler.players[i].updateRequired = true;
  2429. o.getPA().refreshSkill(3);
  2430. break;
  2431.  
  2432. case 2:
  2433. /*if (!Server.playerHandler.players[i].getHitUpdateRequired2()){
  2434. Server.playerHandler.players[i].setHitDiff2(damage);
  2435. Server.playerHandler.players[i].setHitUpdateRequired2(true);
  2436. } else {
  2437. Server.playerHandler.players[i].setHitDiff(damage);
  2438. Server.playerHandler.players[i].setHitUpdateRequired(true);
  2439. }*/
  2440. //Server.playerHandler.players[i].playerLevel[3] -= damage;
  2441. Server.playerHandler.players[i].dealDamage(damage);
  2442. Server.playerHandler.players[i].damageTaken[c.playerId] += damage;
  2443. c.totalPlayerDamageDealt += damage;
  2444. Server.playerHandler.players[i].updateRequired = true;
  2445. c.doubleHit = false;
  2446. o.getPA().refreshSkill(3);
  2447. break;
  2448. }
  2449. Server.playerHandler.players[i].handleHitMask(damage);
  2450. }
  2451.  
  2452.  
  2453. public void applyPlayerMeleeDamage(int i, int damageMask, int damage){
  2454. Client o = (Client) Server.playerHandler.players[i];
  2455. if(o == null) {
  2456. return;
  2457. }
  2458. damage = 0;
  2459. boolean veracsEffect = false;
  2460. boolean guthansEffect = false;
  2461. if (c.getPA().fullVeracs()) {
  2462. if (Misc.random(4) == 1) {
  2463. veracsEffect = true;
  2464. }
  2465. }
  2466. if (c.getPA().fullGuthans()) {
  2467. if (Misc.random(4) == 1) {
  2468. guthansEffect = true;
  2469. }
  2470. }
  2471. if (damageMask == 1) {
  2472. damage = c.delayedDamage;
  2473. c.delayedDamage = 0;
  2474. } else {
  2475. damage = c.delayedDamage2;
  2476. c.delayedDamage2 = 0;
  2477. }
  2478. if(Misc.random(o.getCombat().calculateMeleeDefence()) > Misc.random(calculateMeleeAttack()) && !veracsEffect && !c.usingClaws) {
  2479. damage = 0;
  2480. c.bonusAttack = 0;
  2481. } else if (c.playerEquipment[c.playerWeapon] == 5698 && o.poisonDamage <= 0 && Misc.random(3) == 1) {
  2482. o.getPA().appendPoison(13);
  2483. c.bonusAttack += damage/3;
  2484. } else {
  2485. c.bonusAttack += damage/3;
  2486. }
  2487. if(o.curseActive[9]) {
  2488. o.gfx0(2230);
  2489. o.startAnimation(12573);
  2490. }
  2491. if(o.prayerActive[18] || o.curseActive[9] && System.currentTimeMillis() - o.protMeleeDelay > 1500 && !veracsEffect) { // if prayer active reduce damage by 40%
  2492. damage = (int)damage * 60 / 100;
  2493. if (o.playerEquipment[o.playerShield] == 13740 && o.playerLevel[5] >= 1 && damage >= 1) {
  2494. //if (Misc.random(2) == 1) {
  2495. damage = (int)damage * 42 / 100;
  2496. //o.playerLevel[5] -= PrayerDrain;
  2497. o.getPA().refreshSkill(5);
  2498.  
  2499. if (o.playerLevel[5] <= 0) {
  2500. o.playerLevel[5] = 0;
  2501. o.getCombat().resetPrayers();
  2502. o.getPA().refreshSkill(5);
  2503. //}
  2504. }
  2505. }
  2506. }
  2507.  
  2508. if (o.playerEquipment[o.playerShield] == 13742 && !o.prayerActive[18] || !o.curseActive[9] && damage >= 1) {
  2509. if(Misc.random(4) == 3) {
  2510. damage = (int)damage * 65 / 100;
  2511. }
  2512. }
  2513.  
  2514. if (o.playerEquipment[o.playerShield] == 13740 && !o.prayerActive[18] || !o.curseActive[9] && o.playerLevel[5] >= 1 && damage >= 1) {
  2515. damage = (int)damage * 70 / 100;
  2516.  
  2517. o.getPA().refreshSkill(5);
  2518. if (o.playerLevel[5] <= 0) {
  2519. o.playerLevel[5] = 0;
  2520. o.getCombat().resetPrayers();
  2521. o.getPA().refreshSkill(5);
  2522. }
  2523. }
  2524.  
  2525. if (o.playerEquipment[o.playerWeapon] == 15486 && damage >= 1 && o.SolProtect >= 1) {
  2526. damage = (int)damage / 2;
  2527. }
  2528.  
  2529. if (c.maxNextHit) {
  2530. damage = calculateMeleeMaxHit();
  2531. }
  2532. if (damage > 0 && guthansEffect) {
  2533. c.playerLevel[3] += damage;
  2534. if (c.playerLevel[3] > c.getLevelForXP(c.playerXP[3]))
  2535. c.playerLevel[3] = c.getLevelForXP(c.playerXP[3]);
  2536. c.getPA().refreshSkill(3);
  2537. o.gfx0(398);
  2538. }
  2539. if (c.ssSpec && damageMask == 2) {
  2540. damage = 5 + Misc.random(11);
  2541. c.ssSpec = false;
  2542. }
  2543. if (Server.playerHandler.players[i].playerLevel[3] - damage < 0) {
  2544. damage = Server.playerHandler.players[i].playerLevel[3];
  2545. }
  2546. if (o.vengOn && damage > 0)
  2547. appendVengeance(i, damage);
  2548. if (damage > 0)
  2549. //applyRecoil(damage, i);
  2550. Deflect(damage, i);
  2551. switch(c.specEffect) {
  2552. case 5:
  2553. c.clawDelay = 2;
  2554. break;
  2555. case 1: // dragon scimmy special
  2556. if(damage > 0) {
  2557. if(o.prayerActive[16] || o.prayerActive[17] || o.prayerActive[18] || o.curseActive[7] || o.curseActive[8] || o.curseActive[9]) {
  2558. o.headIcon = -1;
  2559. o.getPA().sendFrame36(c.PRAYER_GLOW[16], 0);
  2560. o.getPA().sendFrame36(c.PRAYER_GLOW[17], 0);
  2561. o.getPA().sendFrame36(c.PRAYER_GLOW[18], 0);
  2562. o.getPA().sendFrame36(c.CURSE_GLOW[7], 0);
  2563. o.getPA().sendFrame36(c.CURSE_GLOW[8], 0);
  2564. o.getPA().sendFrame36(c.CURSE_GLOW[9], 0);
  2565. }
  2566. o.sendMessage("You have been injured!");
  2567. o.stopPrayerDelay = System.currentTimeMillis();
  2568. o.prayerActive[16] = false;
  2569. o.prayerActive[17] = false;
  2570. o.prayerActive[18] = false;
  2571. o.curseActive[7] = false;
  2572. o.curseActive[8] = false;
  2573. o.curseActive[9] = false;
  2574. o.getPA().requestUpdates();
  2575. }
  2576. break;
  2577. case 2:
  2578. if (damage > 0) {
  2579. if (o.freezeTimer <= 0)
  2580. o.freezeTimer = 30;
  2581. o.gfx0(2104);
  2582. o.sendMessage("You have been frozen.");
  2583. o.frozenBy = c.playerId;
  2584. o.stopMovement();
  2585. c.sendMessage("You freeze your enemy.");
  2586. }
  2587. break;
  2588. case 3:
  2589. if (damage > 0) {
  2590. o.playerLevel[1] -= damage;
  2591. o.sendMessage("You feel weak.");
  2592. if (o.playerLevel[1] < 1)
  2593. o.playerLevel[1] = 1;
  2594. o.getPA().refreshSkill(1);
  2595. }
  2596. break;
  2597. case 4:
  2598. if (damage > 0) {
  2599. if (c.playerLevel[3] + damage > c.getLevelForXP(c.playerXP[3]))
  2600. if (c.playerLevel[3] > c.getLevelForXP(c.playerXP[3]));
  2601. else
  2602. c.playerLevel[3] = c.getLevelForXP(c.playerXP[3]);
  2603. else
  2604. c.playerLevel[3] += damage;
  2605. c.getPA().refreshSkill(3);
  2606. }
  2607. break;
  2608. case 19780:
  2609. int base = (int) (calculateMeleeMaxHit() * 0.5);
  2610. damage = base + Misc.random(calculateMeleeMaxHit());
  2611. Server.playerHandler.players[i].gfx0(1248);
  2612. //uncomment after we add the gfx
  2613. break;
  2614. }
  2615. c.specEffect = 0;
  2616. if(c.fightMode == 3) {
  2617. c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 0);
  2618. c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 1);
  2619. c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 2);
  2620. c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 3);
  2621. c.getPA().refreshSkill(0);
  2622. c.getPA().refreshSkill(1);
  2623. c.getPA().refreshSkill(2);
  2624. c.getPA().refreshSkill(3);
  2625. } else {
  2626. c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE), c.fightMode);
  2627. c.getPA().addSkillXP((damage*Config.MELEE_EXP_RATE/3), 3);
  2628. c.getPA().refreshSkill(c.fightMode);
  2629. c.getPA().refreshSkill(3);
  2630. }
  2631. Server.playerHandler.players[i].logoutDelay = System.currentTimeMillis();
  2632. Server.playerHandler.players[i].underAttackBy = c.playerId;
  2633. Server.playerHandler.players[i].killerId = c.playerId;
  2634. Server.playerHandler.players[i].singleCombatDelay = System.currentTimeMillis();
  2635. if (c.killedBy != Server.playerHandler.players[i].playerId)
  2636. c.totalPlayerDamageDealt = 0;
  2637. c.killedBy = Server.playerHandler.players[i].playerId;
  2638. applySmite(i, damage);
  2639. switch(damageMask) {
  2640. case 1:
  2641. /*if (!Server.playerHandler.players[i].getHitUpdateRequired()){
  2642. Server.playerHandler.players[i].setHitDiff(damage);
  2643. Server.playerHandler.players[i].setHitUpdateRequired(true);
  2644. } else {
  2645. Server.playerHandler.players[i].setHitDiff2(damage);
  2646. Server.playerHandler.players[i].setHitUpdateRequired2(true);
  2647. }*/
  2648. //Server.playerHandler.players[i].playerLevel[3] -= damage;
  2649. Server.playerHandler.players[i].dealDamage(damage);
  2650. Server.playerHandler.players[i].damageTaken[c.playerId] += damage;
  2651. c.totalPlayerDamageDealt += damage;
  2652. Server.playerHandler.players[i].updateRequired = true;
  2653. o.getPA().refreshSkill(3);
  2654. break;
  2655.  
  2656. case 2:
  2657. /*if (!Server.playerHandler.players[i].getHitUpdateRequired2()){
  2658. Server.playerHandler.players[i].setHitDiff2(damage);
  2659. Server.playerHandler.players[i].setHitUpdateRequired2(true);
  2660. } else {
  2661. Server.playerHandler.players[i].setHitDiff(damage);
  2662. Server.playerHandler.players[i].setHitUpdateRequired(true);
  2663. }*/
  2664. //Server.playerHandler.players[i].playerLevel[3] -= damage;
  2665. Server.playerHandler.players[i].dealDamage(damage);
  2666. Server.playerHandler.players[i].damageTaken[c.playerId] += damage;
  2667. c.totalPlayerDamageDealt += damage;
  2668. Server.playerHandler.players[i].updateRequired = true;
  2669. c.doubleHit = false;
  2670. o.getPA().refreshSkill(3);
  2671. break;
  2672. }
  2673. Server.playerHandler.players[i].handleHitMask(damage);
  2674. c.previousDamage = damage;
  2675. }
  2676.  
  2677. public void applySmite(int index, int damage) {
  2678. if (!c.prayerActive[23] && !c.curseActive[18])
  2679. return;
  2680. if (damage <= 0)
  2681. return;
  2682. if (Server.playerHandler.players[index] != null) {
  2683. Client c2 = (Client)Server.playerHandler.players[index];
  2684. if(c.curseActive[18] && !c.prayerActive[23] && c.playerLevel[3] <= 99) {
  2685. int heal = (int)(damage/5);
  2686. if(c.playerLevel[3] + heal >= c.getPA().getLevelForXP(c.playerXP[3])) {
  2687. c.playerLevel[3] = c.getPA().getLevelForXP(c.playerXP[3]);
  2688. } else {
  2689. c.playerLevel[3] += heal;
  2690. }
  2691. c.getPA().refreshSkill(3);
  2692. }
  2693. c2.playerLevel[5] -= (int)(damage/4);
  2694. if (c2.playerLevel[5] <= 0) {
  2695. c2.playerLevel[5] = 0;
  2696. c2.getCombat().resetPrayers();
  2697. }
  2698. c2.getPA().refreshSkill(5);
  2699. }
  2700.  
  2701. }
  2702.  
  2703. public void fireProjectilePlayer() {
  2704. if(c.oldPlayerIndex > 0) {
  2705. if(Server.playerHandler.players[c.oldPlayerIndex] != null) {
  2706. c.projectileStage = 2;
  2707. int pX = c.getX();
  2708. int pY = c.getY();
  2709. int oX = Server.playerHandler.players[c.oldPlayerIndex].getX();
  2710. int oY = Server.playerHandler.players[c.oldPlayerIndex].getY();
  2711. int offX = (pY - oY)* -1;
  2712. int offY = (pX - oX)* -1;
  2713. if(c.playerEquipment[c.playerWeapon] == 15241) {
  2714. if(!c.specGfx) {
  2715. c.gfx0(2138);
  2716. }
  2717. c.getPA().createPlayersProjectile2(pX, pY, offX, offY, 50, 55, getRangeProjectileGFX(), 22, 22, c.oldPlayerIndex - 1, getStartDelay(), -1);
  2718. c.handCannonDestory();
  2719. c.specGfx = false;
  2720. } else if (!c.msbSpec)
  2721. c.getPA().createPlayersProjectile(pX, pY, offX, offY, 50, getProjectileSpeed(), getRangeProjectileGFX(), 43, 31, - c.oldPlayerIndex - 1, getStartDelay());
  2722. else if (c.msbSpec) {
  2723. c.msbSpec = false;
  2724. c.getPA().createPlayersProjectile2(pX, pY, offX, offY, 50, 55, getRangeProjectileGFX(), 22, 22, c.oldNpcIndex + 1, getStartDelay(), -1);
  2725. }
  2726. if (usingDbow())
  2727. c.getPA().createPlayersProjectile2(pX, pY, offX, offY, 50, getProjectileSpeed(), getRangeProjectileGFX(), 60, 31, - c.oldPlayerIndex - 1, getStartDelay(), 35);
  2728. }
  2729. }
  2730. }
  2731. public boolean usingDbow() {
  2732. return c.playerEquipment[c.playerWeapon] == 11235;
  2733. }
  2734.  
  2735.  
  2736.  
  2737.  
  2738.  
  2739. /**Prayer**/
  2740.  
  2741. public void activatePrayer(int i) {
  2742. if(c.duelRule[7]){
  2743. for(int p = 0; p < c.PRAYER.length; p++) { // reset prayer glows
  2744. c.prayerActive[p] = false;
  2745. c.getPA().sendFrame36(c.PRAYER_GLOW[p], 0);
  2746. }
  2747. c.sendMessage("Prayer has been disabled in this duel!");
  2748. return;
  2749. }
  2750. if(c.altarPrayed == 1) {
  2751. for(int p = 0; p < c.PRAYER.length; p++) { // reset prayer glows
  2752. c.prayerActive[p] = false;
  2753. c.getPA().sendFrame36(c.PRAYER_GLOW[p], 0);
  2754. }
  2755. c.sendMessage("You are not on the right prayerbook!!");
  2756. return;
  2757. }
  2758.  
  2759. if(c.inRFD()){
  2760. for(int p = 0; p < c.PRAYER.length; p++) { // reset prayer glows
  2761. c.prayerActive[p] = false;
  2762. c.getPA().sendFrame36(c.PRAYER_GLOW[p], 0);
  2763. }
  2764. c.sendMessage("You cannot use prayer in here!");
  2765. return;
  2766. }
  2767. if (i == 24 && c.getPA().getLevelForXP(c.playerXP[1]) < 70) {
  2768. c.getPA().sendFrame36(c.PRAYER_GLOW[i], 0);
  2769. c.sendMessage("You need 60 Defence to activate Chivarly.");
  2770. return;
  2771. }
  2772. if (i == 25 && c.getPA().getLevelForXP(c.playerXP[1]) < 70) {
  2773. c.getPA().sendFrame36(c.PRAYER_GLOW[i], 0);
  2774. c.sendMessage("You need 70 Defence to activate Piety.");
  2775. return;
  2776. }
  2777.  
  2778. int[] defPray = {0,5,13,24,25};
  2779. int[] strPray = {1,6,14,24,25};
  2780. int[] atkPray = {2,7,15,24,25};
  2781. int[] rangePray = {3,11,19};
  2782. int[] magePray = {4,12,20};
  2783.  
  2784. if(c.playerLevel[5] > 0 || !Config.PRAYER_POINTS_REQUIRED){
  2785. if(c.getPA().getLevelForXP(c.playerXP[5]) >= c.PRAYER_LEVEL_REQUIRED[i] || !Config.PRAYER_LEVEL_REQUIRED) {
  2786. boolean headIcon = false;
  2787. switch(i) {
  2788. case 0:
  2789. case 5:
  2790. case 13:
  2791. if(c.prayerActive[i] == false) {
  2792. for (int j = 0; j < defPray.length; j++) {
  2793. if (defPray[j] != i) {
  2794. c.prayerActive[defPray[j]] = false;
  2795. c.getPA().sendFrame36(c.PRAYER_GLOW[defPray[j]], 0);
  2796. }
  2797. }
  2798. }
  2799. break;
  2800.  
  2801. case 1:
  2802. case 6:
  2803. case 14:
  2804. if(c.prayerActive[i] == false) {
  2805. for (int j = 0; j < strPray.length; j++) {
  2806. if (strPray[j] != i) {
  2807. c.prayerActive[strPray[j]] = false;
  2808. c.getPA().sendFrame36(c.PRAYER_GLOW[strPray[j]], 0);
  2809. }
  2810. }
  2811. for (int j = 0; j < rangePray.length; j++) {
  2812. if (rangePray[j] != i) {
  2813. c.prayerActive[rangePray[j]] = false;
  2814. c.getPA().sendFrame36(c.PRAYER_GLOW[rangePray[j]], 0);
  2815. }
  2816. }
  2817. for (int j = 0; j < magePray.length; j++) {
  2818. if (magePray[j] != i) {
  2819. c.prayerActive[magePray[j]] = false;
  2820. c.getPA().sendFrame36(c.PRAYER_GLOW[magePray[j]], 0);
  2821. }
  2822. }
  2823. }
  2824. break;
  2825.  
  2826. case 2:
  2827. case 7:
  2828. case 15:
  2829. if(c.prayerActive[i] == false) {
  2830. for (int j = 0; j < atkPray.length; j++) {
  2831. if (atkPray[j] != i) {
  2832. c.prayerActive[atkPray[j]] = false;
  2833. c.getPA().sendFrame36(c.PRAYER_GLOW[atkPray[j]], 0);
  2834. }
  2835. }
  2836. for (int j = 0; j < rangePray.length; j++) {
  2837. if (rangePray[j] != i) {
  2838. c.prayerActive[rangePray[j]] = false;
  2839. c.getPA().sendFrame36(c.PRAYER_GLOW[rangePray[j]], 0);
  2840. }
  2841. }
  2842. for (int j = 0; j < magePray.length; j++) {
  2843. if (magePray[j] != i) {
  2844. c.prayerActive[magePray[j]] = false;
  2845. c.getPA().sendFrame36(c.PRAYER_GLOW[magePray[j]], 0);
  2846. }
  2847. }
  2848. }
  2849. break;
  2850.  
  2851. case 3://range prays
  2852. case 11:
  2853. case 19:
  2854. if(c.prayerActive[i] == false) {
  2855. for (int j = 0; j < atkPray.length; j++) {
  2856. if (atkPray[j] != i) {
  2857. c.prayerActive[atkPray[j]] = false;
  2858. c.getPA().sendFrame36(c.PRAYER_GLOW[atkPray[j]], 0);
  2859. }
  2860. }
  2861. for (int j = 0; j < strPray.length; j++) {
  2862. if (strPray[j] != i) {
  2863. c.prayerActive[strPray[j]] = false;
  2864. c.getPA().sendFrame36(c.PRAYER_GLOW[strPray[j]], 0);
  2865. }
  2866. }
  2867. for (int j = 0; j < rangePray.length; j++) {
  2868. if (rangePray[j] != i) {
  2869. c.prayerActive[rangePray[j]] = false;
  2870. c.getPA().sendFrame36(c.PRAYER_GLOW[rangePray[j]], 0);
  2871. }
  2872. }
  2873. for (int j = 0; j < magePray.length; j++) {
  2874. if (magePray[j] != i) {
  2875. c.prayerActive[magePray[j]] = false;
  2876. c.getPA().sendFrame36(c.PRAYER_GLOW[magePray[j]], 0);
  2877. }
  2878. }
  2879. }
  2880. break;
  2881. case 4:
  2882. case 12:
  2883. case 20:
  2884. if(c.prayerActive[i] == false) {
  2885. for (int j = 0; j < atkPray.length; j++) {
  2886. if (atkPray[j] != i) {
  2887. c.prayerActive[atkPray[j]] = false;
  2888. c.getPA().sendFrame36(c.PRAYER_GLOW[atkPray[j]], 0);
  2889. }
  2890. }
  2891. for (int j = 0; j < strPray.length; j++) {
  2892. if (strPray[j] != i) {
  2893. c.prayerActive[strPray[j]] = false;
  2894. c.getPA().sendFrame36(c.PRAYER_GLOW[strPray[j]], 0);
  2895. }
  2896. }
  2897. for (int j = 0; j < rangePray.length; j++) {
  2898. if (rangePray[j] != i) {
  2899. c.prayerActive[rangePray[j]] = false;
  2900. c.getPA().sendFrame36(c.PRAYER_GLOW[rangePray[j]], 0);
  2901. }
  2902. }
  2903. for (int j = 0; j < magePray.length; j++) {
  2904. if (magePray[j] != i) {
  2905. c.prayerActive[magePray[j]] = false;
  2906. c.getPA().sendFrame36(c.PRAYER_GLOW[magePray[j]], 0);
  2907. }
  2908. }
  2909. }
  2910. break;
  2911. case 10:
  2912. c.lastProtItem = System.currentTimeMillis();
  2913. break;
  2914.  
  2915.  
  2916. case 16:
  2917. case 17:
  2918. case 18:
  2919. if(System.currentTimeMillis() - c.stopPrayerDelay < 5000) {
  2920. c.sendMessage("You have been injured and cannot use this prayer!");
  2921. c.getPA().sendFrame36(c.PRAYER_GLOW[16], 0);
  2922. c.getPA().sendFrame36(c.PRAYER_GLOW[17], 0);
  2923. c.getPA().sendFrame36(c.PRAYER_GLOW[18], 0);
  2924. return;
  2925. }
  2926. if (i == 16)
  2927. c.protMageDelay = System.currentTimeMillis();
  2928. else if (i == 17)
  2929. c.protRangeDelay = System.currentTimeMillis();
  2930. else if (i == 18)
  2931. c.protMeleeDelay = System.currentTimeMillis();
  2932. case 21:
  2933. case 22:
  2934. case 23:
  2935. headIcon = true;
  2936. for(int p = 16; p < 24; p++) {
  2937. if(i != p && p != 19 && p != 20) {
  2938. c.prayerActive[p] = false;
  2939. c.getPA().sendFrame36(c.PRAYER_GLOW[p], 0);
  2940. }
  2941. }
  2942. break;
  2943. case 24:
  2944. if (c.prayerActive[i] == false) {
  2945.  
  2946. for (int j = 0; j < atkPray.length; j++) {
  2947. if (atkPray[j] != i) {
  2948. c.prayerActive[atkPray[j]] = false;
  2949. c.getPA().sendFrame36(c.PRAYER_GLOW[atkPray[j]], 0);
  2950. }
  2951. }
  2952. for (int j = 0; j < strPray.length; j++) {
  2953. if (strPray[j] != i) {
  2954. c.prayerActive[strPray[j]] = false;
  2955. c.getPA().sendFrame36(c.PRAYER_GLOW[strPray[j]], 0);
  2956. }
  2957. }
  2958. for (int j = 0; j < rangePray.length; j++) {
  2959. if (rangePray[j] != i) {
  2960. c.prayerActive[rangePray[j]] = false;
  2961. c.getPA().sendFrame36(c.PRAYER_GLOW[rangePray[j]], 0);
  2962. }
  2963. }
  2964. for (int j = 0; j < magePray.length; j++) {
  2965. if (magePray[j] != i) {
  2966. c.prayerActive[magePray[j]] = false;
  2967. c.getPA().sendFrame36(c.PRAYER_GLOW[magePray[j]], 0);
  2968. }
  2969. }
  2970. for (int j = 0; j < defPray.length; j++) {
  2971. if (defPray[j] != i) {
  2972. c.prayerActive[defPray[j]] = false;
  2973. c.getPA().sendFrame36(c.PRAYER_GLOW[defPray[j]], 0);
  2974. }
  2975. }
  2976. }
  2977. break;
  2978. case 25:
  2979.  
  2980. if (c.prayerActive[i] == false) {
  2981.  
  2982. for (int j = 0; j < atkPray.length; j++) {
  2983. if (atkPray[j] != i) {
  2984. c.prayerActive[atkPray[j]] = false;
  2985. c.getPA().sendFrame36(c.PRAYER_GLOW[atkPray[j]], 0);
  2986. }
  2987. }
  2988. for (int j = 0; j < strPray.length; j++) {
  2989. if (strPray[j] != i) {
  2990. c.prayerActive[strPray[j]] = false;
  2991. c.getPA().sendFrame36(c.PRAYER_GLOW[strPray[j]], 0);
  2992. }
  2993. }
  2994. for (int j = 0; j < rangePray.length; j++) {
  2995. if (rangePray[j] != i) {
  2996. c.prayerActive[rangePray[j]] = false;
  2997. c.getPA().sendFrame36(c.PRAYER_GLOW[rangePray[j]], 0);
  2998. }
  2999. }
  3000. for (int j = 0; j < magePray.length; j++) {
  3001. if (magePray[j] != i) {
  3002. c.prayerActive[magePray[j]] = false;
  3003. c.getPA().sendFrame36(c.PRAYER_GLOW[magePray[j]], 0);
  3004. }
  3005. }
  3006. for (int j = 0; j < defPray.length; j++) {
  3007. if (defPray[j] != i) {
  3008. c.prayerActive[defPray[j]] = false;
  3009. c.getPA().sendFrame36(c.PRAYER_GLOW[defPray[j]], 0);
  3010. }
  3011. }
  3012. }
  3013. break;
  3014. }
  3015.  
  3016. if(!headIcon) {
  3017. if(c.prayerActive[i] == false) {
  3018. c.prayerActive[i] = true;
  3019. c.getPA().sendFrame36(c.PRAYER_GLOW[i], 1);
  3020. } else {
  3021. c.prayerActive[i] = false;
  3022. c.getPA().sendFrame36(c.PRAYER_GLOW[i], 0);
  3023. }
  3024. } else {
  3025. if(c.prayerActive[i] == false) {
  3026. c.prayerActive[i] = true;
  3027. c.getPA().sendFrame36(c.PRAYER_GLOW[i], 1);
  3028. c.headIcon = c.PRAYER_HEAD_ICONS[i];
  3029. c.getPA().requestUpdates();
  3030. } else {
  3031. c.prayerActive[i] = false;
  3032. c.getPA().sendFrame36(c.PRAYER_GLOW[i], 0);
  3033. c.headIcon = -1;
  3034. c.getPA().requestUpdates();
  3035. }
  3036. }
  3037. } else {
  3038. c.getPA().sendFrame36(c.PRAYER_GLOW[i],0);
  3039. c.getPA().sendFrame126("You need a @blu@Prayer level of "+c.PRAYER_LEVEL_REQUIRED[i]+" to use "+c.PRAYER_NAME[i]+".", 357);
  3040. c.getPA().sendFrame126("Click here to continue", 358);
  3041. c.getPA().sendFrame164(356);
  3042. c.nextChat = 0;
  3043. }
  3044. } else {
  3045. c.getPA().sendFrame36(c.PRAYER_GLOW[i],0);
  3046. c.sendMessage("You have run out of prayer points!");
  3047. }
  3048.  
  3049. }
  3050.  
  3051. /**
  3052. *Specials
  3053. **/
  3054.  
  3055. public void activateSpecial(int weapon, int i){
  3056. if(Server.npcHandler.npcs[i] == null && c.npcIndex > 0) {
  3057. return;
  3058. }
  3059. if(Server.playerHandler.players[i] == null && c.playerIndex > 0) {
  3060. return;
  3061. }
  3062. c.doubleHit = false;
  3063. c.specEffect = 0;
  3064. c.projectileStage = 0;
  3065. c.specMaxHitIncrease = 2;
  3066. if(c.npcIndex > 0) {
  3067. c.oldNpcIndex = i;
  3068. } else if (c.playerIndex > 0){
  3069. c.oldPlayerIndex = i;
  3070. Server.playerHandler.players[i].underAttackBy = c.playerId;
  3071. Server.playerHandler.players[i].logoutDelay = System.currentTimeMillis();
  3072. Server.playerHandler.players[i].singleCombatDelay = System.currentTimeMillis();
  3073. Server.playerHandler.players[i].killerId = c.playerId;
  3074. }
  3075. switch(weapon) {
  3076. case 15241: // hand cannon special effect
  3077. c.usingBow = true;
  3078. c.rangeItemUsed = c.playerEquipment[c.playerArrows];
  3079. c.getItems().deleteArrow();
  3080. c.lastWeaponUsed = weapon;
  3081. c.startAnimation(12175);
  3082. c.specAccuracy = 1.5;
  3083. c.specDamage = 1.15;
  3084. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  3085. if (c.fightMode == 2)
  3086. c.attackTimer-=4;
  3087. c.handCannonSpec();
  3088. break;
  3089. case 1305: // dragon long
  3090. c.gfx100(248);
  3091. c.startAnimation(1058);
  3092. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  3093. c.specAccuracy = 1.10;
  3094. c.specDamage = 1.20;
  3095. break;
  3096.  
  3097. case 1215: // dragon daggers
  3098. case 1231:
  3099. case 5680:
  3100. case 5698:
  3101. case 13996:
  3102. c.gfx100(252);
  3103. c.startAnimation(1062);
  3104. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  3105. c.doubleHit = true;
  3106. c.specAccuracy = 1.30;
  3107. c.specDamage = 1.05;
  3108. break;
  3109.  
  3110. case 10887:
  3111. c.gfx100(1027);
  3112. c.specAccuracy = 5.0;
  3113. c.specDamage = 1.15;
  3114. c.startAnimation(5870);
  3115. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  3116. break;
  3117.  
  3118. case 14484:
  3119. c.gfx0(1950);
  3120. c.startAnimation(10961);
  3121. c.specAccuracy = 10.0;
  3122. c.clawDamage = 0;
  3123.  
  3124. if (c.playerIndex > 0) {
  3125. Client o = (Client) Server.playerHandler.players[c.playerIndex];
  3126. if (Misc.random(calculateMeleeAttack()) > Misc.random(o.getCombat().calculateMeleeDefence())) {
  3127. c.clawDamage = Misc.random(calculateMeleeMaxHit() + Misc.random(2));
  3128. }
  3129. c.clawIndex = c.playerIndex;
  3130. c.clawType = 1;
  3131. } else if (c.npcIndex > 0) {
  3132. NPC n = Server.npcHandler.npcs[c.npcIndex];
  3133. if (Misc.random(calculateMeleeAttack()) > Misc.random(n.defence)) {
  3134. c.clawDamage = Misc.random(calculateMeleeMaxHit() + Misc.random(2));
  3135. }
  3136. c.clawIndex = c.npcIndex;
  3137. c.clawType = 2;
  3138. }
  3139.  
  3140. c.doubleHit = true;
  3141. c.usingClaws = true;
  3142. c.specEffect = 5;
  3143. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  3144. break;
  3145.  
  3146. case 4151: // whip
  3147. case 15441: // whip
  3148. case 15442: // whip
  3149. case 15443: // whip
  3150. case 15444: // whip
  3151. if(Server.npcHandler.npcs[i] != null) {
  3152. Server.npcHandler.npcs[i].gfx100(341);
  3153. }
  3154. c.specAccuracy = 1.10;
  3155. c.startAnimation(1658);
  3156. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  3157. break;
  3158.  
  3159. case 20:
  3160. if(Server.npcHandler.npcs[i] != null) {
  3161. Server.npcHandler.npcs[i].gfx100(341);
  3162. }
  3163. c.startAnimation(1658);
  3164. c.specDamage = 1.10;
  3165. c.specAccuracy = 100;
  3166. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  3167. break;
  3168.  
  3169. case 11694: // ags
  3170. c.startAnimation(7074);
  3171. c.specDamage = 1.40;
  3172. c.specAccuracy = 4.55;
  3173. c.gfx0(1222);
  3174. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  3175. break;
  3176.  
  3177. case 6746: // darklight
  3178. c.startAnimation(2890);
  3179. c.specDamage = 1.10;
  3180. c.specAccuracy = 2.00;
  3181. c.gfx0(483);
  3182. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  3183. break;
  3184.  
  3185. case 19780:
  3186. c.gfx100(1247); //1247 for the actual gfx. don't replace until we've added the gfx
  3187. c.startAnimation(4000); //4000 for the actual anim. don't replace until we've added anims
  3188. c.specEffect = 19780;
  3189. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  3190. break;
  3191.  
  3192. case 11730:
  3193. c.gfx100(1224);
  3194. c.startAnimation(7072);
  3195. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  3196. c.doubleHit = true;
  3197. c.ssSpec = true;
  3198. c.specAccuracy = 1.30;
  3199. break;
  3200.  
  3201. case 13994:
  3202. c.gfx100(1224);
  3203. c.startAnimation(7072);
  3204. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  3205. c.doubleHit = true;
  3206. c.ssSpec = true;
  3207. c.specAccuracy = 1.30;
  3208. break;
  3209.  
  3210. case 13905: // Vesta spear
  3211. c.startAnimation(10499);
  3212. c.gfx0(1835);
  3213. c.specAccuracy = 1.25;
  3214. c.specEffect = 6;
  3215. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  3216. break;
  3217.  
  3218. case 13899: // Vesta LongSword
  3219. c.startAnimation(10502);
  3220. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase()+1);
  3221. c.specDamage = 1.35;
  3222. c.specAccuracy = 2.00;
  3223. break;
  3224. case 13902: // Statius
  3225. c.startAnimation(10505);
  3226. c.gfx0(1840);
  3227. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase()+1);
  3228. c.specDamage = 1.35;
  3229. c.specAccuracy = 2.25;
  3230. break;
  3231.  
  3232. case 11700:
  3233. c.startAnimation(7070);
  3234. c.gfx0(1221);
  3235. if (c.playerIndex > 0) {
  3236. } else {
  3237. Server.npcHandler.npcs[c.npcIndex].gfx0(2104);
  3238. }
  3239. c.specAccuracy = 1.35;
  3240. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  3241. c.specEffect = 2;
  3242. break;
  3243.  
  3244. case 11696:
  3245. c.startAnimation(7073);
  3246. c.gfx0(1223);
  3247. c.specDamage = 1.30;
  3248. c.specAccuracy = 1.85;
  3249. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  3250. c.specEffect = 3;
  3251. break;
  3252.  
  3253. case 11698:
  3254. c.startAnimation(7071);
  3255. c.gfx0(1220);
  3256. c.specAccuracy = 2.00;
  3257. c.specDamage = 1.30;
  3258. c.specEffect = 4;
  3259. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  3260. break;
  3261.  
  3262. case 1249:
  3263. c.startAnimation(405);
  3264. c.gfx100(253);
  3265. if (c.playerIndex > 0) {
  3266. Client o = (Client)Server.playerHandler.players[i];
  3267. o.getPA().getSpeared(c.absX, c.absY);
  3268. }
  3269. break;
  3270.  
  3271. case 3204: // d hally
  3272. c.gfx100(282);
  3273. c.startAnimation(1203);
  3274. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  3275. if(Server.npcHandler.npcs[i] != null && c.npcIndex > 0) {
  3276. if(!c.goodDistance(c.getX(), c.getY(), Server.npcHandler.npcs[i].getX(), Server.npcHandler.npcs[i].getY(), 1)){
  3277. c.doubleHit = true;
  3278. }
  3279. }
  3280. if(Server.playerHandler.players[i] != null && c.playerIndex > 0) {
  3281. if(!c.goodDistance(c.getX(), c.getY(), Server.playerHandler.players[i].getX(),Server.playerHandler.players[i].getY(), 1)){
  3282. c.doubleHit = true;
  3283. c.delayedDamage2 = Misc.random(calculateMeleeMaxHit());
  3284. }
  3285. }
  3286. break;
  3287.  
  3288. case 4153: // maul
  3289. c.startAnimation(1667);
  3290. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  3291. /*if (c.playerIndex > 0)
  3292. gmaulPlayer(i);
  3293. else
  3294. gmaulNpc(i);*/
  3295. c.gfx100(337);
  3296. break;
  3297.  
  3298. case 4587: // dscimmy
  3299. c.gfx100(347);
  3300. c.specEffect = 1;
  3301. c.startAnimation(1872);
  3302. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  3303. break;
  3304.  
  3305. case 1434: // mace
  3306. c.startAnimation(1060);
  3307. c.gfx100(251);
  3308. c.specMaxHitIncrease = 3;
  3309. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase())+1;
  3310. c.specDamage = 1.35;
  3311. c.specAccuracy = 1.15;
  3312. break;
  3313.  
  3314. case 859: // magic long
  3315. c.usingBow = true;
  3316. c.bowSpecShot = 3;
  3317. c.rangeItemUsed = c.playerEquipment[c.playerArrows];
  3318. c.getItems().deleteArrow();
  3319. c.lastWeaponUsed = weapon;
  3320. c.startAnimation(426);
  3321. c.gfx100(250);
  3322. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  3323. c.projectileStage = 1;
  3324. if (c.fightMode == 2)
  3325. c.attackTimer--;
  3326. break;
  3327.  
  3328. case 13883: // Morrigan Throwing Axe
  3329. c.usingRangeWeapon = true;
  3330. c.rangeItemUsed = c.playerEquipment[c.playerWeapon];
  3331. c.getItems().deleteArrow();
  3332. c.lastWeaponUsed = weapon;
  3333. c.startAnimation(10501);
  3334. c.gfx0(1836);
  3335. c.hitDelay = 3;
  3336. c.specAccuracy = 1.90;
  3337. c.specDamage = 1.20;
  3338. c.projectileStage = 1;
  3339. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  3340. if (c.fightMode == 2)
  3341. c.attackTimer--;
  3342. if (c.playerIndex > 0)
  3343. fireProjectilePlayer();
  3344. else if (c.npcIndex > 0)
  3345. fireProjectileNpc();
  3346. break;
  3347.  
  3348. case 13879: // Morrigan Javeline
  3349. c.usingRangeWeapon = true;
  3350. c.rangeItemUsed = c.playerEquipment[c.playerWeapon];
  3351. c.getItems().deleteArrow();
  3352. c.lastWeaponUsed = weapon;
  3353. c.startAnimation(10504);
  3354. c.gfx0(1838);
  3355. c.specAccuracy = 2.00;
  3356. c.specDamage = 1.30;
  3357. c.hitDelay = 3;
  3358. c.projectileStage = 1;
  3359. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  3360. if (c.fightMode == 2)
  3361. c.attackTimer--;
  3362. if (c.playerIndex > 0)
  3363. fireProjectilePlayer();
  3364. else if (c.npcIndex > 0)
  3365. fireProjectileNpc();
  3366. break;
  3367.  
  3368. case 861: // magic short
  3369. c.usingBow = true;
  3370. c.bowSpecShot = 1;
  3371. c.rangeItemUsed = c.playerEquipment[c.playerArrows];
  3372. c.getItems().deleteArrow();
  3373. c.lastWeaponUsed = weapon;
  3374. c.startAnimation(1074);
  3375. c.hitDelay = 3;
  3376. c.projectileStage = 1;
  3377. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  3378. if (c.fightMode == 2)
  3379. c.attackTimer--;
  3380. if (c.playerIndex > 0)
  3381. fireProjectilePlayer();
  3382. else if (c.npcIndex > 0)
  3383. fireProjectileNpc();
  3384. break;
  3385.  
  3386. case 11235: // dark bow
  3387. case 15701: // dark bow
  3388. case 15702: // dark bow
  3389. case 15703: // dark bow
  3390. case 15704: // dark bow
  3391. c.usingBow = true;
  3392. c.dbowSpec = true;
  3393. c.rangeItemUsed = c.playerEquipment[c.playerArrows];
  3394. c.getItems().deleteArrow();
  3395. c.getItems().deleteArrow();
  3396. c.lastWeaponUsed = weapon;
  3397. c.hitDelay = 3;
  3398. c.startAnimation(426);
  3399. c.projectileStage = 1;
  3400. c.gfx100(getRangeStartGFX());
  3401. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  3402. if (c.fightMode == 2)
  3403. c.attackTimer--;
  3404. if (c.playerIndex > 0)
  3405. fireProjectilePlayer();
  3406. else if (c.npcIndex > 0)
  3407. fireProjectileNpc();
  3408. c.specAccuracy = 1.75;
  3409. c.specDamage = 1.50;
  3410. break;
  3411. }
  3412. c.delayedDamage = Misc.random(calculateMeleeMaxHit());
  3413. c.delayedDamage2 = Misc.random(calculateMeleeMaxHit());
  3414. c.usingSpecial = false;
  3415. c.getItems().updateSpecialBar();
  3416. }
  3417.  
  3418.  
  3419. public boolean checkSpecAmount(int weapon) {
  3420. if(c.playerEquipment[c.playerRing] == 19669)
  3421. {
  3422. c.specAmount += c.specAmount*0.1;
  3423. }
  3424. switch(weapon) {
  3425. case 1249:
  3426. case 1215:
  3427. case 1231:
  3428. case 5680:
  3429. case 5698:
  3430. case 1305:
  3431. case 1434:
  3432. case 13899:
  3433. if(c.specAmount >= 2.5) {
  3434. c.specAmount -= 2.5;
  3435. c.getItems().addSpecialBar(weapon);
  3436. return true;
  3437. }
  3438. return false;
  3439.  
  3440.  
  3441.  
  3442. case 4151:
  3443. case 15241:
  3444. case 15441: // whip
  3445. case 15442: // whip
  3446. case 15443: // whip
  3447. case 15444: // whip
  3448. case 20:
  3449. case 11694:
  3450. case 14484:
  3451. case 11698:
  3452. case 4153:
  3453. case 13902:
  3454. case 13905:
  3455. case 13883:
  3456. case 13879:
  3457. case 15486:
  3458. case 10887:
  3459. case 6746:
  3460. if(c.specAmount >= 5) {
  3461. c.specAmount -= 5;
  3462. c.getItems().addSpecialBar(weapon);
  3463. return true;
  3464. }
  3465. return false;
  3466.  
  3467. case 3204:
  3468. if(c.specAmount >= 3) {
  3469. c.specAmount -= 3;
  3470. c.getItems().addSpecialBar(weapon);
  3471. return true;
  3472. }
  3473. return false;
  3474.  
  3475. case 1377:
  3476. case 11696:
  3477. case 11730:
  3478. if(c.specAmount >= 10) {
  3479. c.specAmount -= 10;
  3480. c.getItems().addSpecialBar(weapon);
  3481. return true;
  3482. }
  3483. return false;
  3484. case 4587:
  3485. case 19780:
  3486. case 859:
  3487. case 861:
  3488. case 15701: // dark bow
  3489. case 15702: // dark bow
  3490. case 15703: // dark bow
  3491. case 15704: // dark bow
  3492. case 11235:
  3493. case 11700:
  3494. if(c.specAmount >= 5.5) {
  3495. c.specAmount -= 5.5;
  3496. c.getItems().addSpecialBar(weapon);
  3497. return true;
  3498. }
  3499. return false;
  3500.  
  3501.  
  3502. default:
  3503. return true; // incase u want to test a weapon
  3504. }
  3505. }
  3506.  
  3507. public void resetPlayerAttack() {
  3508. c.usingMagic = false;
  3509. c.npcIndex = 0;
  3510. c.faceUpdate(0);
  3511. c.playerIndex = 0;
  3512. c.getPA().resetFollow();
  3513. //c.sendMessage("Reset attack.");
  3514. }
  3515.  
  3516. public int getCombatDifference(int combat1, int combat2) {
  3517. if(combat1 > combat2) {
  3518. return (combat1 - combat2);
  3519. }
  3520. if(combat2 > combat1) {
  3521. return (combat2 - combat1);
  3522. }
  3523. return 0;
  3524. }
  3525.  
  3526. /**
  3527. *Get killer id
  3528. **/
  3529.  
  3530. public int getKillerId(int playerId) {
  3531. int oldDamage = 0;
  3532. int count = 0;
  3533. int killerId = 0;
  3534. for (int i = 1; i < Config.MAX_PLAYERS; i++) {
  3535. if (Server.playerHandler.players[i] != null) {
  3536. if(Server.playerHandler.players[i].killedBy == playerId) {
  3537. if (Server.playerHandler.players[i].withinDistance(Server.playerHandler.players[playerId])) {
  3538. if(Server.playerHandler.players[i].totalPlayerDamageDealt > oldDamage) {
  3539. oldDamage = Server.playerHandler.players[i].totalPlayerDamageDealt;
  3540. killerId = i;
  3541. }
  3542. }
  3543. Server.playerHandler.players[i].totalPlayerDamageDealt = 0;
  3544. Server.playerHandler.players[i].killedBy = 0;
  3545. }
  3546. }
  3547. }
  3548. return killerId;
  3549. }
  3550.  
  3551.  
  3552.  
  3553. double[] prayerData = {
  3554. 1, // Thick Skin.
  3555. 1, // Burst of Strength.
  3556. 1, // Clarity of Thought.
  3557. 1, // Sharp Eye.
  3558. 1, // Mystic Will.
  3559. 2, // Rock Skin.
  3560. 2, // SuperHuman Strength.
  3561. 2, // Improved Reflexes.
  3562. 0.4, // Rapid restore.
  3563. 0.6, // Rapid Heal.
  3564. 0.6, // Protect Items.
  3565. 1.5, // Hawk eye.
  3566. 2, // Mystic Lore.
  3567. 4, // Steel Skin.
  3568. 4, // Ultimate Strength.
  3569. 4, // Incredible Reflexes.
  3570. 4, // Protect from Magic.
  3571. 4, // Protect from Missiles.
  3572. 4, // Protect from Melee.
  3573. 4, // Eagle Eye.
  3574. 4, // Mystic Might.
  3575. 1, // Retribution.
  3576. 2, // Redemption.
  3577. 6, // Smite.
  3578. 8, // Chivalry.
  3579. 8, // Piety.
  3580. };
  3581.  
  3582. double[] curseData = {
  3583. 0.6, // Protect Item
  3584. 2, // Sap Warrior
  3585. 2, // Sap Range
  3586. 2, // Sap Mage
  3587. 2, // Sap Spirit
  3588. 1, // Berserker
  3589. 4, // Deflect Summoning
  3590. 4, // Deflect Mage
  3591. 4, // Deflect Range
  3592. 4, // Deflect Melee
  3593. 4, // Leech Attack
  3594. 4, // Leech Range
  3595. 4, // Leech Mage
  3596. 4, // Leech Defence
  3597. 4, // Leech Strength
  3598. 4, // Leech Energy
  3599. 4, // Leech Special
  3600. 4, // Wrath
  3601. 8, // Soul Split
  3602. 10, // Turmoil
  3603. };
  3604.  
  3605. public void handlePrayerDrain() {
  3606. c.usingPrayer = false;
  3607. double toRemove = 0.0;
  3608. for (int j = 0; j < prayerData.length; j++) {
  3609. if (c.prayerActive[j]) {
  3610. toRemove += prayerData[j]/20;
  3611. c.usingPrayer = true;
  3612. }
  3613. }
  3614. for (int j = 0; j < curseData.length; j++) {
  3615. if (c.curseActive[j]) {
  3616. toRemove += curseData[j]/20;
  3617. c.usingPrayer = true;
  3618. }
  3619. }
  3620. if (toRemove > 0) {
  3621. toRemove /= (1 + (0.035 * c.playerBonus[11]));
  3622. }
  3623. c.prayerPoint -= toRemove;
  3624. if (c.prayerPoint <= 0) {
  3625. c.prayerPoint = 1.0 + c.prayerPoint;
  3626. reducePrayerLevel();
  3627. }
  3628. }
  3629.  
  3630. public void reducePrayerLevel() {
  3631. if(c.playerLevel[5] - 1 > 0) {
  3632. c.playerLevel[5] -= 1;
  3633. } else {
  3634. c.sendMessage("You have run out of prayer points!");
  3635. c.playerLevel[5] = 0;
  3636. c.getCombat().resetPrayers();
  3637. c.prayerId = -1;
  3638. }
  3639. c.getPA().refreshSkill(5);
  3640. }
  3641.  
  3642. public void resetPrayers() {
  3643. for(int i = 0; i < c.prayerActive.length; i++) {
  3644. c.prayerActive[i] = false;
  3645. c.getPA().sendFrame36(c.PRAYER_GLOW[i], 0);
  3646. }
  3647. for(int i = 0; i < c.curseActive.length; i++) {
  3648. c.curseActive[i] = false;
  3649. c.getPA().sendFrame36(c.CURSE_GLOW[i], 0);
  3650. }
  3651. c.headIcon = -1;
  3652. c.getPA().requestUpdates();
  3653. }
  3654.  
  3655. /**
  3656. * Wildy and duel info
  3657. **/
  3658.  
  3659. public boolean checkReqs() {
  3660. if(Server.playerHandler.players[c.playerIndex] == null) {
  3661. return false;
  3662. }
  3663. if(!Server.playerHandler.players[c.playerIndex].inWild() && !Server.playerHandler.players[c.playerIndex].inDuelArena()) {
  3664. c.getShops().openPlayerShop((Client)Server.playerHandler.players[c.playerIndex]);
  3665. c.getCombat().resetPlayerAttack();
  3666. return false;
  3667. }
  3668. if (c.playerIndex == c.playerId)
  3669. return false;
  3670. if (c.inPits && Server.playerHandler.players[c.playerIndex].inPits)
  3671. return true;
  3672. if(Server.playerHandler.players[c.playerIndex].inDuelArena() && c.duelStatus != 5 && !c.usingMagic) {
  3673. if(c.arenas() || c.duelStatus == 5) {
  3674. c.sendMessage("You can't challenge inside the arena!");
  3675. return false;
  3676. }
  3677. c.getTradeAndDuel().requestDuel(c.playerIndex);
  3678. return false;
  3679. }
  3680. if(c.duelStatus == 5 && Server.playerHandler.players[c.playerIndex].duelStatus == 5) {
  3681. if(Server.playerHandler.players[c.playerIndex].duelingWith == c.getId()) {
  3682. return true;
  3683. } else {
  3684. c.sendMessage("This isn't your opponent!");
  3685. return false;
  3686. }
  3687. }
  3688. if(!Server.playerHandler.players[c.playerIndex].inWild() && Server.playerHandler.players[c.playerIndex].safeTimer <= 0) {
  3689. c.sendMessage("That player is not in the wilderness.");
  3690. c.stopMovement();
  3691. c.getCombat().resetPlayerAttack();
  3692. return false;
  3693. }
  3694. if(Server.playerHandler.players[c.playerIndex].safeZone()) {
  3695. c.sendMessage("This player is currently in a safe zone.");
  3696. c.stopMovement();
  3697. c.getCombat().resetPlayerAttack();
  3698. return false;
  3699. }
  3700.  
  3701. if(!c.inWild() && c.safeTimer <= 0) {
  3702. c.sendMessage("You are not in the wilderness.");
  3703. c.stopMovement();
  3704. c.getCombat().resetPlayerAttack();
  3705. return false;
  3706. }
  3707. if(c.safeZone()) {
  3708. c.sendMessage("You are standing in a safe zone.");
  3709. c.stopMovement();
  3710. c.getCombat().resetPlayerAttack();
  3711. return false;
  3712. }
  3713. if(!c.inFunPk()){
  3714. if(Config.COMBAT_LEVEL_DIFFERENCE) {
  3715. int combatDif1 = c.getCombat().getCombatDifference(c.combatLevel, Server.playerHandler.players[c.playerIndex].combatLevel);
  3716. if(combatDif1 > c.wildLevel || combatDif1 > Server.playerHandler.players[c.playerIndex].wildLevel) {
  3717. c.sendMessage("Your combat level difference is too great to attack that player here.");
  3718. c.stopMovement();
  3719. c.getCombat().resetPlayerAttack();
  3720. return false;
  3721. }
  3722. }
  3723. }
  3724.  
  3725. if(Config.SINGLE_AND_MULTI_ZONES) {
  3726. if(!Server.playerHandler.players[c.playerIndex].inMulti()) { // single combat zones
  3727. if(Server.playerHandler.players[c.playerIndex].underAttackBy != c.playerId && Server.playerHandler.players[c.playerIndex].underAttackBy != 0) {
  3728. c.sendMessage("That player is already in combat.");
  3729. c.stopMovement();
  3730. c.getCombat().resetPlayerAttack();
  3731. return false;
  3732. }
  3733. if(Server.playerHandler.players[c.playerIndex].playerId != c.underAttackBy && c.underAttackBy != 0 || c.underAttackBy2 > 0) {
  3734. c.sendMessage("You are already in combat.");
  3735. c.stopMovement();
  3736. c.getCombat().resetPlayerAttack();
  3737. return false;
  3738. }
  3739. }
  3740. }
  3741. return true;
  3742. }
  3743.  
  3744. public boolean checkMultiBarrageReqs(int i) {
  3745. if(Server.playerHandler.players[i] == null) {
  3746. return false;
  3747. }
  3748. if (i == c.playerId)
  3749. return false;
  3750. if (c.inPits && Server.playerHandler.players[i].inPits)
  3751. return true;
  3752. if(!Server.playerHandler.players[i].inWild()) {
  3753. return false;
  3754. }
  3755. if(Config.COMBAT_LEVEL_DIFFERENCE && !c.inFunPk() && !Server.playerHandler.players[i].inFunPk()) {
  3756. int combatDif1 = c.getCombat().getCombatDifference(c.combatLevel, Server.playerHandler.players[i].combatLevel);
  3757. if(combatDif1 > c.wildLevel || combatDif1 > Server.playerHandler.players[i].wildLevel) {
  3758. c.sendMessage("Your combat level difference is too great to attack that player here.");
  3759. return false;
  3760. }
  3761. }
  3762.  
  3763. if(Config.SINGLE_AND_MULTI_ZONES) {
  3764. if(!Server.playerHandler.players[i].inMulti()) { // single combat zones
  3765. if(Server.playerHandler.players[i].underAttackBy != c.playerId && Server.playerHandler.players[i].underAttackBy != 0) {
  3766. return false;
  3767. }
  3768. if(Server.playerHandler.players[i].playerId != c.underAttackBy && c.underAttackBy != 0) {
  3769. c.sendMessage("You are already in combat.");
  3770. return false;
  3771. }
  3772. }
  3773. }
  3774. return true;
  3775. }
  3776.  
  3777. /**
  3778. *Weapon stand, walk, run, etc emotes
  3779. **/
  3780.  
  3781. public void getPlayerAnimIndex(String weaponName){
  3782. c.playerStandIndex = 0x328;
  3783. c.playerTurnIndex = 0x337;
  3784. c.playerWalkIndex = 0x333;
  3785. c.playerTurn180Index = 0x334;
  3786. c.playerTurn90CWIndex = 0x335;
  3787. c.playerTurn90CCWIndex = 0x336;
  3788. c.playerRunIndex = 0x338;
  3789.  
  3790. if(weaponName.contains("halberd") || weaponName.contains("guthan")) {
  3791. c.playerStandIndex = 809;
  3792. c.playerWalkIndex = 1146;
  3793. c.playerRunIndex = 1210;
  3794. return;
  3795. }
  3796. if(weaponName.contains("dharok")) {
  3797. c.playerStandIndex = 0x811;
  3798. c.playerWalkIndex = 0x67F;
  3799. c.playerRunIndex = 0x680;
  3800. return;
  3801. }
  3802. if(weaponName.contains("ahrim")) {
  3803. c.playerStandIndex = 809;
  3804. c.playerWalkIndex = 1146;
  3805. c.playerRunIndex = 1210;
  3806. return;
  3807. }
  3808. if(weaponName.contains("verac")) {
  3809. c.playerStandIndex = 0x328;
  3810. c.playerWalkIndex = 0x333;
  3811. c.playerRunIndex = 824;
  3812. return;
  3813. }
  3814. if (weaponName.contains("longsword") || weaponName.contains("scimitar") || weaponName.contains("silverlight") || weaponName.contains("korasi's")) {
  3815. c.playerStandIndex = 808;
  3816. c.playerRunIndex = 12023;
  3817. c.playerWalkIndex = 12024;
  3818. return;
  3819. }
  3820. if (weaponName.contains("wand") || weaponName.contains("spear")) {
  3821. c.playerStandIndex = 8980;
  3822. c.playerRunIndex = 1210;
  3823. c.playerWalkIndex = 1146;
  3824. return;
  3825. }
  3826. if(weaponName.contains("karil")) {
  3827. c.playerStandIndex = 2074;
  3828. c.playerWalkIndex = 2076;
  3829. c.playerRunIndex = 2077;
  3830. return;
  3831. }
  3832. if(weaponName.contains("2h sword") || weaponName.contains("godsword") || weaponName.contains("saradomin sw")) {
  3833. c.playerStandIndex = 7047;
  3834. c.playerWalkIndex = 7046;
  3835. c.playerRunIndex = 7039;
  3836. return;
  3837. }
  3838. if(weaponName.contains("bow")) {
  3839. c.playerStandIndex = 808;
  3840. c.playerWalkIndex = 819;
  3841. c.playerRunIndex = 824;
  3842. return;
  3843. }
  3844.  
  3845. switch(c.playerEquipment[c.playerWeapon]) {
  3846. case 18349: // rapier chaotic
  3847. case 13252:
  3848. case 13998:
  3849. c.playerStandIndex = 813;
  3850. c.playerWalkIndex = 1205;
  3851. c.playerRunIndex = 824;
  3852. break;
  3853. case 14014:
  3854. case 18355:
  3855. c.playerStandIndex = 808;
  3856. c.playerWalkIndex = 12024;
  3857. c.playerRunIndex = 12023;
  3858. break;
  3859. case 15486:
  3860. c.playerStandIndex = 8980;
  3861. c.playerWalkIndex = 1146;
  3862. c.playerRunIndex = 1210;
  3863. break;
  3864. case 14:
  3865. case 16:
  3866. c.playerStandIndex = 2074;
  3867. c.playerWalkIndex = 2076;
  3868. c.playerRunIndex = 2077;
  3869. break;
  3870. case 18353: // maul chaotic
  3871. case 16425:
  3872. case 16419:
  3873. c.playerStandIndex = 13217;
  3874. c.playerWalkIndex = 13218;
  3875. c.playerRunIndex = 13220;
  3876. break;
  3877. case 6082: // fixed device
  3878. c.playerStandIndex = 2316;
  3879. c.playerWalkIndex = 2317;
  3880. c.playerRunIndex = 2322;
  3881. break;
  3882. case 4151:
  3883. case 15441: // whip
  3884. case 15442: // whip
  3885. case 15443: // whip
  3886. case 15444: // whip
  3887. case 20:
  3888. c.playerStandIndex = 11973;
  3889. c.playerWalkIndex = 11975;
  3890. c.playerRunIndex = 1661;
  3891. break;
  3892. case 15039:
  3893. c.playerStandIndex = 12000;
  3894. c.playerWalkIndex = 1663;
  3895. c.playerRunIndex = 1664;
  3896. break;
  3897. case 10887:
  3898. c.playerStandIndex = 5869;
  3899. c.playerWalkIndex = 5867;
  3900. c.playerRunIndex = 5868;
  3901. break;
  3902. case 6528:
  3903. c.playerStandIndex = 0x811;
  3904. c.playerWalkIndex = 2064;
  3905. c.playerRunIndex = 1664;
  3906. break;
  3907. case 4153:
  3908. c.playerStandIndex = 1662;
  3909. c.playerWalkIndex = 1663;
  3910. c.playerRunIndex = 1664;
  3911. break;
  3912. case 15241:
  3913. c.playerStandIndex = 12155;
  3914. c.playerWalkIndex = 12154;
  3915. c.playerRunIndex = 12154;
  3916. break;
  3917. case 11694:
  3918. case 11696:
  3919. case 11730:
  3920. case 11698:
  3921. case 11700:
  3922. c.playerStandIndex = 4300;
  3923. c.playerWalkIndex = 4306;
  3924. c.playerRunIndex = 4305;
  3925. break;
  3926. case 1305:
  3927. c.playerStandIndex = 809;
  3928. break;
  3929. case 13994:
  3930. case 13274:
  3931. case 13266:
  3932. c.playerStandIndex = 7047;
  3933. c.playerWalkIndex = 7046;
  3934. c.playerRunIndex = 7039;
  3935. break;
  3936. case 1419:
  3937. c.playerStandIndex = 847;
  3938. c.playerWalkIndex = 9738;
  3939. c.playerRunIndex = 9739;
  3940. break;
  3941. }
  3942. }
  3943.  
  3944. /**
  3945. * Weapon emotes
  3946. **/
  3947.  
  3948. public int getWepAnim(String weaponName) {
  3949. if(c.playerEquipment[c.playerWeapon] <= 0) {
  3950. switch(c.fightMode) {
  3951. case 0:
  3952. return 422;
  3953. case 2:
  3954. return 423;
  3955. case 1:
  3956. return 451;
  3957. }
  3958. }
  3959. if(weaponName.contains("knife") || weaponName.contains("dart") || weaponName.contains("javelin") || weaponName.contains("thrownaxe")){
  3960. return 806;
  3961. }
  3962. if(weaponName.contains("halberd")) {
  3963. return 440;
  3964. }
  3965. if(weaponName.startsWith("dragon dagger")) {
  3966. return 402;
  3967. }
  3968. if(weaponName.endsWith("dagger")) {
  3969. return 412;
  3970. }
  3971. if(weaponName.contains("2h sword") || weaponName.contains("godsword") || weaponName.contains("saradomin sword")) {
  3972. switch(c.fightMode) {
  3973. case 0:
  3974. return 7041;
  3975. case 2:
  3976. return 7041;
  3977. case 1:
  3978. return 7041;
  3979. }
  3980. }
  3981. if(weaponName.contains("scimitar") || weaponName.contains("longsword") || weaponName.contains("korasi's")) {
  3982. switch(c.fightMode) {
  3983. case 0:
  3984. return 12029;
  3985. case 1: // New Scimmi models
  3986. return 12029;
  3987. case 2:
  3988. return 12029;
  3989. case 3:
  3990. return 12028;
  3991. }
  3992. }
  3993. if(weaponName.contains("rapier")) {
  3994. switch(c.fightMode) {
  3995. case 0:
  3996. return 386;
  3997. case 1:
  3998. return 386;
  3999. case 2:
  4000. return 386;
  4001. case 3:
  4002. return 386;
  4003. }
  4004. }
  4005. if(weaponName.contains("dharok")) {
  4006. switch(c.fightMode) {
  4007. case 0:
  4008. return 2066;
  4009. case 1:
  4010. return 2066;
  4011. case 2:
  4012. return 2066;
  4013. case 3:
  4014. return 2066;
  4015. }
  4016. }
  4017. if(weaponName.contains("sword")) {
  4018. return 451;
  4019. }
  4020. if(weaponName.contains("karil")) {
  4021. return 2075;
  4022. }
  4023. if(weaponName.contains("chaotic crossbow")) {
  4024. return 4230;
  4025. }
  4026. if(weaponName.contains("bow") && !weaponName.contains("'bow")) {
  4027. return 426;
  4028. }
  4029. if (weaponName.contains("'bow"))
  4030. return 4230;
  4031.  
  4032. switch(c.playerEquipment[c.playerWeapon]) { // if you don't want to use strings
  4033. case 6522:
  4034. return 2614;
  4035. case 13905:
  4036. return 2080;
  4037. case 16:
  4038. return 2075;
  4039. case 4153: // granite maul
  4040. return 1665;
  4041. case 4726: // guthan
  4042. case 14030:
  4043. return 2080;
  4044. case 13879:
  4045. case 13883:
  4046. return 806;
  4047. case 14484: // Dclaw
  4048. case 14406:
  4049. return 393;
  4050. case 15039: // Chaotic maul
  4051. return 2661;
  4052. case 4:
  4053. case 6:
  4054. return 10502;
  4055. case 12:
  4056. case 14:
  4057. return 4230;
  4058. case 15241:
  4059. return 12153;
  4060. case 13252:
  4061. case 13258:
  4062. case 13998:
  4063. return 12029;
  4064. case 13254:
  4065. case 13996:
  4066. return 402;
  4067. case 4747: // torag
  4068. case 14034:
  4069. return 0x814;
  4070. case 4710: // ahrim
  4071. case 14024:
  4072. return 406;
  4073. case 18353:
  4074. case 16425:
  4075. case 16419:
  4076. return 13055;
  4077. case 18349:
  4078. return 12028;
  4079. case 11716:
  4080. return 12006;
  4081. case 4755: // verac
  4082. case 14036:
  4083. return 2062;
  4084. case 4734: // karil
  4085. return 2075;
  4086. case 10887:
  4087. return 5865;
  4088. case 13994:
  4089. case 13274:
  4090. case 13266:
  4091. return 7041;
  4092. case 4151:
  4093. case 15441: // whip
  4094. case 15442: // whip
  4095. case 15443: // whip
  4096. case 15444: // whip
  4097. case 20:
  4098. return 1658;
  4099. case 6528:
  4100. return 2661;
  4101. case 1419:
  4102. return 382;
  4103. case 14026:
  4104. return 2066;
  4105. default:
  4106. return 451;
  4107. }
  4108. }
  4109.  
  4110. /**
  4111. * Block emotes
  4112. */
  4113. public int getBlockEmote() {
  4114. if (c.playerEquipment[c.playerShield] >= 8844 && c.playerEquipment[c.playerShield] <= 8850) {
  4115. return 4177;
  4116. }
  4117. switch(c.playerEquipment[c.playerWeapon]) {
  4118.  
  4119. case 19780:
  4120. return 12030;
  4121.  
  4122. case 11716:
  4123. return 12004;
  4124.  
  4125. case 4755:
  4126. return 2063;
  4127.  
  4128. case 10887:
  4129. return 5866;
  4130.  
  4131. case 4153:
  4132. return 1666;
  4133.  
  4134. case 15241:
  4135. return 12156;
  4136.  
  4137. case 15039:
  4138. return 12004;
  4139.  
  4140. case 18353:
  4141. case 16419:
  4142. return 13054;
  4143.  
  4144. case 18349:
  4145. return 13038;
  4146.  
  4147. case 4151:
  4148. case 15441: // whip
  4149. case 15442: // whip
  4150. case 15443: // whip
  4151. case 15444: // whip
  4152. case 20:
  4153. return 11974;
  4154.  
  4155. case 11694:
  4156. case 11698:
  4157. case 11700: // scimmy anim 12030
  4158. case 11696:
  4159. case 11730:
  4160. case 861:
  4161. return -1;
  4162. default:
  4163. return 404;
  4164. }
  4165. }
  4166.  
  4167. /**
  4168. * Weapon and magic attack speed!
  4169. **/
  4170.  
  4171. public int getAttackDelay(String s) {
  4172. if(c.usingMagic) {
  4173. switch(c.MAGIC_SPELLS[c.spellId][0]) {
  4174. case 12871: // ice blitz
  4175. case 13023: // shadow barrage
  4176. case 12891: // ice barrage
  4177. return 5;
  4178.  
  4179. default:
  4180. return 5;
  4181. }
  4182. }
  4183. if(c.playerEquipment[c.playerWeapon] == -1)
  4184. return 4;//unarmed
  4185.  
  4186. switch (c.playerEquipment[c.playerWeapon]) {
  4187. case 11235:
  4188. case 15701: // dark bow
  4189. case 15702: // dark bow
  4190. case 15703: // dark bow
  4191. case 15704: // dark bow
  4192. return 9;
  4193. case 13879:
  4194. return 8;
  4195. case 15241: // hand cannon
  4196. return 12156;
  4197. case 15037:
  4198. case 11730:
  4199. case 14:
  4200. return 4;
  4201. case 14484:
  4202. return 5;
  4203. case 13883:
  4204. return 6;
  4205. case 10887:
  4206. case 6528:
  4207. case 15039:
  4208. case 18353:
  4209. case 16:
  4210. case 16425:
  4211. case 16419:
  4212. case 13266:
  4213. case 13274:
  4214. case 13994:
  4215. return 7;
  4216. case 13905:
  4217. return 5;
  4218. case 12:
  4219. return 3;
  4220. }
  4221.  
  4222. if(s.endsWith("greataxe"))
  4223. return 7;
  4224. else if(s.equals("torags hammers"))
  4225. return 5;
  4226. else if(s.equals("guthans warspear"))
  4227. return 5;
  4228. else if(s.equals("veracs flail"))
  4229. return 5;
  4230. else if(s.equals("ahrims staff"))
  4231. return 6;
  4232. else if(s.contains("staff")){
  4233. if(s.contains("zamarok") || s.contains("guthix") || s.contains("saradomian") || s.contains("slayer") || s.contains("ancient"))
  4234. return 4;
  4235. else
  4236. return 5;
  4237. } else if(s.contains("bow")){
  4238. if(s.contains("composite") || s.equals("seercull"))
  4239. return 5;
  4240. else if (s.contains("aril"))
  4241. return 4;
  4242. else if(s.contains("Ogre"))
  4243. return 8;
  4244. else if(s.contains("short") || s.contains("hunt") || s.contains("sword"))
  4245. return 4;
  4246. else if(s.contains("long") || s.contains("crystal"))
  4247. return 6;
  4248. else if(s.contains("'bow"))
  4249. return 7;
  4250.  
  4251. return 5;
  4252. }
  4253. else if(s.contains("dagger"))
  4254. return 4;
  4255. else if(s.contains("godsword") || s.contains("2h"))
  4256. return 6;
  4257. else if(s.contains("longsword"))
  4258. return 5;
  4259. else if(s.contains("sword"))
  4260. return 4;
  4261. else if(s.contains("scimitar"))
  4262. return 4;
  4263. else if(s.contains("mace"))
  4264. return 5;
  4265. else if(s.contains("battleaxe"))
  4266. return 6;
  4267. else if(s.contains("pickaxe"))
  4268. return 5;
  4269. else if(s.contains("thrownaxe"))
  4270. return 5;
  4271. else if(s.contains("axe"))
  4272. return 5;
  4273. else if(s.contains("warhammer"))
  4274. return 6;
  4275. else if(s.contains("2h"))
  4276. return 7;
  4277. else if(s.contains("spear"))
  4278. return 5;
  4279. else if(s.contains("claw"))
  4280. return 4;
  4281. else if(s.contains("halberd"))
  4282. return 7;
  4283.  
  4284. //sara sword, 2400ms
  4285. else if(s.equals("granite maul"))
  4286. return 7;
  4287. else if(s.equals("toktz-xil-ak"))//sword
  4288. return 4;
  4289. else if(s.equals("tzhaar-ket-em"))//mace
  4290. return 5;
  4291. else if(s.equals("tzhaar-ket-om"))//maul
  4292. return 7;
  4293. else if(s.equals("toktz-xil-ek"))//knife
  4294. return 4;
  4295. else if(s.equals("toktz-xil-ul"))//rings
  4296. return 4;
  4297. else if(s.equals("toktz-mej-tal"))//staff
  4298. return 6;
  4299. else if(s.contains("whip"))
  4300. return 4;
  4301. else if(s.contains("dart"))
  4302. return 3;
  4303. else if(s.contains("knife"))
  4304. return 3;
  4305. else if(s.contains("javelin"))
  4306. return 6;
  4307. return 5;
  4308. }
  4309. /**
  4310. * How long it takes to hit your enemy
  4311. **/
  4312. public int getHitDelay(String weaponName) {
  4313. if(c.usingMagic) {
  4314. switch(c.MAGIC_SPELLS[c.spellId][0]) {
  4315. case 12891:
  4316. return 4;
  4317. case 12871:
  4318. return 6;
  4319. default:
  4320. return 4;
  4321. }
  4322. } else {
  4323.  
  4324. if(weaponName.contains("knife") || weaponName.contains("dart") || weaponName.contains("javelin") || weaponName.contains("thrownaxe") || c.playerEquipment[c.playerWeapon] == 13879 || c.playerEquipment[c.playerWeapon] == 13883){
  4325. return 3;
  4326. }
  4327. if(weaponName.contains("cross") || weaponName.contains("c'bow") || weaponName.contains("chaotic crossbow")) {
  4328. return 4;
  4329. }
  4330. if(weaponName.contains("bow") && !c.dbowSpec) {
  4331. return 4;
  4332. } else if (c.dbowSpec) {
  4333. return 4;
  4334. }
  4335.  
  4336. switch(c.playerEquipment[c.playerWeapon]) {
  4337. case 6522: // Toktz-xil-ul
  4338. return 3;
  4339.  
  4340.  
  4341. default:
  4342. return 2;
  4343. }
  4344. }
  4345. }
  4346.  
  4347. public int getRequiredDistance() {
  4348. if (c.followId > 0 && c.freezeTimer <= 0 && !c.isMoving)
  4349. return 2;
  4350. else if(c.followId > 0 && c.freezeTimer <= 0 && c.isMoving) {
  4351. return 3;
  4352. } else {
  4353. return 1;
  4354. }
  4355. }
  4356.  
  4357. public boolean usingHally() {
  4358. switch(c.playerEquipment[c.playerWeapon]) {
  4359. case 3190:
  4360. case 3192:
  4361. case 3194:
  4362. case 3196:
  4363. case 3198:
  4364. case 3200:
  4365. case 3202:
  4366. case 3204:
  4367. return true;
  4368.  
  4369. default:
  4370. return false;
  4371. }
  4372. }
  4373.  
  4374. /**
  4375. * Melee
  4376. **/
  4377.  
  4378. public int calculateMeleeAttack() {
  4379. int attackLevel = c.playerLevel[0];
  4380. //2, 5, 11, 18, 19
  4381. if (c.prayerActive[2]) {
  4382. attackLevel += c.getLevelForXP(c.playerXP[c.playerAttack]) * 0.05;
  4383. } else if (c.prayerActive[7]) {
  4384. attackLevel += c.getLevelForXP(c.playerXP[c.playerAttack]) * 0.1;
  4385. } else if (c.prayerActive[15]) {
  4386. attackLevel += c.getLevelForXP(c.playerXP[c.playerAttack]) * 0.15;
  4387. } else if (c.prayerActive[24]) {
  4388. attackLevel += c.getLevelForXP(c.playerXP[c.playerAttack]) * 0.18;
  4389. } else if (c.prayerActive[25]) {
  4390. attackLevel += c.getLevelForXP(c.playerXP[c.playerAttack]) * 0.22;
  4391. } else if (c.curseActive[19]) { // turmoil
  4392. attackLevel += c.getLevelForXP(c.playerXP[c.playerAttack]) * 0.17 + c.getatt;
  4393. }
  4394. if (c.fullVoidEliteMelee() || c.fullVoidMelee() || c.fullStatius() || c.fullVesta() || c.fullTorva())
  4395. attackLevel += c.getLevelForXP(c.playerXP[c.playerAttack]) * 0.2;
  4396. attackLevel *= c.specAccuracy;
  4397. int i = c.playerBonus[bestMeleeAtk()];
  4398. i += c.bonusAttack;
  4399. if (c.playerEquipment[c.playerAmulet] == 11128 && c.playerEquipment[c.playerWeapon] == 6528) {
  4400. i *= 1.30;
  4401. }
  4402. return (int)(attackLevel + (attackLevel * 0.17) + (i + i * 0.05));
  4403. }
  4404. public int bestMeleeAtk()
  4405. {
  4406. if(c.playerBonus[0] > c.playerBonus[1] && c.playerBonus[0] > c.playerBonus[2])
  4407. return 0;
  4408. if(c.playerBonus[1] > c.playerBonus[0] && c.playerBonus[1] > c.playerBonus[2])
  4409. return 1;
  4410. return c.playerBonus[2] <= c.playerBonus[1] || c.playerBonus[2] <= c.playerBonus[0] ? 0 : 2;
  4411. }
  4412.  
  4413. public int calculateMeleeMaxHit() {
  4414. double maxHit = 0;
  4415. int rangeBonus = c.playerBonus[10];
  4416. int range = c.playerLevel[4];
  4417. int magicBonus = c.playerBonus[10];
  4418. int magic = c.playerLevel[6];
  4419. int defBonus = c.playerBonus[10];
  4420. int defence = c.playerLevel[1];
  4421. int attackkBonus = c.playerBonus[10];
  4422. int attack = c.playerLevel[0];
  4423. int strBonus = c.playerBonus[10];
  4424. int strength = c.playerLevel[2];
  4425. int lvlForXP = c.getLevelForXP(c.playerXP[2]);
  4426. if(c.curseActive[10]) { // Leech Attack
  4427. attack += (int)(lvlForXP * .10 + c.getstr);
  4428. }
  4429. if(c.curseActive[13]) { // Leech Defense
  4430. defence += (int)(lvlForXP * .10 + c.getstr);
  4431. }
  4432. if(c.curseActive[14]) { // Leech Strength
  4433. strength += (int)(lvlForXP * .10 + c.getstr);
  4434. }
  4435. if(c.curseActive[11]) { // Leech Ranged
  4436. range += (int)(lvlForXP * .10 + c.getstr);
  4437. }
  4438. if(c.curseActive[12]) { // Leech Magic
  4439. magic += (int)(lvlForXP * .10 + c.getstr);
  4440. }
  4441.  
  4442.  
  4443. if(c.prayerActive[1]) {
  4444. strength += (int)(lvlForXP * .05);
  4445. } else
  4446. if(c.prayerActive[6]) {
  4447. strength += (int)(lvlForXP * .1);
  4448. } else
  4449. if(c.prayerActive[14]) {
  4450. strength += (int)(lvlForXP * .15);
  4451. } else
  4452. if(c.prayerActive[24]) {
  4453. strength += (int)(lvlForXP * .18);
  4454. } else
  4455. if(c.prayerActive[25]) {
  4456. strength += (int)(lvlForXP * .23);
  4457. }
  4458. if(c.curseActive[19]) { // turmoil
  4459. strength += (int)(lvlForXP * .24 + c.getstr);
  4460. }
  4461. if(c.playerEquipment[c.playerHat] == 2526 && c.playerEquipment[c.playerChest] == 2520 && c.playerEquipment[c.playerLegs] == 2522) {
  4462. maxHit += (maxHit * 10 / 100);
  4463. }
  4464. if(c.playerEquipment[c.playerShield] == 20072) {
  4465. maxHit *= 1.03;
  4466. }
  4467. if(c.fullTorva()) {
  4468. maxHit *= 1.18;
  4469. }
  4470. if(c.fullStatius()) {
  4471. maxHit *= 1.16;
  4472. }
  4473. if(c.fullVesta()) {
  4474. maxHit *= 1.17;
  4475. }
  4476. if (c.fullVoidEliteMelee()) {
  4477. maxHit *= 1.15;
  4478. }
  4479. if (c.fullVoidMelee())
  4480. maxHit = (int)(maxHit * 1.15);
  4481. maxHit += 1.05D + (double)(strBonus * strength) * 0.00175D;
  4482. maxHit += (double)strength * 0.11D;
  4483.  
  4484. if (c.playerEquipment[c.playerWeapon] == 4718 && c.playerEquipment[c.playerHat] == 4716 && c.playerEquipment[c.playerChest] == 4720 && c.playerEquipment[c.playerLegs] == 4722) {
  4485. maxHit += (c.getPA().getLevelForXP(c.playerXP[3]) - c.playerLevel[3]) / 2;
  4486. }
  4487.  
  4488. if (c.specDamage > 1)
  4489. maxHit = (int)(maxHit * c.specDamage);
  4490.  
  4491. if (maxHit < 0)
  4492. maxHit = 1;
  4493.  
  4494. if (c.playerEquipment[c.playerAmulet] == 11128
  4495. && c.playerEquipment[c.playerWeapon] == 6528)
  4496. {
  4497.  
  4498. maxHit *= 1.20;
  4499.  
  4500. }
  4501. return (int)Math.floor(maxHit);
  4502.  
  4503. }
  4504.  
  4505. public int calculateMeleeDefence()
  4506. {
  4507. int defenceLevel = c.playerLevel[1];
  4508. int i = c.playerBonus[bestMeleeDef()];
  4509. if (c.prayerActive[0]) {
  4510. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.05;
  4511. } else if (c.prayerActive[5]) {
  4512. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.1;
  4513. } else if (c.prayerActive[13]) {
  4514. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.15;
  4515. } else if (c.prayerActive[24]) {
  4516. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.2;
  4517. } else if (c.prayerActive[25]) {
  4518. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.25;
  4519. }
  4520. return (int)(defenceLevel + (defenceLevel * 0.15) + (i + i * 0.05));
  4521. }
  4522.  
  4523. public int bestMeleeDef()
  4524. {
  4525. if(c.playerBonus[5] > c.playerBonus[6] && c.playerBonus[5] > c.playerBonus[7])
  4526. return 5;
  4527. if(c.playerBonus[6] > c.playerBonus[5] && c.playerBonus[6] > c.playerBonus[7])
  4528. return 6;
  4529. return c.playerBonus[7] <= c.playerBonus[5] || c.playerBonus[7] <= c.playerBonus[6] ? 5 : 7;
  4530. }
  4531.  
  4532. /**
  4533. * Range
  4534. **/
  4535.  
  4536. public int calculateRangeAttack() {
  4537. int attackLevel = c.playerLevel[4];
  4538. attackLevel *= c.specAccuracy;
  4539. if (c.fullVoidRange() || c.fullPernix() || c.fullVoidEliteRange())
  4540. attackLevel += c.getLevelForXP(c.playerXP[c.playerRanged]) * 0.2;
  4541. if (c.prayerActive[3])
  4542. attackLevel *= 1.05;
  4543. else if (c.prayerActive[11])
  4544. attackLevel *= 1.92;
  4545. else if (c.prayerActive[19])
  4546. attackLevel *= 1.15;
  4547. //dbow spec
  4548. if (c.fullVoidRange() && c.specAccuracy > 1.15) {
  4549. attackLevel *= 1.95;
  4550. }
  4551. if (c.fullVoidRange()) {
  4552. attackLevel *= 1.95;
  4553. }
  4554. if (c.fullVoidEliteRange() && c.specAccuracy > 1.15) {
  4555. attackLevel *= 1.95;
  4556. }
  4557. if (c.fullVoidEliteRange()) {
  4558. attackLevel *= 1.95;
  4559. }
  4560. if (c.zaryteBow()) {
  4561. attackLevel *= 1.95;
  4562. }
  4563. if (c.cCbow()) {
  4564. attackLevel *= 1.96;
  4565. }
  4566. if (c.fullPernix()) {
  4567. attackLevel *= 1.95;
  4568. }
  4569. if (c.faithfulShield()) {
  4570. attackLevel *= 1.30;
  4571. }
  4572. return (int) (attackLevel + (c.playerBonus[4] * 2.15));
  4573. }
  4574.  
  4575. public int calculateRangeDefence() {
  4576. int defenceLevel = c.playerLevel[1];
  4577. if (c.prayerActive[0]) {
  4578. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.05;
  4579. } else if (c.prayerActive[5]) {
  4580. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.1;
  4581. } else if (c.prayerActive[13]) {
  4582. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.17;
  4583. } else if (c.prayerActive[24]) {
  4584. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.2;
  4585. } else if (c.prayerActive[25]) {
  4586. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.25;
  4587. } else if (c.curseActive[19]) { // turmoil
  4588. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.15 + c.getdef;
  4589. }
  4590. return (int) (defenceLevel + c.playerBonus[9] + (c.playerBonus[9] / 2));
  4591. }
  4592.  
  4593. public boolean usingBolts() {
  4594. 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;
  4595. }
  4596. public int rangeMaxHit() {
  4597. int weapon = c.playerEquipment[c.playerWeapon];
  4598. int rangeLevel = c.playerLevel[4];
  4599. double modifier = 1.0;
  4600. double wtf = c.specDamage;
  4601. int itemUsed = c.usingBow ? c.lastArrowUsed : c.lastWeaponUsed;
  4602. if (c.prayerActive[3])
  4603. modifier += 0.07;
  4604. else if (c.prayerActive[11])
  4605. modifier += 0.19;
  4606. else if (c.prayerActive[19])
  4607. modifier += 0.16;
  4608. if (c.playerEquipment[c.playerWeapon] == 9185)
  4609. modifier += 0.25;
  4610. if (c.playerEquipment[c.playerWeapon] == 18357)
  4611. modifier += 0.28;
  4612. if (c.playerEquipment[c.playerWeapon] == 20172)
  4613. modifier += 0.26;
  4614. if (c.playerEquipment[c.playerAmulet] == 15126)
  4615. modifier += 0.05;
  4616. if (c.fullVoidRange())
  4617. modifier += 0.15;
  4618. if (c.fullVoidEliteRange())
  4619. modifier += 0.16;
  4620. if (c.zaryteBow())
  4621. modifier +=.30;
  4622. if (c.cCbow())
  4623. modifier += .42;
  4624. if (c.faithfulShield())
  4625. modifier +=.06;
  4626. if (c.fullPernix())
  4627. modifier += .20;
  4628. double c = modifier * rangeLevel;
  4629. int rangeStr = getRangeStr(itemUsed);
  4630. double max =(c + 18) * (rangeStr + 64) / 640;
  4631. if (wtf != 1)
  4632. max *= wtf;
  4633. if (max < 1)
  4634. max = 1;
  4635. return (int)max;
  4636. }
  4637.  
  4638. public int getRangeStr(int i) {
  4639. int str = 0;
  4640. int[][] data = {
  4641. {877, 10}, {9140, 46}, {9145, 36}, {9141, 64},
  4642. {9142, 82}, {9143,100}, {9144,115}, {9236, 14},
  4643. {9237, 30}, {9238, 48}, {9239, 66}, {9240, 83},
  4644. {9241, 85}, {9242,103}, {9243,105}, {9244,117},
  4645. {9245,120}, {882, 7}, {884, 10}, {886, 16},
  4646. {888, 22}, {890, 31}, {892, 49},{15243, 60}, {4740, 55},
  4647. {11212, 60}, {806, 1}, {807, 3}, {808, 4},
  4648. {809, 7}, {810,10}, {811,14}, {11230,20},
  4649. {864, 3}, {863, 4}, {865, 7}, {866, 10},
  4650. {867, 14}, {868, 24}, {825, 6}, {826,10},
  4651. {827,12}, {828,18}, {829,28}, {830,42},
  4652. {800, 5}, {801, 7}, {802,11}, {803,16},
  4653. {804,23}, {805,36}, {9976, 0}, {9977, 15},
  4654. {4212, 70}, {4214, 70}, {4215, 70}, {4216, 70},
  4655. {4217, 70}, {4218, 70}, {4219, 70}, {4220, 70},
  4656. {4221, 70}, {4222, 70}, {4223, 70}, {6522, 49},
  4657. {10034, 15},
  4658. };
  4659. for(int l = 0; l < data.length; l++) {
  4660. if(i == data[l][0]) {
  4661. str = data[l][1];
  4662. }
  4663. }
  4664. return str;
  4665. }
  4666.  
  4667. /*public int rangeMaxHit() {
  4668. int rangehit = 0;
  4669. rangehit += c.playerLevel[4] / 7.5;
  4670. int weapon = c.lastWeaponUsed;
  4671. int Arrows = c.lastArrowUsed;
  4672. if (weapon == 4223) {//Cbow 1/10
  4673. rangehit = 2;
  4674. rangehit += c.playerLevel[4] / 7;
  4675. } else if (weapon == 4222) {//Cbow 2/10
  4676. rangehit = 3;
  4677. rangehit += c.playerLevel[4] / 7;
  4678. } else if (weapon == 4221) {//Cbow 3/10
  4679. rangehit = 3;
  4680. rangehit += c.playerLevel[4] / 6.5;
  4681. } else if (weapon == 4220) {//Cbow 4/10
  4682. rangehit = 4;
  4683. rangehit += c.playerLevel[4] / 6.5;
  4684. } else if (weapon == 4219) {//Cbow 5/10
  4685. rangehit = 4;
  4686. rangehit += c.playerLevel[4] / 6;
  4687. } else if (weapon == 4218) {//Cbow 6/10
  4688. rangehit = 5;
  4689. rangehit += c.playerLevel[4] / 6;
  4690. } else if (weapon == 4217) {//Cbow 7/10
  4691. rangehit = 5;
  4692. rangehit += c.playerLevel[4] / 5.5;
  4693. } else if (weapon == 4216) {//Cbow 8/10
  4694. rangehit = 6;
  4695. rangehit += c.playerLevel[4] / 5.5;
  4696. } else if (weapon == 4215) {//Cbow 9/10
  4697. rangehit = 6;
  4698. rangehit += c.playerLevel[4] / 5;
  4699. } else if (weapon == 4214) {//Cbow Full
  4700. rangehit = 7;
  4701. rangehit += c.playerLevel[4] / 5;
  4702. } else if (weapon == 6522) {
  4703. rangehit = 5;
  4704. rangehit += c.playerLevel[4] / 6;
  4705. } else if (weapon == 9029) {//dragon darts
  4706. rangehit = 8;
  4707. rangehit += c.playerLevel[4] / 10;
  4708. } else if (weapon == 811 || weapon == 868) {//rune darts
  4709. rangehit = 2;
  4710. rangehit += c.playerLevel[4] / 8.5;
  4711. } else if (weapon == 13879) {
  4712. rangehit = 10;
  4713. rangehit += c.playerLevel[4] / 17;
  4714. } else if (weapon == 13880) {
  4715. rangehit = 10;
  4716. rangehit += c.playerLevel[4] / 17;
  4717. } else if (weapon == 13881) {
  4718. rangehit = 10;
  4719. rangehit += c.playerLevel[4] / 17;
  4720. } else if (weapon == 13882) {
  4721. rangehit = 10;
  4722. rangehit += c.playerLevel[4] / 17;
  4723. } else if (weapon == 13883) {
  4724. rangehit = 7;
  4725. rangehit += c.playerLevel[4] / 17;
  4726. } else if (weapon == 20171) {
  4727. rangehit = 11;
  4728. rangehit += c.playerLevel[4] / 17;
  4729. } else if (weapon == 18357) {
  4730. rangehit = 12;
  4731. rangehit += c.playerLevel[4] / 17;
  4732. } else if (weapon == 15241) {
  4733. rangehit = 10;
  4734. rangehit += c.playerLevel[4] / 17;
  4735. } else if (weapon == 810 || weapon == 867) {//adamant darts
  4736. rangehit = 2;
  4737. rangehit += c.playerLevel[4] / 9;
  4738. } else if (weapon == 809 || weapon == 866) {//mithril darts
  4739. rangehit = 2;
  4740. rangehit += c.playerLevel[4] / 9.5;
  4741. } else if (weapon == 808 || weapon == 865) {//Steel darts
  4742. rangehit = 2;
  4743. rangehit += c.playerLevel[4] / 10;
  4744. } else if (weapon == 807 || weapon == 863) {//Iron darts
  4745. rangehit = 2;
  4746. rangehit += c.playerLevel[4] / 10.5;
  4747. } else if (weapon == 806 || weapon == 864) {//Bronze darts
  4748. rangehit = 1;
  4749. rangehit += c.playerLevel[4] / 11;
  4750. } else if (Arrows == 4740 && weapon == 4734) {//BoltRacks
  4751. rangehit = 3;
  4752. rangehit += c.playerLevel[4] / 6;
  4753. } else if (Arrows == 4740 && weapon == 14032) {//BoltRacks
  4754. rangehit = 3;
  4755. rangehit += c.playerLevel[4] / 6;
  4756. } else if (Arrows == 15243) {//Hand cannon shots
  4757. rangehit = 4;
  4758. rangehit += c.playerLevel[4] / 6;
  4759. } else if (Arrows == 11212) {//dragon arrows
  4760. rangehit = 4;
  4761. rangehit += c.playerLevel[4] / 5.5;
  4762. } else if (Arrows == 892) {//rune arrows
  4763. rangehit = 3;
  4764. rangehit += c.playerLevel[4] / 6;
  4765. } else if (Arrows == 890) {//adamant arrows
  4766. rangehit = 2;
  4767. rangehit += c.playerLevel[4] / 7;
  4768. } else if (Arrows == 888) {//mithril arrows
  4769. rangehit = 2;
  4770. rangehit += c.playerLevel[4] / 7.5;
  4771. } else if (Arrows == 886) {//steel arrows
  4772. rangehit = 2;
  4773. rangehit += c.playerLevel[4] / 8;
  4774. } else if (Arrows == 884) {//Iron arrows
  4775. rangehit = 2;
  4776. rangehit += c.playerLevel[4] / 9;
  4777. } else if (Arrows == 882) {//Bronze arrows
  4778. rangehit = 1;
  4779. rangehit += c.playerLevel[4] / 9.5;
  4780. } else if (Arrows == 9244) {
  4781. rangehit = 8;
  4782. rangehit += c.playerLevel[4] / 3;
  4783. } else if (Arrows == 9139) {
  4784. rangehit = 12;
  4785. rangehit += c.playerLevel[4] / 4;
  4786. } else if (Arrows == 9140) {
  4787. rangehit = 2;
  4788. rangehit += c.playerLevel[4] / 7;
  4789. } else if (Arrows == 9141) {
  4790. rangehit = 3;
  4791. rangehit += c.playerLevel[4] / 6;
  4792. } else if (Arrows == 9142) {
  4793. rangehit = 4;
  4794. rangehit += c.playerLevel[4] / 6;
  4795. } else if (Arrows == 9143) {
  4796. rangehit = 7;
  4797. rangehit += c.playerLevel[4] / 5;
  4798. } else if (Arrows == 9144) {
  4799. rangehit = 7;
  4800. rangehit += c.playerLevel[4] / 4.5;
  4801. }
  4802. int bonus = 0;
  4803. bonus -= rangehit / 10;
  4804. rangehit += bonus;
  4805. if (c.specDamage != 1)
  4806. rangehit *= c.specDamage;
  4807. if (rangehit == 0)
  4808. rangehit++;
  4809. if (c.fullVoidRange()) {
  4810. rangehit *= 1.10;
  4811. }
  4812. if (c.fullVoidEliteRange()) {
  4813. rangehit *= 1.12;
  4814. }
  4815. if (c.prayerActive[3])
  4816. rangehit *= 1.05;
  4817. else if (c.prayerActive[11])
  4818. rangehit *= 1.10;
  4819. else if (c.prayerActive[19])
  4820. rangehit *= 1.15;
  4821. return rangehit;
  4822. }*/
  4823.  
  4824. public boolean properBolts() {
  4825. return c.playerEquipment[c.playerArrows] >= 9140 && c.playerEquipment[c.playerArrows] <= 9144
  4826. || c.playerEquipment[c.playerArrows] >= 9240 && c.playerEquipment[c.playerArrows] <= 9244 || c.playerEquipment[c.playerArrows] == 15243;
  4827. }
  4828.  
  4829. public int correctBowAndArrows() {
  4830. //if (usingBolts())
  4831. //return -1;
  4832. switch(c.playerEquipment[c.playerWeapon]) {
  4833.  
  4834. case 843:
  4835. case 845:
  4836. case 839:
  4837. case 841:
  4838. return 884;
  4839.  
  4840. case 847:
  4841. case 849:
  4842. return 886;
  4843.  
  4844. case 851:
  4845. case 853:
  4846. return 888;
  4847.  
  4848. case 855:
  4849. case 857:
  4850. return 890;
  4851.  
  4852. case 859:
  4853. case 861:
  4854. return 892;
  4855.  
  4856. case 4734:
  4857. case 4935:
  4858. case 4936:
  4859. case 4937:
  4860. case 14032:
  4861. return 4740;
  4862.  
  4863. case 11235:
  4864. case 14481:
  4865. case 14482:
  4866. case 20171:
  4867. return 11212;
  4868.  
  4869. case 15241:
  4870. return 15243;
  4871.  
  4872. case 18357:
  4873. return 9244;
  4874. }
  4875. return -1;
  4876. }
  4877.  
  4878. public int getRangeStartGFX() {
  4879. switch(c.rangeItemUsed) {
  4880.  
  4881. case 863:
  4882. return 220;
  4883. case 864:
  4884. return 219;
  4885. case 865:
  4886. return 221;
  4887. case 866: // knives
  4888. return 223;
  4889. case 867:
  4890. return 224;
  4891. case 868:
  4892. return 225;
  4893. case 869:
  4894. return 222;
  4895.  
  4896. case 806:
  4897. return 232;
  4898. case 807:
  4899. return 233;
  4900. case 808:
  4901. return 234;
  4902. case 809: // darts
  4903. return 235;
  4904. case 810:
  4905. return 236;
  4906. case 811:
  4907. return 237;
  4908.  
  4909. case 825:
  4910. return 206;
  4911. case 826:
  4912. return 207;
  4913. case 827: // javelin
  4914. return 208;
  4915. case 828:
  4916. return 209;
  4917. case 829:
  4918. return 210;
  4919. case 830:
  4920. return 211;
  4921.  
  4922. case 800:
  4923. return 42;
  4924. case 801:
  4925. return 43;
  4926. case 802:
  4927. return 44; // axes
  4928. case 803:
  4929. return 45;
  4930. case 804:
  4931. return 46;
  4932. case 805:
  4933. return 48;
  4934.  
  4935. case 882:
  4936. return 19;
  4937.  
  4938. case 884:
  4939. return 18;
  4940.  
  4941. case 886:
  4942. return 20;
  4943.  
  4944. case 888:
  4945. return 21;
  4946.  
  4947. case 890:
  4948. return 22;
  4949.  
  4950. case 892:
  4951. return 24;
  4952.  
  4953. case 11212:
  4954. return 26;
  4955.  
  4956. case 2:
  4957. case 4212:
  4958. case 4214:
  4959. case 4215:
  4960. case 4216:
  4961. case 4217:
  4962. case 4218:
  4963. case 4219:
  4964. case 4220:
  4965. case 4221:
  4966. case 4222:
  4967. case 4223:
  4968. return 250;
  4969.  
  4970. }
  4971. return -1;
  4972. }
  4973.  
  4974. public void drawback() {
  4975. if (c.playerEquipment[c.playerArrows] == 882){
  4976. c.gfx0(18);
  4977. }
  4978. /*else if (playerEquipment[playerWeapon] == 13649){
  4979. javerlin(105, 1190);
  4980. }
  4981. else if (playerEquipment[playerWeapon] == 13650){
  4982. thaxe(105, 1195);
  4983. }*/
  4984. else if (c.playerEquipment[c.playerArrows] == 864){
  4985. c.gfx0(219);
  4986. }
  4987. else if (c.playerEquipment[c.playerArrows] == 863){
  4988. c.gfx0(220);
  4989. }
  4990. else if (c.playerEquipment[c.playerArrows] == 865){
  4991. c.gfx0(221);
  4992. }
  4993. else if (c.playerEquipment[c.playerArrows] == 866){
  4994. c.gfx0(223);
  4995. }
  4996. else if (c.playerEquipment[c.playerArrows] == 867){
  4997. c.gfx0(224);
  4998. }
  4999. else if (c.playerEquipment[c.playerArrows] == 868){
  5000. c.gfx0(225);
  5001. }
  5002. else if (c.playerEquipment[c.playerArrows] == 869){
  5003. c.gfx0(222);
  5004. }
  5005. else if (c.playerEquipment[c.playerArrows] == 884) {
  5006. c.gfx0(19);
  5007. }
  5008. else if (c.playerEquipment[c.playerArrows] == 888) {
  5009. c.gfx0(21);
  5010. }
  5011. else if (c.playerEquipment[c.playerArrows] == 890) {
  5012. c.gfx0(22);
  5013. }
  5014. else if (c.playerEquipment[c.playerArrows] == 11212) {
  5015. c.gfx0(26);
  5016. }
  5017. else if (c.playerEquipment[c.playerArrows] == 892) {
  5018. c.gfx0(24);
  5019.  
  5020. }
  5021. else if (c.playerEquipment[c.playerArrows] == 9244) {
  5022. c.gfx0(28);
  5023.  
  5024. }
  5025. else if (c.playerEquipment[c.playerArrows] == 725) {
  5026. c.gfx0(28);
  5027.  
  5028. }
  5029. else if (c.playerEquipment[c.playerArrows] == 9340) {
  5030. c.gfx0(28);
  5031.  
  5032. }
  5033. }
  5034.  
  5035.  
  5036. public int getRangeProjectileGFX() {
  5037. if (c.dbowSpec) {
  5038. return 1099;
  5039. }
  5040. if(c.bowSpecShot > 0) {
  5041. switch(c.rangeItemUsed) {
  5042. default:
  5043. return 249;
  5044. }
  5045. }
  5046. if (c.playerEquipment[c.playerWeapon] == 9185 || c.playerEquipment[c.playerWeapon] == 18357)
  5047. return 27;
  5048. switch(c.rangeItemUsed) {
  5049. case 13883:
  5050. return 1839;
  5051. case 13882:
  5052. case 13881:
  5053. case 13880:
  5054. case 13879:
  5055. return 1837;
  5056. case 863:
  5057. return 213;
  5058. case 864:
  5059. return 212;
  5060. case 865:
  5061. return 214;
  5062. case 866: // knives
  5063. return 216;
  5064. case 867:
  5065. return 217;
  5066. case 868:
  5067. return 218;
  5068. case 869:
  5069. return 215;
  5070.  
  5071. case 15241:
  5072. return 2143;
  5073.  
  5074. case 806:
  5075. return 226;
  5076. case 807:
  5077. return 227;
  5078. case 808:
  5079. return 228;
  5080. case 809: // darts
  5081. return 229;
  5082. case 810:
  5083. return 230;
  5084. case 811:
  5085. return 231;
  5086.  
  5087. case 825:
  5088. return 200;
  5089. case 826:
  5090. return 201;
  5091. case 827: // javelin
  5092. return 202;
  5093. case 828:
  5094. return 203;
  5095. case 829:
  5096. return 204;
  5097. case 830:
  5098. return 205;
  5099.  
  5100. case 6522: // Toktz-xil-ul
  5101. return 442;
  5102.  
  5103. case 800:
  5104. return 36;
  5105. case 801:
  5106. return 35;
  5107. case 802:
  5108. return 37; // axes
  5109. case 803:
  5110. return 38;
  5111. case 804:
  5112. return 39;
  5113. case 805:
  5114. return 40;
  5115.  
  5116. case 882:
  5117. return 10;
  5118.  
  5119. case 884:
  5120. return 9;
  5121.  
  5122. case 886:
  5123. return 11;
  5124.  
  5125. case 888:
  5126. return 12;
  5127.  
  5128. case 890:
  5129. return 13;
  5130.  
  5131. case 892:
  5132. return 15;
  5133.  
  5134. case 11212:
  5135. return 17;
  5136.  
  5137. case 4740: // bolt rack
  5138. return 27;
  5139.  
  5140.  
  5141. case 2:
  5142. case 4212:
  5143. case 4214:
  5144. case 4215:
  5145. case 4216:
  5146. case 4217:
  5147. case 4218:
  5148. case 4219:
  5149. case 4220:
  5150. case 4221:
  5151. case 4222:
  5152. case 4223:
  5153. case 20171:
  5154. case 18357:
  5155. return 249;
  5156.  
  5157.  
  5158. }
  5159. return -1;
  5160. }
  5161.  
  5162. public int getProjectileSpeed() {
  5163. if (c.dbowSpec)
  5164. return 100;
  5165. return 70;
  5166. }
  5167.  
  5168. public int getProjectileShowDelay() {
  5169. switch(c.playerEquipment[c.playerWeapon]) {
  5170. case 863:
  5171. case 864:
  5172. case 865:
  5173. case 866: // knives
  5174. case 867:
  5175. case 868:
  5176. case 869:
  5177.  
  5178. case 806:
  5179. case 807:
  5180. case 808:
  5181. case 809: // darts
  5182. case 810:
  5183. case 811:
  5184.  
  5185. case 825:
  5186. case 826:
  5187. case 827: // javelin
  5188. case 828:
  5189. case 829:
  5190. case 830:
  5191.  
  5192. case 800:
  5193. case 801:
  5194. case 802:
  5195. case 803: // axes
  5196. case 804:
  5197. case 805:
  5198.  
  5199. case 4734:
  5200. case 14032:
  5201. case 9185:
  5202. case 18357:
  5203. case 4935:
  5204. case 4936:
  5205. case 4937:
  5206. case 20172:
  5207. case 15241:
  5208. return 15;
  5209.  
  5210.  
  5211. default:
  5212. return 5;
  5213. }
  5214. }
  5215.  
  5216. /**
  5217. * Mage
  5218. **/
  5219.  
  5220. public static int finalMagicDamage(Client c) {
  5221. double damage = c.MAGIC_SPELLS[c.oldSpellId][6];
  5222. double damageMultiplier = 1;
  5223. if (c.playerLevel[c.playerMagic] > c.getLevelForXP(c.playerXP[6])
  5224. && c.getLevelForXP(c.playerXP[6]) >= 95)
  5225. damageMultiplier += .03 * (c.playerLevel[c.playerMagic] - 99);
  5226. else
  5227. damageMultiplier = 1;
  5228. switch (c.playerEquipment[c.playerWeapon]) {
  5229. case 18371: // Gravite Staff
  5230. damageMultiplier += .05;
  5231. break;
  5232. case 4675: // Ancient Staff
  5233. case 4710: // Ahrim's Staff
  5234. case 4862: // Ahrim's Staff
  5235. case 4864: // Ahrim's Staff
  5236. case 4865: // Ahrim's Staff
  5237. case 6914: // Master Wand
  5238. case 8841: // Void Knight Mace
  5239. case 13867: // Zuriel's Staff
  5240. case 13869: // Zuriel's Staff (Deg)
  5241. damageMultiplier += .10;
  5242. break;
  5243. case 15486: // Staff of Light
  5244. damageMultiplier += .15;
  5245. break;
  5246. case 18355: // Chaotic Staff
  5247. damageMultiplier += .20;
  5248. break;
  5249. case 14014: // Arma Staff
  5250. damageMultiplier += .20;
  5251. break;
  5252.  
  5253. }
  5254. switch (c.playerEquipment[c.playerAmulet]) {
  5255. case 18333: // Arcane Pulse
  5256. damageMultiplier += .05;
  5257. break;
  5258. case 18334:// Arcane Blast
  5259. damageMultiplier += .10;
  5260. break;
  5261. case 18335:// Arcane Stream
  5262. damageMultiplier += .15;
  5263. break;
  5264. }
  5265. switch (c.playerEquipment[c.playerHat]) {
  5266. case 20159: // Virtus Mask
  5267. damageMultiplier += .03;
  5268. break;
  5269. }
  5270. switch (c.playerEquipment[c.playerChest]) {
  5271. case 20159: // Virtus Body
  5272. damageMultiplier += .06;
  5273. break;
  5274. }
  5275. switch (c.playerEquipment[c.playerLegs]) {
  5276. case 20159: // Virtus Legs
  5277. damageMultiplier += .04;
  5278. break;
  5279. }
  5280. damage *= damageMultiplier;
  5281. return (int) damage;
  5282. }
  5283.  
  5284. /**
  5285. * Magic
  5286. **/
  5287.  
  5288. public int mageAtk()
  5289. {
  5290. int attackLevel = c.playerLevel[6];
  5291. /*if (c.playerEquipment[c.playerWeapon] == 15486)
  5292. attackLevel += 0.15;*/
  5293. if (c.fullVoidMage() || c.fullVoidEliteMage())
  5294. attackLevel += c.getLevelForXP(c.playerXP[6]) * 0.2;
  5295. if (c.prayerActive[4])
  5296. attackLevel *= 1.05;
  5297. else if (c.prayerActive[12])
  5298. attackLevel *= 1.10;
  5299. else if (c.prayerActive[20])
  5300. attackLevel *= 1.15;
  5301. return (int) (attackLevel + (c.playerBonus[3] * 2));
  5302. }
  5303. public int mageDef()
  5304. {
  5305. int defenceLevel = c.playerLevel[1]/2 + c.playerLevel[6]/2;
  5306. if (c.prayerActive[0]) {
  5307. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.05;
  5308. } else if (c.prayerActive[3]) {
  5309. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.1;
  5310. } else if (c.prayerActive[9]) {
  5311. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.15;
  5312. } else if (c.prayerActive[18]) {
  5313. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.2;
  5314. } else if (c.prayerActive[19]) {
  5315. defenceLevel += c.getLevelForXP(c.playerXP[c.playerDefence]) * 0.25;
  5316. }
  5317. return (int) (defenceLevel + c.playerBonus[8] + (c.playerBonus[8] / 3));
  5318. }
  5319.  
  5320. public boolean wearingStaff(int runeId) {
  5321. int wep = c.playerEquipment[c.playerWeapon];
  5322. int shield = c.playerEquipment[c.playerShield];
  5323. switch (runeId) {
  5324. case 554:
  5325. if (wep == 1387)
  5326. return true;
  5327. break;
  5328. case 555:
  5329. if (wep == 1383)
  5330. return true;
  5331. if (shield == 18346)
  5332. return true;
  5333. break;
  5334. case 556:
  5335. if (wep == 1381)
  5336. return true;
  5337. break;
  5338. case 557:
  5339. if (wep == 1385)
  5340. return true;
  5341. break;
  5342. }
  5343. return false;
  5344. }
  5345.  
  5346. public boolean checkMagicReqs(int spell) {
  5347. if(c.usingMagic && Config.RUNES_REQUIRED) { // check for runes
  5348. if((!c.getItems().playerHasItem(c.MAGIC_SPELLS[spell][8], c.MAGIC_SPELLS[spell][9]) && !wearingStaff(c.MAGIC_SPELLS[spell][8])) ||
  5349. (!c.getItems().playerHasItem(c.MAGIC_SPELLS[spell][10], c.MAGIC_SPELLS[spell][11]) && !wearingStaff(c.MAGIC_SPELLS[spell][10])) ||
  5350. (!c.getItems().playerHasItem(c.MAGIC_SPELLS[spell][12], c.MAGIC_SPELLS[spell][13]) && !wearingStaff(c.MAGIC_SPELLS[spell][12])) ||
  5351. (!c.getItems().playerHasItem(c.MAGIC_SPELLS[spell][14], c.MAGIC_SPELLS[spell][15]) && !wearingStaff(c.MAGIC_SPELLS[spell][14]))){
  5352. c.sendMessage("You don't have the required runes to cast this spell.");
  5353. return false;
  5354. }
  5355. }
  5356.  
  5357. if(c.usingMagic && c.playerIndex > 0) {
  5358. if(Server.playerHandler.players[c.playerIndex] != null) {
  5359. for(int r = 0; r < c.REDUCE_SPELLS.length; r++){ // reducing spells, confuse etc
  5360. if(Server.playerHandler.players[c.playerIndex].REDUCE_SPELLS[r] == c.MAGIC_SPELLS[spell][0]) {
  5361. c.reduceSpellId = r;
  5362. if((System.currentTimeMillis() - Server.playerHandler.players[c.playerIndex].reduceSpellDelay[c.reduceSpellId]) > Server.playerHandler.players[c.playerIndex].REDUCE_SPELL_TIME[c.reduceSpellId]) {
  5363. Server.playerHandler.players[c.playerIndex].canUseReducingSpell[c.reduceSpellId] = true;
  5364. } else {
  5365. Server.playerHandler.players[c.playerIndex].canUseReducingSpell[c.reduceSpellId] = false;
  5366. }
  5367. break;
  5368. }
  5369. }
  5370. if(!Server.playerHandler.players[c.playerIndex].canUseReducingSpell[c.reduceSpellId]) {
  5371. c.sendMessage("That player is currently immune to this spell.");
  5372. c.usingMagic = false;
  5373. c.stopMovement();
  5374. resetPlayerAttack();
  5375. return false;
  5376. }
  5377. }
  5378. }
  5379.  
  5380. int staffRequired = getStaffNeeded();
  5381. if(c.usingMagic && staffRequired > 0 && Config.RUNES_REQUIRED) { // staff required
  5382. if(c.playerEquipment[c.playerWeapon] != staffRequired) {
  5383. c.sendMessage("You need a "+c.getItems().getItemName(staffRequired).toLowerCase()+" to cast this spell.");
  5384. return false;
  5385. }
  5386. }
  5387.  
  5388. if(c.usingMagic && Config.MAGIC_LEVEL_REQUIRED) { // check magic level
  5389. if(c.playerLevel[6] < c.MAGIC_SPELLS[spell][1]) {
  5390. c.sendMessage("You need to have a magic level of " +c.MAGIC_SPELLS[spell][1]+" to cast this spell.");
  5391. return false;
  5392. }
  5393. }
  5394. if(c.usingMagic && Config.RUNES_REQUIRED) {
  5395. if(c.MAGIC_SPELLS[spell][8] > 0) { // deleting runes
  5396. if (!wearingStaff(c.MAGIC_SPELLS[spell][8]))
  5397. c.getItems().deleteItem(c.MAGIC_SPELLS[spell][8], c.getItems().getItemSlot(c.MAGIC_SPELLS[spell][8]), c.MAGIC_SPELLS[spell][9]);
  5398. }
  5399. if(c.MAGIC_SPELLS[spell][10] > 0) {
  5400. if (!wearingStaff(c.MAGIC_SPELLS[spell][10]))
  5401. c.getItems().deleteItem(c.MAGIC_SPELLS[spell][10], c.getItems().getItemSlot(c.MAGIC_SPELLS[spell][10]), c.MAGIC_SPELLS[spell][11]);
  5402. }
  5403. if(c.MAGIC_SPELLS[spell][12] > 0) {
  5404. if (!wearingStaff(c.MAGIC_SPELLS[spell][12]))
  5405. c.getItems().deleteItem(c.MAGIC_SPELLS[spell][12], c.getItems().getItemSlot(c.MAGIC_SPELLS[spell][12]), c.MAGIC_SPELLS[spell][13]);
  5406. }
  5407. if(c.MAGIC_SPELLS[spell][14] > 0) {
  5408. if (!wearingStaff(c.MAGIC_SPELLS[spell][14]))
  5409. c.getItems().deleteItem(c.MAGIC_SPELLS[spell][14], c.getItems().getItemSlot(c.MAGIC_SPELLS[spell][14]), c.MAGIC_SPELLS[spell][15]);
  5410. }
  5411. }
  5412. return true;
  5413. }
  5414.  
  5415.  
  5416. public int getFreezeTime() {
  5417. switch(c.MAGIC_SPELLS[c.oldSpellId][0]) {
  5418. case 1572:
  5419. case 12861: // ice rush
  5420. return 10;
  5421.  
  5422. case 1582:
  5423. case 12881: // ice burst
  5424. return 17;
  5425.  
  5426. case 1592:
  5427. case 12871: // ice blitz
  5428. return 25;
  5429.  
  5430. case 12891: // ice barrage
  5431. return 33;
  5432.  
  5433. default:
  5434. return 0;
  5435. }
  5436. }
  5437.  
  5438. public void freezePlayer(int i) {
  5439.  
  5440.  
  5441. }
  5442.  
  5443. public int getStartHeight() {
  5444. switch(c.MAGIC_SPELLS[c.spellId][0]) {
  5445. case 1562: // stun
  5446. return 25;
  5447.  
  5448. case 12939:// smoke rush
  5449. return 35;
  5450.  
  5451. case 12987: // shadow rush
  5452. return 38;
  5453.  
  5454. case 12861: // ice rush
  5455. return 15;
  5456.  
  5457. case 12951: // smoke blitz
  5458. return 38;
  5459.  
  5460. case 12999: // shadow blitz
  5461. return 25;
  5462.  
  5463. case 12911: // blood blitz
  5464. return 25;
  5465.  
  5466. default:
  5467. return 43;
  5468. }
  5469. }
  5470.  
  5471.  
  5472.  
  5473. public int getEndHeight() {
  5474. switch(c.MAGIC_SPELLS[c.spellId][0]) {
  5475. case 1562: // stun
  5476. return 10;
  5477.  
  5478. case 12939: // smoke rush
  5479. return 20;
  5480.  
  5481. case 12987: // shadow rush
  5482. return 28;
  5483.  
  5484. case 12861: // ice rush
  5485. return 10;
  5486.  
  5487. case 12951: // smoke blitz
  5488. return 28;
  5489.  
  5490. case 12999: // shadow blitz
  5491. return 15;
  5492.  
  5493. case 12911: // blood blitz
  5494. return 10;
  5495.  
  5496. default:
  5497. return 31;
  5498. }
  5499. }
  5500.  
  5501. public int getStartDelay() {
  5502. if(c.playerEquipment[c.playerWeapon] == 15241)
  5503. return 30;
  5504. switch(c.MAGIC_SPELLS[c.spellId][0]) {
  5505. case 1539:
  5506. return 60;
  5507.  
  5508. default:
  5509. return 53;
  5510. }
  5511. }
  5512.  
  5513. public int getStaffNeeded() {
  5514. switch(c.MAGIC_SPELLS[c.spellId][0]) {
  5515. case 1539:
  5516. return 1409;
  5517.  
  5518. case 12037:
  5519. return 4170;
  5520.  
  5521. case 1190:
  5522. return 2415;
  5523.  
  5524. case 1191:
  5525. return 2416;
  5526.  
  5527. case 1192:
  5528. return 2417;
  5529.  
  5530. default:
  5531. return 0;
  5532. }
  5533. }
  5534.  
  5535. public boolean godSpells() {
  5536. switch(c.MAGIC_SPELLS[c.spellId][0]) {
  5537. case 1190:
  5538. return true;
  5539.  
  5540. case 1191:
  5541. return true;
  5542.  
  5543. case 1192:
  5544. return true;
  5545.  
  5546. default:
  5547. return false;
  5548. }
  5549. }
  5550.  
  5551. public int getEndGfxHeight() {
  5552. switch(c.MAGIC_SPELLS[c.oldSpellId][0]) {
  5553. case 12987:
  5554. case 12901:
  5555. case 12861:
  5556. case 12445:
  5557. case 1192:
  5558. case 13011:
  5559. case 12919:
  5560. case 12881:
  5561. case 12999:
  5562. case 12911:
  5563. case 12871:
  5564. case 13023:
  5565. case 12929:
  5566. case 12891:
  5567. return 0;
  5568.  
  5569. default:
  5570. return 100;
  5571. }
  5572. }
  5573.  
  5574. public int getStartGfxHeight() {
  5575. switch(c.MAGIC_SPELLS[c.spellId][0]) {
  5576. case 12871:
  5577. case 12891:
  5578. return 0;
  5579.  
  5580. default:
  5581. return 100;
  5582. }
  5583. }
  5584. /*public void handleDfs() {
  5585. if (System.currentTimeMillis() - c.dfsDelay > 30000) {
  5586. if(c.dfsCount == 0) {
  5587. c.sendMessage("Your shield has no charges left.");
  5588. return;
  5589. }
  5590. if (c.playerIndex > 0 && Server.playerHandler.players[c.playerIndex] != null) {
  5591. int damage = Misc.random(15) + 5;
  5592. c.startAnimation(2836);
  5593. c.gfx0(600);
  5594. Server.playerHandler.players[c.playerIndex].playerLevel[3] -= damage;
  5595. Server.playerHandler.players[c.playerIndex].hitDiff2 = damage;
  5596. Server.playerHandler.players[c.playerIndex].hitUpdateRequired2 = true;
  5597. Server.playerHandler.players[c.playerIndex].updateRequired = true;
  5598. c.dfsDelay = System.currentTimeMillis();
  5599. } else {
  5600. c.sendMessage("I should be in combat before using this.");
  5601. }
  5602. } else {
  5603. c.sendMessage("My shield hasn't finished recharging yet.");
  5604. }
  5605. }*/
  5606.  
  5607.  
  5608.  
  5609. public void handleDfs() {
  5610. final Player opp = Server.playerHandler.players[c.playerIndex];
  5611. if (opp == null)
  5612. return;
  5613. if (System.currentTimeMillis() - c.dfsDelay > 30000) {
  5614. if(c.dfsCount == 0) {
  5615. c.sendMessage("Your shield has no charges left.");
  5616. return;
  5617. }
  5618. if (c.playerIndex > 0 && Server.playerHandler.players[c.playerIndex] != null) {
  5619. c.projectileStage = 2;
  5620. final int pX = c.getX();
  5621. final int pY = c.getY();
  5622. final int oX = opp.getX();
  5623. final int oY = opp.getY();
  5624. final int offX = (pY - oY)* -1;
  5625. final int offY = (pX - oX)* -1;
  5626. c.startAnimation(6696);
  5627. c.gfx0(1165);
  5628. c.dfsCount -= 1;
  5629. EventManager.getSingleton().addEvent(new Event() {
  5630. int damage = (int)Math.round(Math.random() * 25);
  5631. public void execute(EventContainer b) {
  5632. if (opp != null) {
  5633. opp.gfx100(1167);
  5634. if (opp.playerLevel[3] - damage < 0) {
  5635. damage = opp.playerLevel[3];
  5636. }
  5637. opp.playerLevel[3] -= damage;
  5638. opp.hitDiff2 = damage;
  5639. opp.hitUpdateRequired2 = true;
  5640. opp.updateRequired = true;
  5641. }
  5642. b.stop();
  5643. }
  5644. }, 1700);
  5645. EventManager.getSingleton().addEvent(new Event() {
  5646. public void execute(EventContainer b) {
  5647. if (c.playerIndex != 0)
  5648. c.getPA().createPlayersProjectile2(pX, pY, offX, offY, 50, 50, 1166, 30, 30, - c.playerIndex - 1, 30, 5);
  5649. b.stop();
  5650. }
  5651. }, 1000);
  5652. c.dfsDelay = System.currentTimeMillis();
  5653. }
  5654. }
  5655. }
  5656. /*public void handleDfsNPC() {
  5657. if (System.currentTimeMillis() - c.dfsDelay > 30000) {
  5658. if(c.dfsCount == 0) {
  5659. c.sendMessage("Your shield has no charges left.");
  5660. return;
  5661. }
  5662. if (c.npcIndex > 0 && Server.npcHandler.npcs[c.npcIndex] != null) {
  5663. int damage = Misc.random(25) + 5;
  5664. c.dfsCount -= 1;
  5665. c.startAnimation(2836);
  5666. c.gfx0(600);
  5667. Server.npcHandler.npcs[c.npcIndex].HP -= damage;
  5668. Server.npcHandler.npcs[c.npcIndex].hitDiff2 = damage;
  5669. Server.npcHandler.npcs[c.npcIndex].hitUpdateRequired2 = true;
  5670. Server.npcHandler.npcs[c.npcIndex].updateRequired = true;
  5671. c.dfsDelay = System.currentTimeMillis();
  5672. } else {
  5673. c.sendMessage("I should be in combat before using this.");
  5674. }
  5675. } else {
  5676. c.sendMessage("My shield hasn't finished recharging yet.");
  5677. }
  5678. }*/
  5679. public void handleDfsNPC() {
  5680. try {
  5681. if(c.npcIndex > 0) {
  5682. if(c.dfsCount == 0) {
  5683. c.sendMessage("Your shield has no charges left.");
  5684. return;
  5685. }
  5686. if(Server.npcHandler.npcs[c.npcIndex] != null) {
  5687. c.projectileStage = 2;
  5688. final int pX = c.getX();
  5689. final int pY = c.getY();
  5690. final int nX = Server.npcHandler.npcs[c.npcIndex].getX();
  5691. final int nY = Server.npcHandler.npcs[c.npcIndex].getY();
  5692. final int offX = (pY - nY)* -1;
  5693. final int offY = (pX - nX)* -1;
  5694. if (System.currentTimeMillis() - c.dfsDelay > 30000) {
  5695. if (c.npcIndex > 0 && Server.npcHandler.npcs[c.npcIndex] != null) {
  5696. final int damage = Misc.random(15) + 10;
  5697. c.startAnimation(6696);
  5698. c.gfx0(1165);
  5699. c.dfsCount -= 1;
  5700. Server.npcHandler.npcs[c.npcIndex].hitUpdateRequired2 = true;
  5701. Server.npcHandler.npcs[c.npcIndex].updateRequired = true;
  5702. Server.npcHandler.npcs[c.npcIndex].hitDiff2 = damage;
  5703. Server.npcHandler.npcs[c.npcIndex].HP -= damage;
  5704. Server.npcHandler.npcs[c.npcIndex].gfx100(1167);
  5705. EventManager.getSingleton().addEvent(new Event() {
  5706. public void execute(EventContainer b) {
  5707. c.getPA().createPlayersProjectile(pX, pY, offX, offY, 50, 50, 1166, 31, 35, - c.npcIndex - 1, 30);
  5708. b.stop();
  5709. }
  5710. }, 1000);
  5711. if(Server.npcHandler.npcs[c.npcIndex].isDead == true) {
  5712. c.sendMessage("This NPC is already dead!");
  5713. return;
  5714. }
  5715. c.dfsDelay = System.currentTimeMillis();
  5716. } else {
  5717. c.sendMessage("I should be in combat before using this.");
  5718. }
  5719. } else {
  5720. c.sendMessage("My shield hasn't finished recharging yet.");
  5721. } }
  5722. }
  5723. }
  5724. catch (Exception e)
  5725. {
  5726. }
  5727. }
  5728.  
  5729. public void handleZerker() {
  5730.  
  5731. if(c.isDonator == 1){
  5732. if (System.currentTimeMillis() - c.dfsDelay > 60000) {
  5733. if (c.playerIndex > 0 && Server.playerHandler.players[c.playerIndex] != null) {
  5734. int damage = Misc.random(10) + 7;
  5735. c.startAnimation(369);
  5736. c.gfx0(369);
  5737. Server.playerHandler.players[c.playerIndex].playerLevel[3] -= damage;
  5738. Server.playerHandler.players[c.playerIndex].hitDiff2 = damage;
  5739. c.forcedText = "Feel the power of the Berserker Ring!";
  5740. Server.playerHandler.players[c.playerIndex].hitUpdateRequired2 = true;
  5741. Server.playerHandler.players[c.playerIndex].updateRequired = true;
  5742. c.dfsDelay = System.currentTimeMillis();
  5743. } else {
  5744. c.sendMessage("I should be in combat before using this.");
  5745. }
  5746. } else {
  5747. c.sendMessage("My ring hasn't finished recharging yet (60 Seconds)");
  5748. }if (c.isDonator == 0)
  5749. c.sendMessage("Only Donators can use the ring's Special attack.");
  5750. }
  5751. }
  5752. public void handleWarrior() {
  5753. if(c.isDonator == 1){
  5754. if (System.currentTimeMillis() - c.dfsDelay > 60000) {
  5755. if (c.playerIndex > 0 && Server.playerHandler.players[c.playerIndex] != null) {
  5756. int damage = Misc.random(10) + 7;
  5757. c.startAnimation(369);
  5758. c.gfx0(369);
  5759. Server.playerHandler.players[c.playerIndex].playerLevel[3] -= damage;
  5760. c.forcedText = "Feel the power of the Warrior Ring!";
  5761. Server.playerHandler.players[c.playerIndex].hitDiff2 = damage;
  5762. Server.playerHandler.players[c.playerIndex].hitUpdateRequired2 = true;
  5763. Server.playerHandler.players[c.playerIndex].updateRequired = true;
  5764. c.dfsDelay = System.currentTimeMillis();
  5765. } else {
  5766. c.sendMessage("I should be in combat before using this.");
  5767. }
  5768. } else {
  5769. c.sendMessage("My ring hasn't finished recharging yet (60 Seconds)");
  5770. }if (c.isDonator == 0)
  5771. c.sendMessage("Only Donators can use the ring's Special attack.");
  5772. }
  5773. }
  5774.  
  5775. public void handleSeers() {
  5776. /*
  5777.  
  5778. c.castingMagic = true;
  5779. if(c.isDonator == 1){
  5780. if (System.currentTimeMillis() - c.dfsDelay > 60000) {
  5781. if (c.playerIndex > 0 && Server.playerHandler.players[c.playerIndex] != null) {
  5782. int damage = Misc.random(10) + 7;
  5783. c.startAnimation(1979);
  5784. Server.playerHandler.players[c.playerIndex].gfx0(369);
  5785. c.gfx0(368);
  5786. Server.playerHandler.players[c.playerIndex].freezeTimer = 15;
  5787. Server.playerHandler.players[c.playerIndex].resetWalkingQueue();
  5788. Server.playerHandler.players[c.playerIndex].frozenBy = c.playerId;
  5789. Server.playerHandler.players[c.playerIndex].playerLevel[3] -= damage;
  5790. c.forcedText = ("Feel the power of the Seers Ring!");
  5791. Server.playerHandler.players[c.playerIndex].hitDiff2 = damage;
  5792.  
  5793. Server.playerHandler.players[c.playerIndex].hitUpdateRequired2 = true;
  5794. Server.playerHandler.players[c.playerIndex].updateRequired = true;
  5795. c.dfsDelay = System.currentTimeMillis();
  5796. } else {
  5797. c.sendMessage("I should be in combat before using this.");
  5798. }
  5799. } else {
  5800. c.sendMessage("My ring hasn't finished recharging yet (60 Seconds)");
  5801. }if (c.isDonator == 0)
  5802. */
  5803.  
  5804. }
  5805.  
  5806. public void Zammybook() {
  5807. c.startAnimation(1670);
  5808. EventManager.getSingleton().addEvent(new Event() {
  5809. public void execute(EventContainer b) {
  5810. c.forcedChatUpdateRequired = true;
  5811. c.updateRequired = true;
  5812. c.forcedText = ("Two great warriors, joined by hand,");
  5813. b.stop();
  5814. }
  5815. }, 400);
  5816. EventManager.getSingleton().addEvent(new Event() {
  5817. public void execute(EventContainer b) {
  5818. c.forcedText = ("to spread destruction across the land.");
  5819. c.forcedChatUpdateRequired = true;
  5820. c.updateRequired = true;
  5821. b.stop();
  5822. }
  5823. }, 1200);
  5824. EventManager.getSingleton().addEvent(new Event() {
  5825. public void execute(EventContainer b) {
  5826. c.forcedText = ("In Zamorak's name, now two are one.");
  5827. c.forcedChatUpdateRequired = true;
  5828. c.updateRequired = true;
  5829. b.stop();
  5830. }
  5831. }, 1900);
  5832.  
  5833.  
  5834. }
  5835.  
  5836. public void handleArcher() {
  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(369);
  5842. c.gfx0(369);
  5843. Server.playerHandler.players[c.playerIndex].playerLevel[3] -= damage;
  5844. Server.playerHandler.players[c.playerIndex].hitDiff2 = damage;
  5845. c.forcedText = "Feel the power of the Archer Ring!";
  5846. Server.playerHandler.players[c.playerIndex].hitUpdateRequired2 = true;
  5847. Server.playerHandler.players[c.playerIndex].updateRequired = true;
  5848. c.dfsDelay = System.currentTimeMillis();
  5849. } else {
  5850. c.sendMessage("I should be in combat before using this.");
  5851. }
  5852. } else {
  5853. c.sendMessage("My ring hasn't finished recharging yet (60 Seconds)");
  5854. }if (c.isDonator == 0)
  5855. c.sendMessage("Only Donators can use the ring's Special attack.");
  5856. }
  5857. }
  5858.  
  5859. public void applyRecoil(int damage, int i) {
  5860. if (damage > 0 && Server.playerHandler.players[i].playerEquipment[c.playerRing] == 2550) {
  5861. int recDamage = damage/10 + 1;
  5862. if (!c.getHitUpdateRequired()) {
  5863. c.setHitDiff(recDamage);
  5864. removeRecoil(c);
  5865. c.recoilHits = recDamage;
  5866. c.setHitUpdateRequired(true);
  5867. } else if (!c.getHitUpdateRequired2()) {
  5868. c.setHitDiff2(recDamage);
  5869. c.setHitUpdateRequired2(true);
  5870. }
  5871. c.dealDamage(recDamage);
  5872. c.updateRequired = true;
  5873. }
  5874. }
  5875.  
  5876. public void Deflect(int damage, int i) {
  5877. if (damage > 0 && Server.playerHandler.players[i].curseActive[7] || Server.playerHandler.players[i].curseActive[8] || Server.playerHandler.players[i].curseActive[9]) {
  5878. int recDamage = damage/6;
  5879. if (!c.getHitUpdateRequired()) {
  5880. c.setHitDiff(recDamage);
  5881. c.recoilHits = recDamage;
  5882. c.setHitUpdateRequired(true);
  5883. } else if (!c.getHitUpdateRequired2()) {
  5884. c.setHitDiff2(recDamage);
  5885. c.setHitUpdateRequired2(true);
  5886. }
  5887. c.dealDamage(recDamage);
  5888. c.updateRequired = true;
  5889. }
  5890. }
  5891.  
  5892. public void applyRecoilNPC(int damage, int i) {
  5893. if (damage > 0 && c.playerEquipment[c.playerRing] == 2550) {
  5894. int recDamage = damage/10 + 1;
  5895. Server.npcHandler.npcs[c.npcIndex].HP -= recDamage;
  5896. Server.npcHandler.npcs[c.npcIndex].hitDiff2 = recDamage;
  5897. Server.npcHandler.npcs[c.npcIndex].hitUpdateRequired2 = true;
  5898. Server.npcHandler.npcs[c.npcIndex].updateRequired = true;
  5899. c.updateRequired = true;
  5900. removeRecoil(c);
  5901. c.recoilHits = damage;
  5902. }
  5903. }
  5904.  
  5905. public void removeRecoil(Client c) {
  5906. if(c.recoilHits >= 50) {
  5907. c.getItems().removeItem(2550, c.playerRing);
  5908. c.getItems().deleteItem(2550, c.getItems().getItemSlot(2550), 1);
  5909. c.sendMessage("Your ring of recoil shaters!");
  5910. c.recoilHits = 0;
  5911. } else {
  5912. c.recoilHits++;
  5913. }
  5914. }
  5915. public static void addCharge(Client c) {
  5916. if(c.playerEquipment[c.playerShield] != 11283) {
  5917. return;
  5918. }
  5919. if(c.dfsCount >= 40) {
  5920. c.dfsCount = 40;
  5921. c.sendMessage("Your shield has already 40 charges.");
  5922. return;
  5923. }
  5924.  
  5925. c.dfsCount++;
  5926. c.startAnimation(6695);
  5927. c.gfx0(1164);
  5928. c.sendMessage("You absorb the fire breath and charge your Dragonfire shield.");
  5929. }
  5930.  
  5931. public int getBonusAttack(int i) {
  5932. switch (Server.npcHandler.npcs[i].npcType) {
  5933. case 2883:
  5934. return Misc.random(50) + 30;
  5935. case 2026:
  5936. case 2027:
  5937. case 2029:
  5938. case 2030:
  5939. return Misc.random(50) + 30;
  5940. }
  5941. return 0;
  5942. }
  5943.  
  5944.  
  5945.  
  5946. public void handleGmaulPlayer() {
  5947. if (c.playerIndex > 0) {
  5948. Client o = (Client)Server.playerHandler.players[c.playerIndex];
  5949. if (c.goodDistance(c.getX(), c.getY(), o.getX(), o.getY(), c.getCombat().getRequiredDistance())) {
  5950. if (c.getCombat().checkReqs()) {
  5951. if (c.getCombat().checkSpecAmount(4153)) {
  5952. boolean hit = Misc.random(c.getCombat().calculateMeleeAttack()) > Misc.random(o.getCombat().calculateMeleeDefence());
  5953. int damage = 0;
  5954. if (hit)
  5955. damage = Misc.random(c.getCombat().calculateMeleeMaxHit());
  5956. if (o.prayerActive[18] && System.currentTimeMillis() - o.protMeleeDelay > 1500)
  5957. damage *= .6;
  5958. if(o.playerLevel[3] - damage <= 0) {
  5959. damage = o.playerLevel[3];
  5960. }
  5961. if(o.playerLevel[3] > 0) {
  5962. o.handleHitMask(damage);
  5963. c.startAnimation(1667);
  5964. o.gfx100(337);
  5965. o.dealDamage(damage);
  5966. }
  5967. }
  5968. }
  5969. }
  5970. } else if(c.npcIndex > 0) {
  5971. int x = Server.npcHandler.npcs[c.npcIndex].absX;
  5972. int y = Server.npcHandler.npcs[c.npcIndex].absY;
  5973. if (c.goodDistance(c.getX(), c.getY(), x, y, 2)) {
  5974. if (c.getCombat().checkReqs()) {
  5975. if (c.getCombat().checkSpecAmount(4153)) {
  5976. int damage = Misc.random(c.getCombat().calculateMeleeMaxHit());
  5977. if(Server.npcHandler.npcs[c.npcIndex].HP - damage < 0) {
  5978. damage = Server.npcHandler.npcs[c.npcIndex].HP;
  5979. }
  5980. if(Server.npcHandler.npcs[c.npcIndex].HP > 0) {
  5981. Server.npcHandler.npcs[c.npcIndex].HP -= damage;
  5982. Server.npcHandler.npcs[c.npcIndex].handleHitMask(damage);
  5983. c.startAnimation(1667);
  5984. c.gfx100(337);
  5985. }
  5986. }
  5987. }
  5988. }
  5989. }
  5990. }
  5991.  
  5992. public boolean armaNpc(int i) {
  5993. switch (Server.npcHandler.npcs[i].npcType) {
  5994. case 6222:
  5995. case 6223:
  5996. case 6229:
  5997. case 6225:
  5998. case 6230:
  5999. case 6227:
  6000. case 6232:
  6001. case 6239:
  6002. case 6233:
  6003. case 6231:
  6004. return true;
  6005. }
  6006. return false;
  6007. }
  6008.  
  6009. }
Add Comment
Please, Sign In to add comment