armark1ng

Untitled

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