Advertisement
Guest User

Untitled

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