armark1ng

Untitled

Apr 7th, 2016
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.75 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 List<Player> acceptedChallenge;
  33. private List<Player> playersOnBattle;
  34. private VoragoFace voragoFace;
  35. private Vorago vorago;
  36. private WorldObject jumpGap;
  37. private 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. acceptedChallenge.remove(player);
  135. playersOnBattle.add(player);
  136. }
  137. break;
  138. case 9:
  139. if (playersOnBattle.isEmpty()) {
  140. voragoFace.setBattleInGoing(false);
  141. stop();
  142. break;
  143. }
  144. vorago = new Vorago(17182, getVoragoSpawnLocation(1), -1, true, instance);
  145. vorago.setNextAnimation(new Animation(20367));
  146. break;
  147. case 10:
  148. stop();
  149. break;
  150. }
  151. count++;
  152. }
  153. }, 0, 1);
  154. }
  155.  
  156. public WorldTile randomSpawnTile(Entity target, WorldTile checkTile, int randomizeSize) {
  157. WorldTile teleTile = null;
  158. // attemps to randomize tile by 4x4 area
  159. int size = target == null ? 1 : target.getSize();
  160. for (int trycount = 0; trycount < 10; trycount++) {
  161. teleTile = new WorldTile(checkTile, randomizeSize);
  162. if (!ignoreTile(teleTile) || World.isTileFree(checkTile.getPlane(), teleTile.getX(), teleTile.getY(), size))
  163. break;
  164. teleTile = checkTile;
  165. }
  166. return teleTile;
  167. }
  168.  
  169. public boolean ignoreTile(WorldTile tile) {
  170. if (vorago != null) {
  171. int phase = vorago.getPhase();
  172. WorldTile voragoL = getVoragoSpawnLocation(phase);
  173. WorldTile center = new WorldTile(voragoL.getX() + 2, voragoL.getY() + 2, voragoL.getPlane());
  174. boolean insidePhaseArea = phase != 5 ? (tile.getX() >= (center.getX() - 12)
  175. && tile.getX() <= (center.getX() + 11) && tile.getY() >= (center.getY() - 12) && tile.getY() <= (center
  176. .getY() + 11)) : ((tile.getX() >= (center.getX() - 13) && tile.getX() <= (center.getX() + 10)
  177. && tile.getY() >= (center.getY() - 2) && tile.getY() <= (center.getY() + 2)));
  178. return !insidePhaseArea;
  179. }
  180. return false;
  181. }
  182.  
  183. public WorldTile getSimilarCoords(WorldTile entity, int nextphase) {
  184. switch (nextphase) {
  185. case 2:
  186. return new WorldTile(entity.getX() - 64, entity.getY() - 64, 0);
  187. case 3:
  188. return new WorldTile(entity.getX() + 64, entity.getY(), 0);
  189. case 4:
  190. return new WorldTile(entity.getX() - 64, entity.getY() - 64, 0);
  191. }
  192. WorldTile checkTile = new WorldTile(3095, 5985, 0);
  193. WorldTile teleTile = null;
  194. for (int trycount = 0; trycount < 10; trycount++) {
  195. teleTile = new WorldTile(checkTile, 2);
  196. if (World.isTileFree(checkTile.getPlane(), teleTile.getX(), teleTile.getY(), 1))
  197. break;
  198. teleTile = checkTile;
  199. }
  200. return getTile(teleTile);
  201. }
  202.  
  203. public WorldTile getVoragoSpawnLocation(int phase) {
  204. switch (phase) {
  205. case 1:
  206. return getTile(new WorldTile(3102, 6110, 0));
  207. case 2:
  208. return getTile(new WorldTile(3038, 6046, 0));
  209. case 3:
  210. return getTile(new WorldTile(3102, 6046, 0));
  211. case 4:
  212. return getTile(new WorldTile(3038, 5982, 0));
  213. case 5:
  214. default:
  215. return getTile(new WorldTile(3102, 5982, 0));
  216. }
  217. }
  218.  
  219. @Override
  220. public int[] getMapSize() {
  221. return new int[] { 2, 3 };
  222. }
  223.  
  224. @Override
  225. public int[] getMapPos() {
  226. return new int[] { 376, 744 };
  227. }
  228.  
  229. @Override
  230. public void loadMapInstance() {
  231. voragoFace = new VoragoFace(17162, getTile(new WorldTile(3038, 6128, 0)), -1, false, this);
  232. jumpGap = new WorldObject(84825, 10, 0, getTile(new WorldTile(3099, 6123, 0)));
  233. World.spawnObject(jumpGap);
  234. }
  235.  
  236. public Vorago getVorago() {
  237. return vorago;
  238. }
  239.  
  240. public VoragoFace getVoragoFace() {
  241. return voragoFace;
  242. }
  243.  
  244. public List<Player> getAcceptedChallenge() {
  245. return acceptedChallenge;
  246. }
  247.  
  248. public List<Player> getPlayersOnBattle() {
  249. return playersOnBattle;
  250. }
  251.  
  252. public boolean ChallengeStarted() {
  253. return acceptedChallenge.size() != 0;
  254. }
  255.  
  256. public boolean isInChallengeArea(Player player) {
  257. return (player.getX() >= (voragoFace.getX() - 19) && player.getX() <= (voragoFace.getX() + 19)
  258. && player.getY() >= (voragoFace.getY() - 14) && player.getY() <= (voragoFace.getY() + 9));
  259. }
  260.  
  261. /*
  262. * public boolean isInBoreHoleArea(Player player) { return (player.getX() >=
  263. * 3012 && player.getX() <= 3062 && player.getY() >= 6087 && player.getY()
  264. * <= 6133); }
  265. */
  266.  
  267. public void removePlayer(Player player, int type) {
  268. if (acceptedChallenge.contains(player))
  269. acceptedChallenge.remove(player);
  270. if (type != BossInstance.LOGGED_OUT)
  271. this.startAttack = false;
  272. if (isPublic()) {
  273. if (type == BossInstance.LOGGED_OUT) {
  274. getPlayers().remove(player);
  275. } else if (type != BossInstance.DIED)
  276. leaveInstance(player, type);
  277. } else {
  278. player.getControlerManager().removeControlerWithoutCheck();
  279. if (type != BossInstance.DIED)
  280. leaveInstance(player, type);
  281. }
  282. }
  283.  
  284. public void removePlayerFromBattle(Player player, int type) {
  285. playersOnBattle.remove(player);
  286. if (isPublic()) {
  287. if (type == BossInstance.LOGGED_OUT) {
  288. player.setLocation(randomSpawnTile(player, getTile(new WorldTile(3047, 6121, 0)), 2));
  289. } else if (type != BossInstance.DIED) {
  290. player.setNextWorldTile(randomSpawnTile(player, getTile(new WorldTile(3047, 6121, 0)), 2));
  291. }
  292. } else {
  293. if (type == BossInstance.LOGGED_OUT) {
  294. player.getControlerManager().removeControlerWithoutCheck();
  295. leaveInstance(player, type);
  296. } else if (type != BossInstance.DIED) {
  297. player.setNextWorldTile(randomSpawnTile(player, getTile(new WorldTile(3047, 6121, 0)), 2));
  298. }
  299. }
  300. if (playersOnBattle.isEmpty()) {
  301. if (vorago != null) {
  302. vorago.setFinished(true);
  303. vorago = null;
  304. }
  305. if (exitSphere != null) {
  306. World.removeObject(exitSphere);
  307. exitSphere = null;
  308. }
  309. voragoFace.setBattleInGoing(false);
  310. }
  311. }
  312.  
  313. public void finishPhase(Player player) {
  314. vorago.setPhaseProgress(vorago.getPhase() == 1 ? 1 : vorago.getPhase() == 2 ? 5 : vorago.getPhase() == 4 ? 3
  315. : 0);
  316. vorago.sendDeath(player);
  317. }
  318.  
  319. public boolean playerIsOnBattle(Player player) {
  320. if (voragoFace == null || playersOnBattle == null)
  321. return false;
  322. return voragoFace.isBattleInGoing() && playersOnBattle.contains(player);
  323. }
  324.  
  325. @Override
  326. public void finish() {
  327. if (!isPublic()) {
  328. World.removeNPC(voragoFace);
  329. World.removeObject(jumpGap);
  330. }
  331. super.finish();
  332. }
  333.  
  334. public static void sendMessage(Player player, int border, String message) {
  335. player.getPackets().sendEntityMessage(border, 15263739, player, message, true);
  336. }
  337.  
  338. public static void sendMessage(Player player, int border, String message, boolean sendGameMessage) {
  339. player.getPackets().sendEntityMessage(border, 15263739, player, message, sendGameMessage);
  340. }
  341.  
  342. public void spawnExitSphere() {
  343. Projectile projectile = World.sendProjectileNew(getTile(new WorldTile(3112, 5984, 0)), getTile(new WorldTile(
  344. 3105, 5985, 0)), 4029, 0, 30, 10, 0.2, 30, 1);
  345. int cycleTime = Utils.projectileTimeToCycles(projectile.getEndTime()) - 1;
  346. exitSphere = new WorldObject(84960, 10, 0, getTile(new WorldTile(3105, 5985, 0)));
  347. WorldTasksManager.schedule(new WorldTask() {
  348. @Override
  349. public void run() {
  350. World.spawnObject(exitSphere);
  351. }
  352. }, cycleTime);
  353. }
  354.  
  355. public void handleExitSphereClick(Player player) {
  356. player.lock();
  357. Projectile projectile = World.sendProjectileNew(getTile(new WorldTile(3105, 5985, 0)), player, 4029, 0, 20, 10,
  358. 0.5, 30, 1);
  359. int cycleTime = Utils.projectileTimeToCycles(projectile.getEndTime()) - 1;
  360. WorldTasksManager.schedule(new WorldTask() {
  361. @Override
  362. public void run() {
  363. removePlayerFromBattle(player, BossInstance.EXITED);
  364. player.unlock();
  365. }
  366. }, cycleTime);
  367. }
  368. }
Advertisement
Add Comment
Please, Sign In to add comment