armark1ng

Untitled

Jun 11th, 2016
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.49 KB | None | 0 0
  1. package com.rs.game.map.bossInstance.impl;
  2.  
  3. import java.util.List;
  4. import java.util.concurrent.CopyOnWriteArrayList;
  5.  
  6. import com.rs.game.Animation;
  7. import com.rs.game.Entity;
  8. import com.rs.game.ForceMovement;
  9. import com.rs.game.Graphics;
  10. import com.rs.game.Hit;
  11. import com.rs.game.Projectile;
  12. import com.rs.game.Hit.HitLook;
  13. import com.rs.game.World;
  14. import com.rs.game.WorldObject;
  15. import com.rs.game.WorldTile;
  16. import com.rs.game.map.bossInstance.BossInstance;
  17. import com.rs.game.map.bossInstance.InstanceSettings;
  18. import com.rs.game.npc.vorago.Vorago;
  19. import com.rs.game.npc.vorago.VoragoFace;
  20. import com.rs.game.player.Player;
  21. import com.rs.game.player.dialogues.Dialogue;
  22. import com.rs.game.tasks.WorldTask;
  23. import com.rs.game.tasks.WorldTasksManager;
  24. import com.rs.utils.Utils;
  25.  
  26. public class VoragoInstance extends BossInstance {
  27.  
  28. public static WorldTile PHASE_1 = new WorldTile(3104, 6112, 0), PHASE_2 = new WorldTile(3040, 6048, 0),
  29. PHASE_3 = new WorldTile(3104, 6048, 0), PHASE_4 = new WorldTile(3040, 5984, 0), PHASE_5 = new WorldTile(
  30. 3104, 5984, 0);
  31.  
  32. private transient List<Player> acceptedChallenge;
  33. private transient List<Player> playersOnBattle;
  34. private transient VoragoFace voragoFace;
  35. private transient Vorago vorago;
  36. private transient WorldObject jumpGap;
  37. private transient WorldObject exitSphere;
  38. public boolean startAttack;
  39. public boolean[] arttributes = new boolean[1];// 0 - Jumping Started
  40. public int START_HIT_DAMAGE = 5000;
  41.  
  42. public VoragoInstance(Player owner, InstanceSettings settings) {
  43. super(owner, settings);
  44. acceptedChallenge = new CopyOnWriteArrayList<Player>();
  45. playersOnBattle = new CopyOnWriteArrayList<Player>();
  46. }
  47.  
  48. public void sendChallenge(Player challenger) {
  49. startAttack = true;
  50. sendStartAttack();
  51. acceptedChallenge.add(challenger);
  52. challenger.getPackets().sendGameMessage(
  53. "<col=EE7600>Vorago accepted your challenge and begins to charge a massive attack.");
  54. for (Player reciever : getPlayers()) {
  55. if (reciever == null || reciever == challenger || !reciever.hasSpokenToVorago()
  56. || !isInChallengeArea(reciever))
  57. continue;
  58. reciever.lock();
  59. reciever.getDialogueManager().startDialogue(new Dialogue() {
  60. @Override
  61. public void start() {
  62. this.sendOptionsDialogue(challenger.getDisplayName()
  63. + " HAS CHALLENGED VORAGO<br>ARE YOU WILLING TO FACE THE TEST WITH THEM?", "Yes", "No");
  64. }
  65.  
  66. @Override
  67. public void run(int interfaceId, int componentId) {
  68. if (componentId == OPTION_1) {
  69. acceptedChallenge.add(player);
  70. reciever.getPackets().sendGameMessage(
  71. "<col=EE7600>Vorago accepted your challenge and begins to charge a massive attack.");
  72. }
  73. player.unlock();
  74. end();
  75. }
  76.  
  77. @Override
  78. public void finish() {
  79. }
  80. });
  81. }
  82. }
  83.  
  84. private void sendStartAttack() {
  85. WorldTasksManager.schedule(new WorldTask() {
  86. int count = 0;
  87.  
  88. @Override
  89. public void run() {
  90. if (count == 16) {
  91. World.sendGraphics(voragoFace, new Graphics(4033, 1, 1, 2, false), getTile(new WorldTile(3040,
  92. 6122, 0)));
  93. } else if (count == 17) {
  94. int damage = (START_HIT_DAMAGE / acceptedChallenge.size());
  95. for (Player player : acceptedChallenge) {
  96. if (player == null)
  97. continue;
  98. player.faceEntity(voragoFace);
  99. if (damage >= player.getHitpoints())
  100. player.sendDeath(voragoFace);
  101. else {
  102. WorldTile toTile = getTile(new WorldTile(3030 + Utils.random(8), 6118 - Utils.random(3), 0));
  103. player.setNextForceMovement(new ForceMovement(toTile, 1, ForceMovement.NORTH));
  104. player.setNextAnimation(new Animation(20338));
  105. player.setNextGraphics(new Graphics(4034));
  106. player.applyHit(new Hit(voragoFace, damage, HitLook.REGULAR_DAMAGE));
  107. }
  108. }
  109. } else if (count == 18) {
  110. if (startAttack && acceptedChallenge.size() > 0)
  111. enterBattle();
  112. stop();
  113. }
  114. count++;
  115. }
  116. }, 0, 1);
  117. }
  118.  
  119. public void enterBattle() {
  120. voragoFace.setBattleInGoing(true);
  121. VoragoInstance instance = this;
  122. WorldTasksManager.schedule(new WorldTask() {
  123. int count = 0;
  124.  
  125. @Override
  126. public void run() {
  127. switch (count) {
  128. case 0:
  129. for (Player player : acceptedChallenge) {
  130. if (player == null || player.isDead())
  131. continue;
  132. player.setNextWorldTile(randomSpawnTile(player, getVoragoSpawnLocation(1), 5));
  133. player.setNextAnimation(new Animation(20401));
  134. player.getTimersManager().sendTimer();
  135. acceptedChallenge.remove(player);
  136. playersOnBattle.add(player);
  137. }
  138. break;
  139. case 9:
  140. if (playersOnBattle.isEmpty()) {
  141. voragoFace.setBattleInGoing(false);
  142. stop();
  143. break;
  144. }
  145. vorago = new Vorago(17182, getVoragoSpawnLocation(1), -1, true, instance);
  146. vorago.setNextAnimation(new Animation(20367));
  147. break;
  148. case 10:
  149. stop();
  150. break;
  151. }
  152. count++;
  153. }
  154. }, 0, 1);
  155. }
  156.  
  157. public WorldTile randomSpawnTile(Entity target, WorldTile checkTile, int randomizeSize) {
  158. WorldTile teleTile = null;
  159. // attemps to randomize tile by 4x4 area
  160. int size = target == null ? 1 : target.getSize();
  161. for (int trycount = 0; trycount < 10; trycount++) {
  162. teleTile = new WorldTile(checkTile, randomizeSize);
  163. if (!ignoreTile(teleTile) || World.isTileFree(checkTile.getPlane(), teleTile.getX(), teleTile.getY(), size))
  164. break;
  165. teleTile = checkTile;
  166. }
  167. return teleTile;
  168. }
  169.  
  170. public boolean ignoreTile(WorldTile tile) {
  171. if (vorago != null) {
  172. int phase = vorago.getPhase();
  173. WorldTile voragoL = getVoragoSpawnLocation(phase);
  174. WorldTile center = new WorldTile(voragoL.getX() + 2, voragoL.getY() + 2, voragoL.getPlane());
  175. boolean insidePhaseArea = phase != 5 ? (tile.getX() >= (center.getX() - 12)
  176. && tile.getX() <= (center.getX() + 11) && tile.getY() >= (center.getY() - 12) && tile.getY() <= (center
  177. .getY() + 11)) : ((tile.getX() >= (center.getX() - 13) && tile.getX() <= (center.getX() + 10)
  178. && tile.getY() >= (center.getY() - 2) && tile.getY() <= (center.getY() + 2)));
  179. return !insidePhaseArea;
  180. }
  181. return false;
  182. }
  183.  
  184. public WorldTile getSimilarCoords(WorldTile entity, int nextphase) {
  185. switch (nextphase) {
  186. case 2:
  187. return new WorldTile(entity.getX() - 64, entity.getY() - 64, 0);
  188. case 3:
  189. return new WorldTile(entity.getX() + 64, entity.getY(), 0);
  190. case 4:
  191. return new WorldTile(entity.getX() - 64, entity.getY() - 64, 0);
  192. }
  193. WorldTile checkTile = new WorldTile(3095, 5985, 0);
  194. WorldTile teleTile = null;
  195. for (int trycount = 0; trycount < 10; trycount++) {
  196. teleTile = new WorldTile(checkTile, 2);
  197. if (World.isTileFree(checkTile.getPlane(), teleTile.getX(), teleTile.getY(), 1))
  198. break;
  199. teleTile = checkTile;
  200. }
  201. return getTile(teleTile);
  202. }
  203.  
  204. public WorldTile getVoragoSpawnLocation(int phase) {
  205. switch (phase) {
  206. case 1:
  207. return getTile(new WorldTile(3102, 6110, 0));
  208. case 2:
  209. return getTile(new WorldTile(3038, 6046, 0));
  210. case 3:
  211. return getTile(new WorldTile(3102, 6046, 0));
  212. case 4:
  213. return getTile(new WorldTile(3038, 5982, 0));
  214. case 5:
  215. default:
  216. return getTile(new WorldTile(3102, 5982, 0));
  217. }
  218. }
  219.  
  220. @Override
  221. public int[] getMapSize() {
  222. return new int[] { 2, 3 };
  223. }
  224.  
  225. @Override
  226. public int[] getMapPos() {
  227. return new int[] { 376, 744 };
  228. }
  229.  
  230. @Override
  231. public void loadMapInstance() {
  232. voragoFace = new VoragoFace(17162, getTile(new WorldTile(3038, 6128, 0)), -1, false, this);
  233. jumpGap = new WorldObject(84825, 10, 0, getTile(new WorldTile(3099, 6123, 0)));
  234. World.spawnObject(jumpGap);
  235. }
  236.  
  237. public Vorago getVorago() {
  238. return vorago;
  239. }
  240.  
  241. public VoragoFace getVoragoFace() {
  242. return voragoFace;
  243. }
  244.  
  245. public List<Player> getAcceptedChallenge() {
  246. return acceptedChallenge;
  247. }
  248.  
  249. public List<Player> getPlayersOnBattle() {
  250. return playersOnBattle;
  251. }
  252.  
  253. public boolean ChallengeStarted() {
  254. return acceptedChallenge.size() != 0;
  255. }
  256.  
  257. public boolean isInChallengeArea(Player player) {
  258. return (player.getX() >= (voragoFace.getX() - 19) && player.getX() <= (voragoFace.getX() + 19)
  259. && player.getY() >= (voragoFace.getY() - 14) && player.getY() <= (voragoFace.getY() + 9));
  260. }
  261.  
  262. /*
  263. * public boolean isInBoreHoleArea(Player player) { return (player.getX() >=
  264. * 3012 && player.getX() <= 3062 && player.getY() >= 6087 && player.getY()
  265. * <= 6133); }
  266. */
  267.  
  268. public void removePlayer(Player player, int type) {
  269. if (acceptedChallenge.contains(player))
  270. acceptedChallenge.remove(player);
  271. if (type != BossInstance.LOGGED_OUT)
  272. this.startAttack = false;
  273. if (isPublic()) {
  274. if (type == BossInstance.LOGGED_OUT) {
  275. getPlayers().remove(player);
  276. } else if (type != BossInstance.DIED)
  277. leaveInstance(player, type);
  278. } else {
  279. player.getControlerManager().removeControlerWithoutCheck();
  280. if (type != BossInstance.DIED)
  281. leaveInstance(player, type);
  282. }
  283. }
  284.  
  285. public void removePlayerFromBattle(Player player, int type) {
  286. playersOnBattle.remove(player);
  287. if (isPublic()) {
  288. if (type == BossInstance.LOGGED_OUT) {
  289. player.setLocation(randomSpawnTile(player, getTile(new WorldTile(3047, 6121, 0)), 2));
  290. } else if (type != BossInstance.DIED) {
  291. player.setNextWorldTile(randomSpawnTile(player, getTile(new WorldTile(3047, 6121, 0)), 2));
  292. }
  293. } else {
  294. if (type == BossInstance.LOGGED_OUT) {
  295. player.getControlerManager().removeControlerWithoutCheck();
  296. leaveInstance(player, type);
  297. } else if (type != BossInstance.DIED) {
  298. player.setNextWorldTile(randomSpawnTile(player, getTile(new WorldTile(3047, 6121, 0)), 2));
  299. }
  300. }
  301. if (playersOnBattle.isEmpty()) {
  302. if (vorago != null) {
  303. vorago.setFinished(true);
  304. vorago = null;
  305. }
  306. if (exitSphere != null) {
  307. World.removeObject(exitSphere);
  308. exitSphere = null;
  309. }
  310. voragoFace.setBattleInGoing(false);
  311. }
  312. }
  313.  
  314. public void finishPhase(Player player) {
  315. vorago.setPhaseProgress(vorago.getPhase() == 1 ? 1 : vorago.getPhase() == 2 ? 5 : vorago.getPhase() == 4 ? 3
  316. : 0);
  317. vorago.sendDeath(player);
  318. }
  319.  
  320. public boolean playerIsOnBattle(Player player) {
  321. if (voragoFace == null || playersOnBattle == null)
  322. return false;
  323. return voragoFace.isBattleInGoing() && playersOnBattle.contains(player);
  324. }
  325.  
  326. @Override
  327. public void finish() {
  328. if (!isPublic()) {
  329. World.removeNPC(voragoFace);
  330. World.removeObject(jumpGap);
  331. }
  332. super.finish();
  333. }
  334.  
  335. public static void sendMessage(Player player, int border, String message) {
  336. player.getPackets().sendEntityMessage(border, 15263739, player, message, true);
  337. }
  338.  
  339. public static void sendMessage(Player player, int border, String message, boolean sendGameMessage) {
  340. player.getPackets().sendEntityMessage(border, 15263739, player, message, sendGameMessage);
  341. }
  342.  
  343. public void spawnExitSphere() {
  344. Projectile projectile = World.sendProjectileNew(getTile(new WorldTile(3112, 5984, 0)), getTile(new WorldTile(
  345. 3105, 5985, 0)), 4029, 0, 30, 10, 0.2, 30, 1);
  346. int cycleTime = Utils.projectileTimeToCycles(projectile.getEndTime()) - 1;
  347. exitSphere = new WorldObject(84960, 10, 0, getTile(new WorldTile(3105, 5985, 0)));
  348. WorldTasksManager.schedule(new WorldTask() {
  349. @Override
  350. public void run() {
  351. World.spawnObject(exitSphere);
  352. }
  353. }, cycleTime);
  354. }
  355.  
  356. public void handleExitSphereClick(Player player) {
  357. player.lock();
  358. Projectile projectile = World.sendProjectileNew(getTile(new WorldTile(3105, 5985, 0)), player, 4029, 0, 20, 10,
  359. 0.5, 30, 1);
  360. int cycleTime = Utils.projectileTimeToCycles(projectile.getEndTime()) - 1;
  361. WorldTasksManager.schedule(new WorldTask() {
  362. @Override
  363. public void run() {
  364. removePlayerFromBattle(player, BossInstance.EXITED);
  365. player.unlock();
  366. }
  367. }, cycleTime);
  368. }
  369. }
Advertisement
Add Comment
Please, Sign In to add comment