Guest User

combatassistant.java

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