Advertisement
Guest User

Untitled

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