Guest User

Untitled

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