Advertisement
Guest User

Zulrah helper

a guest
May 3rd, 2018
500
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.79 KB | None | 0 0
  1. /*
  2. * Copyright (c) 2017, Aria <[email protected]>
  3. * Copyright (c) 2017, Adam <[email protected]>
  4. * Copyright (c) 2017, Devin French <https://github.com/devinfrench>
  5. * All rights reserved.
  6. *
  7. * Redistribution and use in source and binary forms, with or without
  8. * modification, are permitted provided that the following conditions are met:
  9. *
  10. * 1. Redistributions of source code must retain the above copyright notice, this
  11. * list of conditions and the following disclaimer.
  12. * 2. Redistributions in binary form must reproduce the above copyright notice,
  13. * this list of conditions and the following disclaimer in the documentation
  14. * and/or other materials provided with the distribution.
  15. *
  16. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
  17. * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  18. * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  19. * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
  20. * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  21. * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  22. * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  23. * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  24. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  25. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  26. */
  27. package net.runelite.client.plugins.zulrah;
  28.  
  29. import com.google.inject.Binder;
  30. import com.google.inject.Provides;
  31. import java.time.temporal.ChronoUnit;
  32. import java.util.Arrays;
  33. import java.util.Collection;
  34. import javax.annotation.Nullable;
  35. import javax.inject.Inject;
  36. import lombok.extern.slf4j.Slf4j;
  37. import net.runelite.api.Client;
  38. import net.runelite.api.GameState;
  39. import net.runelite.api.NPC;
  40. import net.runelite.api.Query;
  41. import net.runelite.api.queries.NPCQuery;
  42. import net.runelite.client.RuneLite;
  43. import net.runelite.client.config.ConfigManager;
  44. import net.runelite.client.plugins.Plugin;
  45. import net.runelite.client.plugins.PluginDescriptor;
  46. import net.runelite.client.plugins.zulrah.overlays.ZulrahCurrentPhaseOverlay;
  47. import net.runelite.client.plugins.zulrah.overlays.ZulrahNextPhaseOverlay;
  48. import net.runelite.client.plugins.zulrah.overlays.ZulrahOverlay;
  49. import net.runelite.client.plugins.zulrah.overlays.ZulrahPrayerOverlay;
  50. import net.runelite.client.plugins.zulrah.patterns.ZulrahPattern;
  51. import net.runelite.client.plugins.zulrah.patterns.ZulrahPatternA;
  52. import net.runelite.client.plugins.zulrah.patterns.ZulrahPatternB;
  53. import net.runelite.client.plugins.zulrah.patterns.ZulrahPatternC;
  54. import net.runelite.client.plugins.zulrah.patterns.ZulrahPatternD;
  55. import net.runelite.client.plugins.zulrah.phase.ZulrahPhase;
  56. import net.runelite.client.task.Schedule;
  57. import net.runelite.client.ui.overlay.Overlay;
  58.  
  59. @PluginDescriptor(
  60. name = "Zulrah plugin"
  61. )
  62. @Slf4j
  63. public class ZulrahPlugin extends Plugin
  64. {
  65. @Inject
  66. RuneLite runelite;
  67.  
  68. @Inject
  69. @Nullable
  70. Client client;
  71.  
  72. @Inject
  73. ZulrahConfig config;
  74.  
  75. @Inject
  76. ZulrahOverlay overlay;
  77.  
  78. @Inject
  79. ZulrahCurrentPhaseOverlay currentPhaseOverlay;
  80.  
  81. @Inject
  82. ZulrahNextPhaseOverlay nextPhaseOverlay;
  83.  
  84. @Inject
  85. ZulrahPrayerOverlay zulrahPrayerOverlay;
  86.  
  87. private final ZulrahPattern[] patterns = new ZulrahPattern[]
  88. {
  89. new ZulrahPatternA(),
  90. new ZulrahPatternB(),
  91. new ZulrahPatternC(),
  92. new ZulrahPatternD()
  93. };
  94.  
  95. private ZulrahInstance instance;
  96.  
  97. @Override
  98. public void configure(Binder binder)
  99. {
  100. binder.bind(ZulrahOverlay.class);
  101. }
  102.  
  103. @Provides
  104. ZulrahConfig getConfig(ConfigManager configManager)
  105. {
  106. return configManager.getConfig(ZulrahConfig.class);
  107. }
  108.  
  109. @Override
  110. public Collection<Overlay> getOverlays()
  111. {
  112. return Arrays.asList(overlay, currentPhaseOverlay, nextPhaseOverlay, zulrahPrayerOverlay);
  113. }
  114.  
  115. @Schedule(
  116. period = 600,
  117. unit = ChronoUnit.MILLIS
  118. )
  119. public void update()
  120. {
  121. if (!config.enabled() || client == null || client.getGameState() != GameState.LOGGED_IN)
  122. {
  123. return;
  124. }
  125.  
  126. NPC zulrah = findZulrah();
  127. if (zulrah == null)
  128. {
  129. if (instance != null)
  130. {
  131. log.debug("Zulrah encounter has ended.");
  132. instance = null;
  133. }
  134. return;
  135. }
  136.  
  137. if (instance == null)
  138. {
  139. instance = new ZulrahInstance(zulrah);
  140. log.debug("Zulrah encounter has started.");
  141. }
  142.  
  143. ZulrahPhase currentPhase = ZulrahPhase.valueOf(zulrah, instance.getStartLocation());
  144. if (instance.getPhase() == null)
  145. {
  146. instance.setPhase(currentPhase);
  147. }
  148. else if (!instance.getPhase().equals(currentPhase))
  149. {
  150. ZulrahPhase previousPhase = instance.getPhase();
  151. instance.setPhase(currentPhase);
  152. instance.nextStage();
  153.  
  154. log.debug("Zulrah phase has moved from {} -> {}, stage: {}", previousPhase, currentPhase, instance.getStage());
  155. }
  156.  
  157. ZulrahPattern pattern = instance.getPattern();
  158. if (pattern == null)
  159. {
  160. int potential = 0;
  161. ZulrahPattern potentialPattern = null;
  162.  
  163. for (ZulrahPattern p : patterns)
  164. {
  165. if (p.stageMatches(instance.getStage(), instance.getPhase()))
  166. {
  167. potential++;
  168. potentialPattern = p;
  169. }
  170. }
  171.  
  172. if (potential == 1)
  173. {
  174. log.debug("Zulrah pattern identified: {}", potentialPattern);
  175.  
  176. instance.setPattern(potentialPattern);
  177. }
  178. }
  179. else if (pattern.canReset(instance.getStage()) && (instance.getPhase() == null || instance.getPhase().equals(pattern.get(0))))
  180. {
  181. log.debug("Zulrah pattern has reset.");
  182.  
  183. instance.reset();
  184. }
  185. }
  186.  
  187. private NPC findZulrah()
  188. {
  189. Query query = new NPCQuery().nameEquals("Zulrah");
  190. NPC[] result = runelite.runQuery(query);
  191. return result.length == 1 ? result[0] : null;
  192. }
  193.  
  194. public ZulrahInstance getInstance()
  195. {
  196. return instance;
  197. }
  198. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement