armark1ng

Untitled

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