Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2014
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 33.70 KB | None | 0 0
  1. package server.model.players.combat;
  2.  
  3. import server.Config;
  4. import server.Server;
  5. import server.event.CycleEvent;
  6. import server.event.CycleEventContainer;
  7. import server.event.CycleEventHandler;
  8. import server.model.players.Client;
  9. import server.model.players.PlayerHandler;
  10. import server.model.players.combat.range.RangeData;
  11. import server.util.Misc;
  12.  
  13. public class AttackPlayer {
  14.  
  15. public static void applyPlayerHit(final Client c, final int i) {
  16. c.stopPlayerSkill = false;
  17. if (!c.usingClaws) {
  18. c.getCombat().applyPlayerMeleeDamage(i, 1,
  19. Misc.random(c.getCombat().calculateMeleeMaxHit()));
  20. if (c.doubleHit) {
  21. if (!c.oldSpec) {
  22. c.getCombat().applyPlayerMeleeDamage(i, 2,
  23. Misc.random(c.getCombat().calculateMeleeMaxHit()));
  24. } else {
  25. CycleEventHandler.getSingleton().addEvent(c,
  26. new CycleEvent() {
  27. @Override
  28. public void execute(
  29. CycleEventContainer container) {
  30. c.getCombat().applyPlayerMeleeDamage(
  31. i,
  32. 2,
  33. Misc.random(c.getCombat()
  34. .calculateMeleeMaxHit()));
  35. container.stop();
  36. }
  37.  
  38. @Override
  39. public void stop() {
  40.  
  41. }
  42. }, 1);
  43. }
  44. }
  45. } else {
  46. c.getPA().hitDragonClaws(c,
  47. Misc.random(c.getCombat().calculateMeleeMaxHit()));
  48. }
  49. }
  50.  
  51. public static void applyPlayerMeleeDamage(Client c, int i, int damageMask,
  52. int damage) {
  53. c.previousDamage = damage;
  54.  
  55. Client o = (Client) PlayerHandler.players[i];
  56. if (o == null) {
  57. return;
  58. }
  59. boolean veracsEffect = false;
  60. boolean guthansEffect = false;
  61. if (c.getPA().fullVeracs()) {
  62. if (Misc.random(4) == 1) {
  63. veracsEffect = true;
  64. }
  65. }
  66. if (c.getPA().fullGuthans()) {
  67. if (Misc.random(4) == 1) {
  68. guthansEffect = true;
  69. }
  70. }
  71. if (!c.usingClaws) {
  72. if (damageMask == 1) {
  73. damage = c.delayedDamage;
  74. c.delayedDamage = 0;
  75. } else {
  76. damage = c.delayedDamage2;
  77. c.delayedDamage2 = 0;
  78. }
  79. }
  80. if (Misc.random(o.getCombat().calculateMeleeDefence()) > Misc.random(c
  81. .getCombat().calculateMeleeAttack()) && !veracsEffect) {
  82. damage = 0;
  83. c.bonusAttack = 0;
  84. } else if (c.playerEquipment[c.playerWeapon] == 5698
  85. && o.poisonDamage <= 0 && Misc.random(3) == 1) {
  86. o.getPA().appendPoison(13);
  87. c.bonusAttack += damage / 3;
  88. } else {
  89. c.bonusAttack += damage / 3;
  90. }
  91. if (o.prayerActive[18]
  92. && System.currentTimeMillis() - o.protMeleeDelay > 1500
  93. && !veracsEffect) { // if prayer active reduce damage by 40%
  94. damage = (int) damage * 60 / 100;
  95. }
  96. if (c.maxNextHit && !c.usingClaws) {
  97. damage = c.getCombat().calculateMeleeMaxHit();
  98. }
  99. if (damage > 0 && guthansEffect) {
  100. c.playerLevel[3] += damage;
  101. if (c.playerLevel[3] > c.getLevelForXP(c.playerXP[3]))
  102. c.playerLevel[3] = c.getLevelForXP(c.playerXP[3]);
  103. c.getPA().refreshSkill(3);
  104. o.gfx0(398);
  105. }
  106. if (c.ssSpec && damageMask == 2) {
  107. damage = 5 + Misc.random(11);
  108. c.ssSpec = false;
  109. }
  110. if (PlayerHandler.players[i].playerLevel[3] - damage < 0) {
  111. damage = PlayerHandler.players[i].playerLevel[3];
  112. }
  113. if (o.vengOn && damage > 0)
  114. c.getCombat().appendVengeance(i, damage);
  115. if (damage > 0)
  116. c.getCombat().applyRecoil(damage, i);
  117. switch (c.specEffect) {
  118. case 1: // dragon scimmy special
  119. if (damage > 0) {
  120. if (o.prayerActive[16] || o.prayerActive[17]
  121. || o.prayerActive[18]) {
  122. o.headIcon = -1;
  123. o.getPA().sendFrame36(c.PRAYER_GLOW[16], 0);
  124. o.getPA().sendFrame36(c.PRAYER_GLOW[17], 0);
  125. o.getPA().sendFrame36(c.PRAYER_GLOW[18], 0);
  126. }
  127. o.sendMessage("You have been injured!");
  128. o.stopPrayerDelay = System.currentTimeMillis();
  129. o.prayerActive[16] = false;
  130. o.prayerActive[17] = false;
  131. o.prayerActive[18] = false;
  132. o.getPA().requestUpdates();
  133. }
  134. break;
  135. case 2:
  136. if (damage > 0) {
  137. if (o.freezeTimer <= 0)
  138. o.freezeTimer = 30;
  139. o.gfx0(369);
  140. o.sendMessage("You have been frozen.");
  141. o.frozenBy = c.playerId;
  142. o.stopMovement();
  143. c.sendMessage("You freeze your enemy.");
  144. }
  145. break;
  146. case 3:
  147. if (damage > 0) {
  148. o.playerLevel[1] -= damage;
  149. o.sendMessage("You feel weak.");
  150. if (o.playerLevel[1] < 1)
  151. o.playerLevel[1] = 1;
  152. o.getPA().refreshSkill(1);
  153. }
  154. break;
  155. case 4:
  156. if (damage > 0) {
  157. if (c.playerLevel[3] + damage > c.getLevelForXP(c.playerXP[3]))
  158. if (c.playerLevel[3] > c.getLevelForXP(c.playerXP[3]))
  159. ;
  160. else
  161. c.playerLevel[3] = c.getLevelForXP(c.playerXP[3]);
  162. else
  163. c.playerLevel[3] += damage;
  164. c.getPA().refreshSkill(3);
  165. }
  166. break;
  167. }
  168. c.specEffect = 0;
  169. if (c.fightMode == 3) { // check
  170. c.getPA().addSkillXP((damage * Config.MELEE_EXP_RATE / 3), 0);
  171. c.getPA().addSkillXP((damage * Config.MELEE_EXP_RATE / 3), 1);
  172. c.getPA().addSkillXP((damage * Config.MELEE_EXP_RATE / 3), 2);
  173. c.getPA().addSkillXP((damage * Config.MELEE_EXP_RATE / 3), 3);
  174. c.getPA().refreshSkill(0);
  175. c.getPA().refreshSkill(1);
  176. c.getPA().refreshSkill(2);
  177. c.getPA().refreshSkill(3);
  178. } else {
  179. c.getPA().addSkillXP((damage * Config.MELEE_EXP_RATE), c.fightMode);
  180. c.getPA().addSkillXP((damage * Config.MELEE_EXP_RATE / 3), 3);
  181. c.getPA().refreshSkill(c.fightMode);
  182. c.getPA().refreshSkill(3);
  183. }
  184. PlayerHandler.players[i].logoutDelay = System.currentTimeMillis();
  185. PlayerHandler.players[i].underAttackBy = c.playerId;
  186. PlayerHandler.players[i].killerId = c.playerId;
  187. PlayerHandler.players[i].singleCombatDelay = System.currentTimeMillis();
  188. if (c.killedBy != PlayerHandler.players[i].playerId)
  189. c.totalPlayerDamageDealt = 0;
  190. c.killedBy = PlayerHandler.players[i].playerId;
  191. c.getCombat().applySmite(i, damage);
  192. switch (damageMask) {
  193. case 1:
  194. PlayerHandler.players[i].dealDamage(damage);
  195. PlayerHandler.players[i].damageTaken[c.playerId] += damage;
  196. c.totalPlayerDamageDealt += damage;
  197. PlayerHandler.players[i].updateRequired = true;
  198. o.getPA().refreshSkill(3);
  199. break;
  200.  
  201. case 2:
  202. PlayerHandler.players[i].dealDamage(damage);
  203. PlayerHandler.players[i].damageTaken[c.playerId] += damage;
  204. c.totalPlayerDamageDealt += damage;
  205. PlayerHandler.players[i].updateRequired = true;
  206. c.doubleHit = false;
  207. o.getPA().refreshSkill(3);
  208. break;
  209. }
  210. PlayerHandler.players[i].handleHitMask(damage);
  211. }
  212.  
  213. public static void playerDelayedHit(final Client c, final int i) {
  214. if (PlayerHandler.players[i] != null) {
  215. if (PlayerHandler.players[i].isDead || c.isDead
  216. || PlayerHandler.players[i].playerLevel[3] <= 0
  217. || c.playerLevel[3] <= 0) {
  218. c.playerIndex = 0;
  219. return;
  220. }
  221. if (PlayerHandler.players[i].respawnTimer > 0) {
  222. c.faceUpdate(0);
  223. c.playerIndex = 0;
  224. return;
  225. }
  226. Client o = (Client) PlayerHandler.players[i];
  227. o.getPA().removeAllWindows();
  228. if (o.playerIndex <= 0 && o.npcIndex <= 0) {
  229. if (o.autoRet == 1) {
  230. o.playerIndex = c.playerId;
  231. }
  232. }
  233.  
  234. if (o.attackTimer <= 3 || o.attackTimer == 0 && o.playerIndex == 0
  235. && !c.castingMagic) { // block animation
  236. o.startAnimation(o.getCombat().getBlockEmote());
  237. }
  238. if (o.inTrade) {
  239. o.getTradeAndDuel().declineTrade();
  240. }
  241. if (c.projectileStage == 0 && !c.usingMagic) { // melee hit damage
  242. c.getCombat().applyPlayerHit(c, i);
  243. }
  244. c.getCombat().addCharge();
  245. if (!c.castingMagic && c.projectileStage > 0) { // range hit damage
  246. int damage = Misc.random(c.getCombat().rangeMaxHit());
  247. int damage2 = -1;
  248. if (c.lastWeaponUsed == 11235 || c.bowSpecShot == 1) {
  249. damage2 = Misc.random(c.getCombat().rangeMaxHit());
  250. }
  251. c.rangeEndGFX = RangeData.getRangeEndGFX(c);
  252.  
  253. if (Misc.random(10 + o.getCombat().calculateRangeDefence()) > Misc
  254. .random(10 + c.getCombat().calculateRangeAttack())
  255. && !c.ignoreDefence) {
  256. damage = 0;
  257. }
  258. if (c.playerEquipment[3] == 9185) {
  259. if (Misc.random(10) == 1) {
  260. if (damage > 0) {
  261. c.boltDamage = damage;
  262. c.getCombat().crossbowSpecial(c, i);
  263. damage *= c.crossbowDamage;
  264. }
  265. }
  266. }
  267. if (c.lastWeaponUsed == 11235 || c.bowSpecShot == 1) {
  268. if (Misc.random(10 + o.getCombat().calculateRangeDefence()) > Misc
  269. .random(10 + c.getCombat().calculateRangeAttack()))
  270. damage2 = 0;
  271. }
  272.  
  273. if (c.dbowSpec) {
  274. o.gfx100(c.lastArrowUsed == 11212 ? 1100 : 1103);
  275. if (damage < 8)
  276. damage = 8;
  277. if (damage2 < 8)
  278. damage2 = 8;
  279. c.dbowSpec = false;
  280. }
  281.  
  282. if (o.prayerActive[17]
  283. && System.currentTimeMillis() - o.protRangeDelay > 1500) { // if
  284. // prayer
  285. // active
  286. // reduce
  287. // damage
  288. // by
  289. // half
  290. damage = (int) damage * 60 / 100;
  291. if (c.lastWeaponUsed == 11235 || c.bowSpecShot == 1)
  292. damage2 = (int) damage2 * 60 / 100;
  293. }
  294. if (PlayerHandler.players[i].playerLevel[3] - damage < 0) {
  295. damage = PlayerHandler.players[i].playerLevel[3];
  296. }
  297. if (PlayerHandler.players[i].playerLevel[3] - damage - damage2 < 0) {
  298. damage2 = PlayerHandler.players[i].playerLevel[3] - damage;
  299. }
  300. if (damage < 0)
  301. damage = 0;
  302. if (damage2 < 0 && damage2 != -1)
  303. damage2 = 0;
  304. if (o.vengOn) {
  305. c.getCombat().appendVengeance(i, damage);
  306. c.getCombat().appendVengeance(i, damage2);
  307. }
  308. if (damage > 0)
  309. c.getCombat().applyRecoil(damage, i);
  310. if (damage2 > 0)
  311. c.getCombat().applyRecoil(damage2, i);
  312. if (c.fightMode == 3) {
  313. c.getPA().addSkillXP((damage * Config.RANGE_EXP_RATE / 3),
  314. 4);
  315. c.getPA().addSkillXP((damage * Config.RANGE_EXP_RATE / 3),
  316. 1);
  317. c.getPA().addSkillXP((damage * Config.RANGE_EXP_RATE / 3),
  318. 3);
  319. c.getPA().refreshSkill(1);
  320. c.getPA().refreshSkill(3);
  321. c.getPA().refreshSkill(4);
  322. } else {
  323. c.getPA().addSkillXP((damage * Config.RANGE_EXP_RATE), 4);
  324. c.getPA().addSkillXP((damage * Config.RANGE_EXP_RATE / 3),
  325. 3);
  326. c.getPA().refreshSkill(3);
  327. c.getPA().refreshSkill(4);
  328. }
  329. boolean dropArrows = true;
  330.  
  331. for (int noArrowId : c.NO_ARROW_DROP) {
  332. if (c.lastWeaponUsed == noArrowId) {
  333. dropArrows = false;
  334. break;
  335. }
  336. }
  337. if (dropArrows) {
  338. c.getItems().dropArrowPlayer();
  339. }
  340. if (c.rangeEndGFX > 0
  341. && !c.getCombat().usingBolts(c.lastArrowUsed)) {
  342. if (c.rangeEndGFXHeight) {
  343. o.gfx100(c.rangeEndGFX);
  344. } else {
  345. o.gfx0(c.rangeEndGFX);
  346. }
  347. }
  348. PlayerHandler.players[i].underAttackBy = c.playerId;
  349. PlayerHandler.players[i].logoutDelay = System
  350. .currentTimeMillis();
  351. PlayerHandler.players[i].singleCombatDelay = System
  352. .currentTimeMillis();
  353. PlayerHandler.players[i].killerId = c.playerId;
  354. PlayerHandler.players[i].dealDamage(damage);
  355. PlayerHandler.players[i].damageTaken[c.playerId] += damage;
  356. c.killedBy = PlayerHandler.players[i].playerId;
  357. PlayerHandler.players[i].handleHitMask(damage);
  358. c.ignoreDefence = false;
  359. if (damage2 != -1) {
  360. PlayerHandler.players[i].dealDamage(damage2);
  361. PlayerHandler.players[i].damageTaken[c.playerId] += damage2;
  362. PlayerHandler.players[i].handleHitMask(damage2);
  363. }
  364. o.getPA().refreshSkill(3);
  365. PlayerHandler.players[i].updateRequired = true;
  366. c.getCombat().applySmite(i, damage);
  367. if (damage2 != -1)
  368. c.getCombat().applySmite(i, damage2);
  369.  
  370. } else if (c.projectileStage > 0) { // magic hit damageno0b
  371. int damage = 0;
  372. if (c.spellSwap) {
  373. c.spellSwap = false;
  374. c.setSidebarInterface(6, 16640);
  375. c.playerMagicBook = 2;
  376. c.gfx0(-1);
  377. }
  378. if (c.fullVoidMage()
  379. && c.playerEquipment[c.playerWeapon] == 8841) {
  380. damage = Misc.random(c.getCombat().magicMaxHit() + 13);
  381. } else {
  382. damage = Misc.random(c.getCombat().magicMaxHit());
  383. }
  384. if (c.getCombat().godSpells()) {
  385. if (System.currentTimeMillis() - c.godSpellDelay < Config.GOD_SPELL_CHARGE) {
  386. damage += 10;
  387. }
  388. }
  389. if (c.magicFailed)
  390. damage = 0;
  391.  
  392. if (o.prayerActive[16]
  393. && System.currentTimeMillis() - o.protMageDelay > 1500) { // if
  394. // prayer
  395. // active
  396. // reduce
  397. // damage
  398. // by
  399. // half
  400. damage = (int) damage * 60 / 100;
  401. }
  402. if (PlayerHandler.players[i].playerLevel[3] - damage < 0) {
  403. damage = PlayerHandler.players[i].playerLevel[3];
  404. }
  405. if (o.vengOn)
  406. c.getCombat().appendVengeance(i, damage);
  407. if (damage > 0)
  408. c.getCombat().applyRecoil(damage, i);
  409. if (c.magicDef) {
  410. c.getPA().addSkillXP((damage * Config.MELEE_EXP_RATE / 3),
  411. 1);
  412. c.getPA().refreshSkill(1);
  413. }
  414. c.getPA().addSkillXP(
  415. (c.MAGIC_SPELLS[c.oldSpellId][7] + damage
  416. * Config.MAGIC_EXP_RATE), 6);
  417. c.getPA().addSkillXP(
  418. (c.MAGIC_SPELLS[c.oldSpellId][7] + damage
  419. * Config.MAGIC_EXP_RATE / 3), 3);
  420. c.getPA().refreshSkill(3);
  421. c.getPA().refreshSkill(6);
  422.  
  423. if (c.getCombat().getEndGfxHeight() == 100 && !c.magicFailed) { // end
  424. // GFX
  425. PlayerHandler.players[i]
  426. .gfx100(c.MAGIC_SPELLS[c.oldSpellId][5]);
  427. } else if (!c.magicFailed) {
  428. PlayerHandler.players[i]
  429. .gfx0(c.MAGIC_SPELLS[c.oldSpellId][5]);
  430. } else if (c.magicFailed) {
  431. PlayerHandler.players[i].gfx100(85);
  432. }
  433.  
  434. if (!c.magicFailed) {
  435. if (System.currentTimeMillis()
  436. - PlayerHandler.players[i].reduceStat > 35000) {
  437. PlayerHandler.players[i].reduceStat = System
  438. .currentTimeMillis();
  439. switch (c.MAGIC_SPELLS[c.oldSpellId][0]) {
  440. case 12987:
  441. case 13011:
  442. case 12999:
  443. case 13023:
  444. PlayerHandler.players[i].playerLevel[0] -= ((o
  445. .getPA()
  446. .getLevelForXP(
  447. PlayerHandler.players[i].playerXP[0]) * 10) / 100);
  448. break;
  449. }
  450. }
  451.  
  452. switch (c.MAGIC_SPELLS[c.oldSpellId][0]) {
  453. case 12445: // teleblock
  454. if (System.currentTimeMillis() - o.teleBlockDelay > o.teleBlockLength) {
  455. o.teleBlockDelay = System.currentTimeMillis();
  456. o.sendMessage("You have been teleblocked.");
  457. if (o.prayerActive[16]
  458. && System.currentTimeMillis()
  459. - o.protMageDelay > 1500)
  460. o.teleBlockLength = 150000;
  461. else
  462. o.teleBlockLength = 300000;
  463. }
  464. break;
  465.  
  466. case 12901:
  467. case 12919: // blood spells
  468. case 12911:
  469. case 12929:
  470. int heal = (int) (damage / 4);
  471. if (c.playerLevel[3] + heal > c.getPA().getLevelForXP(
  472. c.playerXP[3])) {
  473. c.playerLevel[3] = c.getPA().getLevelForXP(
  474. c.playerXP[3]);
  475. } else {
  476. c.playerLevel[3] += heal;
  477. }
  478. c.getPA().refreshSkill(3);
  479. break;
  480.  
  481. case 1153:
  482. PlayerHandler.players[i].playerLevel[0] -= ((o.getPA()
  483. .getLevelForXP(
  484. PlayerHandler.players[i].playerXP[0]) * 5) / 100);
  485. o.sendMessage("Your attack level has been reduced!");
  486. PlayerHandler.players[i].reduceSpellDelay[c.reduceSpellId] = System
  487. .currentTimeMillis();
  488. o.getPA().refreshSkill(0);
  489. break;
  490.  
  491. case 1157:
  492. PlayerHandler.players[i].playerLevel[2] -= ((o.getPA()
  493. .getLevelForXP(
  494. PlayerHandler.players[i].playerXP[2]) * 5) / 100);
  495. o.sendMessage("Your strength level has been reduced!");
  496. PlayerHandler.players[i].reduceSpellDelay[c.reduceSpellId] = System
  497. .currentTimeMillis();
  498. o.getPA().refreshSkill(2);
  499. break;
  500.  
  501. case 1161:
  502. PlayerHandler.players[i].playerLevel[1] -= ((o.getPA()
  503. .getLevelForXP(
  504. PlayerHandler.players[i].playerXP[1]) * 5) / 100);
  505. o.sendMessage("Your defence level has been reduced!");
  506. PlayerHandler.players[i].reduceSpellDelay[c.reduceSpellId] = System
  507. .currentTimeMillis();
  508. o.getPA().refreshSkill(1);
  509. break;
  510.  
  511. case 1542:
  512. PlayerHandler.players[i].playerLevel[1] -= ((o.getPA()
  513. .getLevelForXP(
  514. PlayerHandler.players[i].playerXP[1]) * 10) / 100);
  515. o.sendMessage("Your defence level has been reduced!");
  516. PlayerHandler.players[i].reduceSpellDelay[c.reduceSpellId] = System
  517. .currentTimeMillis();
  518. o.getPA().refreshSkill(1);
  519. break;
  520.  
  521. case 1543:
  522. PlayerHandler.players[i].playerLevel[2] -= ((o.getPA()
  523. .getLevelForXP(
  524. PlayerHandler.players[i].playerXP[2]) * 10) / 100);
  525. o.sendMessage("Your strength level has been reduced!");
  526. PlayerHandler.players[i].reduceSpellDelay[c.reduceSpellId] = System
  527. .currentTimeMillis();
  528. o.getPA().refreshSkill(2);
  529. break;
  530.  
  531. case 1562:
  532. PlayerHandler.players[i].playerLevel[0] -= ((o.getPA()
  533. .getLevelForXP(
  534. PlayerHandler.players[i].playerXP[0]) * 10) / 100);
  535. o.sendMessage("Your attack level has been reduced!");
  536. PlayerHandler.players[i].reduceSpellDelay[c.reduceSpellId] = System
  537. .currentTimeMillis();
  538. o.getPA().refreshSkill(0);
  539. break;
  540. }
  541. }
  542.  
  543. PlayerHandler.players[i].logoutDelay = System
  544. .currentTimeMillis();
  545. PlayerHandler.players[i].underAttackBy = c.playerId;
  546. PlayerHandler.players[i].killerId = c.playerId;
  547. PlayerHandler.players[i].singleCombatDelay = System
  548. .currentTimeMillis();
  549. if (c.getCombat().magicMaxHit() != 0) {
  550. PlayerHandler.players[i].dealDamage(damage);
  551. PlayerHandler.players[i].damageTaken[c.playerId] += damage;
  552. c.totalPlayerDamageDealt += damage;
  553. if (!c.magicFailed) {
  554. PlayerHandler.players[i].handleHitMask(damage);
  555. }
  556. }
  557. c.getCombat().applySmite(i, damage);
  558. c.killedBy = PlayerHandler.players[i].playerId;
  559. o.getPA().refreshSkill(3);
  560. PlayerHandler.players[i].updateRequired = true;
  561. c.usingMagic = false;
  562. c.castingMagic = false;
  563. if (o.inMulti() && c.getCombat().multis()) {
  564. c.barrageCount = 0;
  565. for (int j = 0; j < PlayerHandler.players.length; j++) {
  566. if (PlayerHandler.players[j] != null) {
  567. if (j == o.playerId)
  568. continue;
  569. if (c.barrageCount >= 9)
  570. break;
  571. if (o.goodDistance(o.getX(), o.getY(),
  572. PlayerHandler.players[j].getX(),
  573. PlayerHandler.players[j].getY(), 1))
  574. c.getCombat().appendMultiBarrage(j,
  575. c.magicFailed);
  576. }
  577. }
  578. }
  579. c.getPA().refreshSkill(3);
  580. c.getPA().refreshSkill(6);
  581. c.oldSpellId = 0;
  582. }
  583. }
  584. c.getPA().requestUpdates();
  585. if (c.bowSpecShot <= 0) {
  586. c.oldPlayerIndex = 0;
  587. c.projectileStage = 0;
  588. c.lastWeaponUsed = 0;
  589. c.doubleHit = false;
  590. c.bowSpecShot = 0;
  591. }
  592. if (c.bowSpecShot != 0) {
  593. c.bowSpecShot = 0;
  594. }
  595. }
  596.  
  597. public static void attackPlayer(Client c, int i) {
  598. Client c2 = (Client)PlayerHandler.players[i]; //the player we are attacking
  599. if (c.isDead || c.playerLevel[3] <= 0) {
  600. return;
  601. }
  602. if (PlayerHandler.players[i] != null) {
  603. if (PlayerHandler.players[i].isDead) {
  604. c.getCombat().resetPlayerAttack();
  605. return;
  606. }
  607. if (c.respawnTimer > 0 || PlayerHandler.players[i].respawnTimer > 0) {
  608. c.getCombat().resetPlayerAttack();
  609. return;
  610. }
  611. if (!c.getCombat().checkReqs()) {
  612. return;
  613. }
  614. boolean sameSpot = c.absX == PlayerHandler.players[i].getX()
  615. && c.absY == PlayerHandler.players[i].getY();
  616. if (!c.goodDistance(PlayerHandler.players[i].getX(),
  617. PlayerHandler.players[i].getY(), c.getX(), c.getY(), 25)
  618. && !sameSpot) {
  619. c.getCombat().resetPlayerAttack();
  620. return;
  621. }
  622. if (PlayerHandler.players[i].respawnTimer > 0) {
  623. PlayerHandler.players[i].playerIndex = 0;
  624. c.getCombat().resetPlayerAttack();
  625. return;
  626. }
  627.  
  628. if (PlayerHandler.players[i].heightLevel != c.heightLevel) {
  629. c.getCombat().resetPlayerAttack();
  630. return;
  631. }
  632. c.followId = i;
  633. c.followId2 = 0;
  634. if (c.attackTimer <= 0) {
  635. c.usingBow = false;
  636. c.specEffect = 0;
  637. c.usingRangeWeapon = false;
  638. c.rangeItemUsed = 0;
  639. c.usingBow = false;
  640. c.usingArrows = false;
  641. c.usingOtherRangeWeapons = false;
  642. c.usingCross = c.playerEquipment[c.playerWeapon] == 9185;
  643. c.projectileStage = 0;
  644.  
  645. if (c.absX == PlayerHandler.players[i].absX
  646. && c.absY == PlayerHandler.players[i].absY) {
  647. if (c.freezeTimer > 0) {
  648. c.getCombat().resetPlayerAttack();
  649. return;
  650. }
  651. c.followId = i;
  652. c.attackTimer = 0;
  653. return;
  654. }
  655. // c.sendMessage("Made it here1.");
  656. /**
  657. * Checks if the player is not on the same X coord and Y coord and not using any
  658. *range or mage
  659. */
  660. if (c.getX() != c2.getX() && c.getY() != c2.getY() && !c.usingOtherRangeWeapons && !c.getCombat().usingHally() && !c.usingBow && !c.usingMagic) {
  661. c.faceUpdate(i+32768); //face the player
  662. c.getPA().stopDiagonal(c2.getX(), c2.getY());//move to a correct spot
  663. return;
  664. }
  665. if (!c.usingMagic) {
  666. for (int bowId : c.BOWS) {
  667. if (c.playerEquipment[c.playerWeapon] == bowId) {
  668. c.usingBow = true;
  669. for (int arrowId : c.ARROWS) {
  670. if (c.playerEquipment[c.playerArrows] == arrowId) {
  671. c.usingArrows = true;
  672. }
  673. }
  674. }
  675. }
  676.  
  677. for (int otherRangeId : c.OTHER_RANGE_WEAPONS) {
  678. if (c.playerEquipment[c.playerWeapon] == otherRangeId) {
  679. c.usingOtherRangeWeapons = true;
  680. }
  681. }
  682. }
  683. if (c.autocasting) {
  684. c.spellId = c.autocastId;
  685. c.usingMagic = true;
  686. }
  687. if (c.spellId > 0) {
  688. c.usingMagic = true;
  689. }
  690. c.attackTimer = c.getCombat().getAttackDelay(
  691. c.getItems()
  692. .getItemName(c.playerEquipment[c.playerWeapon])
  693. .toLowerCase());
  694.  
  695. if (c.clanWarRule[2]
  696. && (c.usingBow || c.usingOtherRangeWeapons)) {
  697. c.sendMessage("You are not allowed to use ranged during this war!");
  698. return;
  699. }
  700.  
  701. if (c.clanWarRule[0]
  702. && (!c.usingBow && !c.usingOtherRangeWeapons && !c.usingMagic)) {
  703. c.sendMessage("You are not allowed to use melee during this war!");
  704. return;
  705. }
  706.  
  707. if (c.clanWarRule[1] && c.usingMagic) {
  708. c.sendMessage("You are not allowed to use magic during this war!");
  709. c.getCombat().resetPlayerAttack();
  710. return;
  711. }
  712.  
  713. if(c.duelRule[9]){
  714. boolean canUseWeapon = false;
  715. for(int funWeapon: Config.FUN_WEAPONS) {
  716. if(c.playerEquipment[c.playerWeapon] == funWeapon) {
  717. canUseWeapon = true;
  718. }
  719. }
  720. if(!canUseWeapon) {
  721. c.sendMessage("You can only use fun weapons in this duel!");
  722. c.getCombat().resetPlayerAttack();
  723. return;
  724. }
  725. }
  726. //c.sendMessage("Made it here3.");
  727. if(c.duelRule[2] && (c.usingBow || c.usingOtherRangeWeapons)) {
  728. c.sendMessage("Range has been disabled in this duel!");
  729. return;
  730. }
  731. if(c.duelRule[3] && (!c.usingBow && !c.usingOtherRangeWeapons && !c.usingMagic)) {
  732. c.sendMessage("Melee has been disabled in this duel!");
  733. return;
  734. }
  735.  
  736. if(c.duelRule[4] && c.usingMagic) {
  737. c.sendMessage("Magic has been disabled in this duel!");
  738. c.getCombat().resetPlayerAttack();
  739. return;
  740. }
  741.  
  742.  
  743. if ((!c.goodDistance(c.getX(), c.getY(),
  744. PlayerHandler.players[i].getX(),
  745. PlayerHandler.players[i].getY(), 4) && (c.usingOtherRangeWeapons
  746. && !c.usingBow && !c.usingMagic))
  747. || (!c.goodDistance(c.getX(), c.getY(),
  748. PlayerHandler.players[i].getX(),
  749. PlayerHandler.players[i].getY(), 2) && (!c.usingOtherRangeWeapons
  750. && c.getCombat().usingHally() && !c.usingBow && !c.usingMagic))
  751. || (!c.goodDistance(c.getX(), c.getY(),
  752. PlayerHandler.players[i].getX(),
  753. PlayerHandler.players[i].getY(), c.getCombat()
  754. .getRequiredDistance()) && (!c.usingOtherRangeWeapons
  755. && !c.getCombat().usingHally() && !c.usingBow && !c.usingMagic))
  756. || (!c.goodDistance(c.getX(), c.getY(),
  757. PlayerHandler.players[i].getX(),
  758. PlayerHandler.players[i].getY(), 10) && (c.usingBow || c.usingMagic))) {
  759. c.attackTimer = 1;
  760. if (!c.usingBow && !c.usingMagic
  761. && !c.usingOtherRangeWeapons && c.freezeTimer > 0)
  762. c.getCombat().resetPlayerAttack();
  763. return;
  764. }
  765.  
  766. if (!c.usingCross
  767. && !c.usingArrows
  768. && c.usingBow
  769. && (c.playerEquipment[c.playerWeapon] < 6869 || c.playerEquipment[c.playerWeapon] < 6869)
  770. && !c.usingMagic) {
  771. c.sendMessage("You have run out of arrows!");
  772. c.stopMovement();
  773. c.getCombat().resetPlayerAttack();
  774. return;
  775. }
  776. if (c.getCombat().correctBowAndArrows() < c.playerEquipment[c.playerArrows]
  777. && Config.CORRECT_ARROWS
  778. && c.usingBow
  779. && !c.getCombat().usingCrystalBow()
  780. && c.playerEquipment[c.playerWeapon] != 9185
  781. && !c.usingMagic) {
  782. c.sendMessage("You can't use "
  783. + c.getItems()
  784. .getItemName(
  785. c.playerEquipment[c.playerArrows])
  786. .toLowerCase()
  787. + "s with a "
  788. + c.getItems()
  789. .getItemName(
  790. c.playerEquipment[c.playerWeapon])
  791. .toLowerCase() + ".");
  792. c.stopMovement();
  793. c.getCombat().resetPlayerAttack();
  794. return;
  795. }
  796. if (c.playerEquipment[c.playerWeapon] == 9185
  797. && !c.getCombat().properBolts() && !c.usingMagic) {
  798. c.sendMessage("You must use bolts with a crossbow.");
  799. c.stopMovement();
  800. c.getCombat().resetPlayerAttack();
  801. return;
  802. }
  803.  
  804. if (c.usingBow || c.usingMagic || c.usingOtherRangeWeapons
  805. || c.getCombat().usingHally()) {
  806. c.stopMovement();
  807. }
  808.  
  809. if (!c.getCombat().checkMagicReqs(c.spellId)) {
  810. c.stopMovement();
  811. c.getCombat().resetPlayerAttack();
  812. return;
  813. }
  814.  
  815. c.faceUpdate(i + 32768);
  816. if(c.duelStatus != 5) {
  817. if (!c.attackedPlayers.contains(c.playerIndex)
  818. && !PlayerHandler.players[c.playerIndex].attackedPlayers
  819. .contains(c.playerId)) {
  820. c.attackedPlayers.add(c.playerIndex);
  821. c.isSkulled = true;
  822. c.skullTimer = Config.SKULL_TIMER;
  823. c.headIconPk = 0;
  824. c.getPA().requestUpdates();
  825. }
  826. }
  827.  
  828. c.specAccuracy = 1.0;
  829. c.specDamage = 1.0;
  830. c.delayedDamage = c.delayedDamage2 = 0;
  831. if (c.usingSpecial && !c.usingMagic) {
  832. if(c.duelRule[10] && c.duelStatus == 5) {
  833. c.sendMessage("Special attacks have been disabled during this duel!");
  834. c.usingSpecial = false;
  835. c.getItems().updateSpecialBar();
  836. c.getCombat().resetPlayerAttack();
  837. return;
  838. }
  839. if (c.getCombat().checkSpecAmount(
  840. c.playerEquipment[c.playerWeapon])) {
  841. c.lastArrowUsed = c.playerEquipment[c.playerArrows];
  842. c.getCombat().activateSpecial(
  843. c.playerEquipment[c.playerWeapon], i);
  844. c.followId = c.playerIndex;
  845. return;
  846. } else {
  847. c.sendMessage("You don't have the required special energy to use this attack.");
  848. c.usingSpecial = false;
  849. c.getItems().updateSpecialBar();
  850. c.playerIndex = 0;
  851. return;
  852. }
  853. }
  854. if (c.playerLevel[3] > 0 && !c.isDead
  855. && PlayerHandler.players[i].playerLevel[3] > 0) {
  856. if (!c.usingMagic) {
  857. c.startAnimation(c
  858. .getCombat()
  859. .getWepAnim(
  860. c.getItems()
  861. .getItemName(
  862. c.playerEquipment[c.playerWeapon])
  863. .toLowerCase()));
  864. c.mageFollow = false;
  865. } else {
  866. c.startAnimation(c.MAGIC_SPELLS[c.spellId][2]);
  867. c.mageFollow = true;
  868. c.followId = c.playerIndex;
  869. }
  870. }
  871. PlayerHandler.players[i].underAttackBy = c.playerId;
  872. PlayerHandler.players[i].logoutDelay = System
  873. .currentTimeMillis();
  874. PlayerHandler.players[i].singleCombatDelay = System
  875. .currentTimeMillis();
  876. PlayerHandler.players[i].killerId = c.playerId;
  877. c.lastArrowUsed = 0;
  878. c.rangeItemUsed = 0;
  879. if (!c.usingBow && !c.usingMagic && !c.usingOtherRangeWeapons) { // melee
  880. // hit
  881. // delay
  882. c.followId = PlayerHandler.players[c.playerIndex].playerId;
  883. c.getPA().followPlayer();
  884. c.hitDelay = c.getCombat().getHitDelay(
  885. i,
  886. c.getItems()
  887. .getItemName(
  888. c.playerEquipment[c.playerWeapon])
  889. .toLowerCase());
  890. c.delayedDamage = Misc.random(c.getCombat()
  891. .calculateMeleeMaxHit());
  892. c.projectileStage = 0;
  893. c.oldPlayerIndex = i;
  894. }
  895.  
  896. if (c.usingBow && !c.usingOtherRangeWeapons && !c.usingMagic
  897. || c.usingCross) { // range hit delay
  898. if (c.playerEquipment[c.playerWeapon] >= 6869
  899. && c.playerEquipment[c.playerWeapon] <= 4223 && c.playerEquipment[c.playerWeapon] <= 6869) {
  900. c.rangeItemUsed = c.playerEquipment[c.playerWeapon];
  901. c.crystalBowArrowCount++;
  902. } else {
  903. c.rangeItemUsed = c.playerEquipment[c.playerArrows];
  904. c.getItems().deleteArrow();
  905. }
  906. if (c.fightMode == 2)
  907. c.attackTimer--;
  908. if (c.usingCross)
  909. c.usingBow = true;
  910. c.usingBow = true;
  911. c.followId = PlayerHandler.players[c.playerIndex].playerId;
  912. c.getPA().followPlayer();
  913. c.lastWeaponUsed = c.playerEquipment[c.playerWeapon];
  914. c.lastArrowUsed = c.playerEquipment[c.playerArrows];
  915. c.gfx100(c.getCombat().getRangeStartGFX());
  916. c.hitDelay = c.getCombat().getHitDelay(
  917. i,
  918. c.getItems()
  919. .getItemName(
  920. c.playerEquipment[c.playerWeapon])
  921. .toLowerCase());
  922. c.projectileStage = 1;
  923. c.oldPlayerIndex = i;
  924. c.getCombat().fireProjectilePlayer();
  925. }
  926.  
  927. if (c.usingOtherRangeWeapons) { // knives, darts, etc hit delay
  928. c.rangeItemUsed = c.playerEquipment[c.playerWeapon];
  929. c.getItems().deleteEquipment();
  930. c.usingRangeWeapon = true;
  931. c.followId = PlayerHandler.players[c.playerIndex].playerId;
  932. c.getPA().followPlayer();
  933. c.gfx100(c.getCombat().getRangeStartGFX());
  934. if (c.fightMode == 2)
  935. c.attackTimer--;
  936. c.hitDelay = c.getCombat().getHitDelay(
  937. i,
  938. c.getItems()
  939. .getItemName(
  940. c.playerEquipment[c.playerWeapon])
  941. .toLowerCase());
  942. c.projectileStage = 1;
  943. c.oldPlayerIndex = i;
  944. c.getCombat().fireProjectilePlayer();
  945. }
  946.  
  947. if (c.usingMagic) { // magic hit delay
  948. int pX = c.getX();
  949. int pY = c.getY();
  950. int nX = PlayerHandler.players[i].getX();
  951. int nY = PlayerHandler.players[i].getY();
  952. int offX = (pY - nY) * -1;
  953. int offY = (pX - nX) * -1;
  954. c.castingMagic = true;
  955. c.projectileStage = 2;
  956. if (c.MAGIC_SPELLS[c.spellId][3] > 0) {
  957. if (c.getCombat().getStartGfxHeight() == 100) {
  958. c.gfx100(c.MAGIC_SPELLS[c.spellId][3]);
  959. } else {
  960. c.gfx0(c.MAGIC_SPELLS[c.spellId][3]);
  961. }
  962. }
  963. if (c.MAGIC_SPELLS[c.spellId][4] > 0) {
  964. c.getPA().createPlayersProjectile(pX, pY, offX, offY,
  965. 50, 78, c.MAGIC_SPELLS[c.spellId][4],
  966. c.getCombat().getStartHeight(),
  967. c.getCombat().getEndHeight(), -i - 1,
  968. c.getCombat().getStartDelay());
  969. }
  970. if (c.autocastId > 0) {
  971. c.followId = c.playerIndex;
  972. c.followDistance = 5;
  973. }
  974. c.hitDelay = c.getCombat().getHitDelay(
  975. i,
  976. c.getItems()
  977. .getItemName(
  978. c.playerEquipment[c.playerWeapon])
  979. .toLowerCase());
  980. c.oldPlayerIndex = i;
  981. c.oldSpellId = c.spellId;
  982. c.spellId = 0;
  983. Client o = (Client) PlayerHandler.players[i];
  984. if (c.MAGIC_SPELLS[c.oldSpellId][0] == 12891 && o.isMoving) {
  985. // c.sendMessage("Barrage projectile..");
  986. c.getPA().createPlayersProjectile(pX, pY, offX, offY,
  987. 50, 85, 368, 25, 25, -i - 1,
  988. c.getCombat().getStartDelay());
  989. }
  990. if (Misc.random(o.getCombat().mageDef()) > Misc.random(c
  991. .getCombat().mageAtk())) {
  992. // if(Misc.random(o.getCombat().mageAtk()) >
  993. // Misc.random(o.getCombat().mageDef())) {
  994. c.magicFailed = true;
  995. } else {
  996. c.magicFailed = false;
  997. }
  998.  
  999. // if(Misc.random(o.getCombat().mageAtk()) >
  1000. // Misc.random(o.getCombat().mageDef())) {
  1001. // c.magicFailed = false;
  1002. // } else if(Misc.random(o.getCombat().mageAtk()) <
  1003. // Misc.random(o.getCombat().mageDef())) {
  1004. // c.magicFailed = true;
  1005. // }
  1006.  
  1007. int freezeDelay = c.getCombat().getFreezeTime();// freeze
  1008. // time
  1009. if (freezeDelay > 0
  1010. && PlayerHandler.players[i].freezeTimer <= -3
  1011. && !c.magicFailed) {
  1012. PlayerHandler.players[i].freezeTimer = freezeDelay;
  1013. o.resetWalkingQueue();
  1014. o.sendMessage("You have been frozen.");
  1015. o.frozenBy = c.playerId;
  1016. }
  1017. if (!c.autocasting && c.spellId <= 0)
  1018. c.playerIndex = 0;
  1019. }
  1020.  
  1021. if (c.usingBow && Config.CRYSTAL_BOW_DEGRADES) { // crystal bow
  1022. // degrading
  1023. if (c.playerEquipment[c.playerWeapon] == 4212) { // new
  1024. // crystal
  1025. // bow
  1026. // becomes
  1027. // full
  1028. // bow
  1029. // on
  1030. // the
  1031. // first
  1032. // shot
  1033. c.getItems().wearItem(4214, 1, 3);
  1034. }
  1035.  
  1036. if (c.crystalBowArrowCount >= 250) {
  1037. switch (c.playerEquipment[c.playerWeapon]) {
  1038.  
  1039. case 4223: // 1/10 bow
  1040. c.getItems().wearItem(-1, 1, 3);
  1041. c.sendMessage("Your crystal bow has fully degraded.");
  1042. if (!c.getItems().addItem(4207, 1)) {
  1043. Server.itemHandler.createGroundItem(c, 4207,
  1044. c.getX(), c.getY(), 1, c.getId());
  1045. }
  1046. c.crystalBowArrowCount = 0;
  1047. break;
  1048.  
  1049. default:
  1050. c.getItems().wearItem(
  1051. ++c.playerEquipment[c.playerWeapon], 1, 3);
  1052. c.sendMessage("Your crystal bow degrades.");
  1053. c.crystalBowArrowCount = 0;
  1054. break;
  1055. }
  1056. }
  1057. }
  1058. }
  1059. }
  1060. }
  1061. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement