Guest User

Untitled

a guest
Mar 21st, 2016
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.17 KB | None | 0 0
  1. /**
  2. * Attack Npcs
  3. */
  4. public void attackNpc(int i) {
  5. System.out.println("0");
  6. if (NPCHandler.npcs[i] != null) {
  7. if (NPCHandler.npcs[i].isDead || NPCHandler.npcs[i].MaxHP <= 0) {
  8. c.usingMagic = false;
  9. c.faceUpdate(0);
  10. c.npcIndex = 0;
  11. System.out.println("1");
  12. return;
  13.  
  14. }
  15. if (KQnpc(i) && !c.fullVerac() || c.usingMagic) {
  16. resetPlayerAttack();
  17. c.sendMessage("Your attacks will have no effect on the Queen.");
  18. System.out.println("1");
  19. return;
  20. }
  21. if(c.respawnTimer > 0) {
  22. c.npcIndex = 0;
  23. System.out.println("2");
  24. return;
  25. }
  26. if (Server.npcHandler.npcs[i].underAttackBy > 0 && Server.npcHandler.npcs[i].underAttackBy != c.playerId && !Server.npcHandler.npcs[i].inMulti()) {
  27. c.npcIndex = 0;
  28. c.sendMessage("This monster is already in combat.");
  29. System.out.println("3");
  30. return;
  31. }
  32. if ((c.underAttackBy > 0 || c.underAttackBy2 > 0) && c.underAttackBy2 != i && !c.inMulti()) {
  33. resetPlayerAttack();
  34. c.sendMessage("I am already under attack.");
  35. System.out.println("4");
  36. return;
  37. }
  38. if (!goodSlayer(i)) {
  39. resetPlayerAttack();
  40. System.out.println("5");
  41. return;
  42. }
  43. if (NPCHandler.npcs[i].spawnedBy != c.playerId && Server.npcHandler.npcs[i].spawnedBy > 0) {
  44. resetPlayerAttack();
  45. c.sendMessage("This monster was not spawned for you.");
  46. System.out.println("6");
  47. return;
  48. }
  49. c.followId2 = i;
  50. c.followId = 0;
  51. if(c.attackTimer <= 0) {
  52. boolean usingBow = false;
  53. boolean usingArrows = false;
  54. boolean usingOtherRangeWeapons = false;
  55. boolean usingCross = c.playerEquipment[c.playerWeapon] == 9185;
  56. c.bonusAttack = 0;
  57. c.rangeItemUsed = 0;
  58. c.projectileStage = 0;
  59. if (c.autocasting) {
  60. c.spellId = c.autocastId;
  61. c.usingMagic = true;
  62. }
  63. if(c.spellId > 0) {
  64. c.usingMagic = true;
  65. }
  66. c.attackTimer = getAttackDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  67. c.specAccuracy = 1.0;
  68. c.specDamage = 1.0;
  69. if(!c.usingMagic) {
  70. for (int bowId : c.BOWS) {
  71. if(c.playerEquipment[c.playerWeapon] == bowId) {
  72. usingBow = true;
  73. for (int arrowId : c.ARROWS) {
  74. if(c.playerEquipment[c.playerArrows] == arrowId) {
  75. usingArrows = true;
  76. }
  77. }
  78. }
  79. }
  80.  
  81. for (int otherRangeId : c.OTHER_RANGE_WEAPONS) {
  82. if(c.playerEquipment[c.playerWeapon] == otherRangeId) {
  83. usingOtherRangeWeapons = true;
  84. }
  85. }
  86. }
  87. if (armaNpc(i) && !usingCross && !usingBow && !c.usingMagic && !usingCrystalBow() && !usingOtherRangeWeapons) {
  88. resetPlayerAttack();
  89. System.out.println("7");
  90. return;
  91. }
  92. if((!c.goodDistance(c.getX(), c.getY(), NPCHandler.npcs[i].getX(), NPCHandler.npcs[i].getY(), 2) && (usingHally() && !usingOtherRangeWeapons && !usingBow && !c.usingMagic)) ||(!c.goodDistance(c.getX(), c.getY(), Server.npcHandler.npcs[i].getX(), Server.npcHandler.npcs[i].getY(), 4) && (usingOtherRangeWeapons && !usingBow && !c.usingMagic)) || (!c.goodDistance(c.getX(), c.getY(), Server.npcHandler.npcs[i].getX(), Server.npcHandler.npcs[i].getY(), 1) && (!usingOtherRangeWeapons && !usingHally() && !usingBow && !c.usingMagic)) || ((!c.goodDistance(c.getX(), c.getY(), Server.npcHandler.npcs[i].getX(), Server.npcHandler.npcs[i].getY(), 8) && (usingBow || c.usingMagic)))) {
  93. c.attackTimer = 2;
  94. System.out.println("8");
  95. return;
  96. }
  97.  
  98. if(!usingCross && !usingArrows && usingBow && (c.playerEquipment[c.playerWeapon] < 4212 || c.playerEquipment[c.playerWeapon] > 4223)) {
  99. c.sendMessage("You have run out of arrows!");
  100. c.stopMovement();
  101. c.freezeTimer = 1;
  102. c.npcIndex = 0;
  103. System.out.println("9");
  104. return;
  105. }
  106. if(correctBowAndArrows() < c.playerEquipment[c.playerArrows] && Config.CORRECT_ARROWS && usingBow && !usingCrystalBow() && c.playerEquipment[c.playerWeapon] != 9185) {
  107. 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()+".");
  108. c.stopMovement();
  109. c.freezeTimer = 1;
  110. c.npcIndex = 0;
  111. System.out.println("10");
  112. return;
  113. }
  114.  
  115.  
  116. if (c.playerEquipment[c.playerWeapon] == 9185 && !properBolts()) {
  117. c.sendMessage("You must use bolts with a crossbow.");
  118. c.stopMovement();
  119. c.freezeTimer = 1;
  120. resetPlayerAttack();
  121. System.out.println("11");
  122. return;
  123. }
  124.  
  125. if(usingBow || c.usingMagic || usingOtherRangeWeapons || (c.goodDistance(c.getX(), c.getY(), Server.npcHandler.npcs[i].getX(), Server.npcHandler.npcs[i].getY(), 2) && usingHally())) {
  126. c.stopMovement();
  127. }
  128.  
  129. if(!checkMagicReqs(c.spellId)) {
  130. c.stopMovement();
  131. c.npcIndex = 0;
  132. System.out.println("12");
  133. return;
  134. }
  135.  
  136. c.faceUpdate(i);
  137. //c.specAccuracy = 1.0;
  138. //c.specDamage = 1.0;
  139. Server.npcHandler.npcs[i].underAttackBy = c.playerId;
  140. Server.npcHandler.npcs[i].lastDamageTaken = System.currentTimeMillis();
  141. if(c.usingSpecial && !c.usingMagic) {
  142. if(checkSpecAmount(c.playerEquipment[c.playerWeapon])){
  143. c.lastWeaponUsed = c.playerEquipment[c.playerWeapon];
  144. c.lastArrowUsed = c.playerEquipment[c.playerArrows];
  145. activateSpecial(c.playerEquipment[c.playerWeapon], i);
  146. System.out.println("13");
  147. return;
  148. } else {
  149. c.sendMessage("You don't have the required special energy to use this attack.");
  150. c.usingSpecial = false;
  151. c.getItems().updateSpecialBar();
  152. c.npcIndex = 0;
  153. System.out.println("14");
  154. return;
  155. }
  156. }
  157. if(usingBow || c.usingMagic || usingOtherRangeWeapons) {
  158. c.mageFollow = true;
  159. } else {
  160. c.mageFollow = false;
  161. }
  162. c.specMaxHitIncrease = 0;
  163. if(!c.usingMagic) {
  164. c.startAnimation(getWepAnim(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase()));
  165. } else {
  166. c.startAnimation(c.MAGIC_SPELLS[c.spellId][2]);
  167. }
  168. c.lastWeaponUsed = c.playerEquipment[c.playerWeapon];
  169. c.lastArrowUsed = c.playerEquipment[c.playerArrows];
  170. if(!usingBow && !c.usingMagic && !usingOtherRangeWeapons) { // melee hit delay
  171. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  172. c.projectileStage = 0;
  173. c.oldNpcIndex = i;
  174. }
  175.  
  176. if(usingBow && !usingOtherRangeWeapons && !c.usingMagic || usingCross) { // range hit delay
  177. if (usingCross)
  178. c.usingBow = true;
  179. if (c.fightMode == 2)
  180. c.attackTimer--;
  181. c.lastArrowUsed = c.playerEquipment[c.playerArrows];
  182. c.lastWeaponUsed = c.playerEquipment[c.playerWeapon];
  183. c.gfx100(getRangeStartGFX());
  184. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  185. c.projectileStage = 1;
  186. c.oldNpcIndex = i;
  187. if(c.playerEquipment[c.playerWeapon] >= 4212 && c.playerEquipment[c.playerWeapon] <= 4223) {
  188. c.rangeItemUsed = c.playerEquipment[c.playerWeapon];
  189. c.crystalBowArrowCount++;
  190. c.lastArrowUsed = 0;
  191. } else {
  192. c.rangeItemUsed = c.playerEquipment[c.playerArrows];
  193. c.getItems().deleteArrow();
  194. }
  195. fireProjectileNpc();
  196. }
  197.  
  198. if(usingBow && usingCross && c.usingMagic && usingOtherRangeWeapons) {
  199. c.getPA().followNpc();
  200. c.stopMovement();
  201. } else {
  202. c.followId = 0;
  203. c.followId2 = i;
  204. }
  205.  
  206.  
  207. if(usingOtherRangeWeapons && !c.usingMagic && !usingBow) { // knives, darts, etc hit delay
  208. c.rangeItemUsed = c.playerEquipment[c.playerWeapon];
  209. c.getItems().deleteEquipment();
  210. c.gfx100(getRangeStartGFX());
  211. c.lastArrowUsed = 0;
  212. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  213. c.projectileStage = 1;
  214. c.oldNpcIndex = i;
  215. if (c.fightMode == 2)
  216. c.attackTimer--;
  217. fireProjectileNpc();
  218. }
  219.  
  220. if(c.usingMagic) { // magic hit delay
  221. int pX = c.getX();
  222. int pY = c.getY();
  223. int nX = Server.npcHandler.npcs[i].getX();
  224. int nY = Server.npcHandler.npcs[i].getY();
  225. int offX = (pY - nY)* -1;
  226. int offY = (pX - nX)* -1;
  227. c.castingMagic = true;
  228. c.projectileStage = 2;
  229. if(c.MAGIC_SPELLS[c.spellId][3] > 0) {
  230. if(getStartGfxHeight() == 100) {
  231. c.gfx100(c.MAGIC_SPELLS[c.spellId][3]);
  232. } else {
  233. c.gfx0(c.MAGIC_SPELLS[c.spellId][3]);
  234. }
  235. }
  236. if(c.MAGIC_SPELLS[c.spellId][4] > 0) {
  237. c.getPA().createPlayersProjectile(pX, pY, offX, offY, 50, 78, c.MAGIC_SPELLS[c.spellId][4], getStartHeight(), getEndHeight(), i + 1, 50);
  238. }
  239. c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  240. c.oldNpcIndex = i;
  241. c.oldSpellId = c.spellId;
  242. c.spellId = 0;
  243. if (!c.autocasting)
  244. c.npcIndex = 0;
  245. }
  246.  
  247. if(usingBow && Config.CRYSTAL_BOW_DEGRADES) { // crystal bow degrading
  248. if(c.playerEquipment[c.playerWeapon] == 4212) { // new crystal bow becomes full bow on the first shot
  249. c.getItems().wearItem(4214, 1, 3);
  250. }
  251.  
  252. if(c.crystalBowArrowCount >= 250){
  253. switch(c.playerEquipment[c.playerWeapon]) {
  254.  
  255. case 4223: // 1/10 bow
  256. c.getItems().wearItem(-1, 1, 3);
  257. c.sendMessage("Your crystal bow has fully degraded.");
  258. if(!c.getItems().addItem(4207, 1)) {
  259. Server.itemHandler.createGroundItem(c, 4207, c.getX(), c.getY(), 1, c.getId());
  260. }
  261. c.crystalBowArrowCount = 0;
  262. break;
  263.  
  264. default:
  265. c.getItems().wearItem(++c.playerEquipment[c.playerWeapon], 1, 3);
  266. c.sendMessage("Your crystal bow degrades.");
  267. c.crystalBowArrowCount = 0;
  268. break;
  269.  
  270.  
  271. }
  272. }
  273. }
  274. }
  275. }
  276. }
Add Comment
Please, Sign In to add comment