Advertisement
Guest User

Untitled

a guest
May 4th, 2016
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.74 KB | None | 0 0
  1. package com.rs.game.npc.pet;
  2.  
  3. import com.rs.game.World;
  4. import com.rs.game.WorldTile;
  5. import com.rs.game.npc.NPC;
  6. import com.rs.game.npc.familiar.Familiar;
  7. import com.rs.game.player.Player;
  8. import com.rs.game.player.content.pet.PetDetails;
  9. import com.rs.game.player.content.pet.Pets;
  10. import com.rs.utils.Utils;
  11.  
  12. /**
  13. * Represents a pet.
  14. *
  15. * @author Emperor
  16. *
  17. */
  18. public final class Pet extends NPC {
  19.  
  20. /**
  21. * The serial UID.
  22. */
  23. private static final long serialVersionUID = -2848843157767889742L;
  24.  
  25. /**
  26. * The owner.
  27. */
  28. private final Player owner;
  29.  
  30. /**
  31. * The "near" directions.
  32. */
  33. private final int[][] checkNearDirs;
  34.  
  35. /**
  36. * The item id.
  37. */
  38. private final int itemId;
  39.  
  40. /**
  41. * The pet details.
  42. */
  43. private final PetDetails details;
  44.  
  45. /**
  46. * The growth rate of the pet.
  47. */
  48. private double growthRate;
  49.  
  50. /**
  51. * The pets type.
  52. */
  53. private final Pets pet;
  54.  
  55. /**
  56. * Constructs a new {@code Pet} {@code Object}.
  57. *
  58. * @param id
  59. * The NPC id.
  60. * @param itemId
  61. * The item id.
  62. * @param owner
  63. * The owner.
  64. * @param tile
  65. * The world tile.
  66. */
  67. public Pet(int id, int itemId, Player owner, WorldTile tile,
  68. PetDetails details) {
  69. super(id, tile, -1, false);
  70. this.owner = owner;
  71. this.itemId = itemId;
  72. this.checkNearDirs = Utils.getCoordOffsetsNear(super.getSize());
  73. this.details = details;
  74. this.pet = Pets.forId(itemId);
  75. if (pet == Pets.TROLL_BABY
  76. && owner.getPetManager().getTrollBabyName() != null) {
  77. setName(owner.getPetManager().getTrollBabyName());
  78. }
  79. sendMainConfigurations();
  80. sendFollowerDetails();
  81. }
  82.  
  83. @Override
  84. public void processNPC() {
  85. unlockOrb();
  86. if (pet == Pets.TROLL_BABY || pet.getFood().length > 0) {
  87. details.updateHunger(0.025);
  88. owner.getPackets()
  89. .sendConfigByFile(4286, (int) details.getHunger());
  90. }
  91. if (details.getHunger() >= 90.0 && details.getHunger() < 90.025) {
  92. owner.getPackets()
  93. .sendGameMessage(
  94. "<col=ff0000>Your pet is starving, feed it before it runs off.</col>");
  95. } else if (details.getHunger() == 100.0) {
  96. owner.getPetManager().setNpcId(-1);
  97. owner.getPetManager().setItemId(-1);
  98. owner.setPet(null);
  99. owner.getPetManager().removeDetails(itemId);
  100. owner.getPackets().sendGameMessage(
  101. "Your pet has ran away to find some food!");
  102. switchOrb(false);
  103. owner.getPackets()
  104. .closeInterface(
  105. owner.getInterfaceManager().hasRezizableScreen() ? 98
  106. : 212);
  107. owner.getPackets().sendIComponentSettings(747, 17, 0, 0, 0);
  108. finish();
  109. return;
  110. }
  111. if (growthRate > 0.000) {
  112. details.updateGrowth(growthRate);
  113. owner.getPackets()
  114. .sendConfigByFile(4285, (int) details.getGrowth());
  115. if (details.getGrowth() == 100.0) {
  116. growNextStage();
  117. }
  118. }
  119. if (!withinDistance(owner, 12)) {
  120. call();
  121. return;
  122. }
  123. sendFollow();
  124. }
  125.  
  126. /**
  127. * Grows into the next stage of this pet (if any).
  128. */
  129. public void growNextStage() {
  130. if (details.getStage() == 3) {
  131. return;
  132. }
  133. if (pet == null) {
  134. return;
  135. }
  136. int npcId = pet.getNpcId(details.getStage() + 1);
  137. if (npcId < 1) {
  138. return;
  139. }
  140. details.setStage(details.getStage() + 1);
  141. int itemId = pet.getItemId(details.getStage());
  142. if (pet.getNpcId(details.getStage() + 1) > 0) {
  143. details.updateGrowth(-100.0);
  144. }
  145. owner.getPetManager().setItemId(itemId);
  146. owner.getPetManager().setNpcId(npcId);
  147. finish();
  148. Pet newPet = new Pet(npcId, itemId, owner, owner, details);
  149. newPet.growthRate = growthRate;
  150. owner.setPet(newPet);
  151. owner.getPackets().sendGameMessage(
  152. "<col=ff0000>Your pet has grown larger.</col>");
  153. }
  154.  
  155. /**
  156. * Picks up the pet.
  157. */
  158. public void pickup() {
  159. owner.getInventory().addItem(itemId, 1);
  160. owner.setPet(null);
  161. owner.getPetManager().setNpcId(-1);
  162. owner.getPetManager().setItemId(-1);
  163. switchOrb(false);
  164. owner.getPackets().closeInterface(
  165. owner.getInterfaceManager().hasRezizableScreen() ? 98 : 212);
  166. owner.getPackets().sendIComponentSettings(747, 17, 0, 0, 0);
  167. finish();
  168. }
  169.  
  170. /**
  171. * Calls the pet.
  172. */
  173. public void call() {
  174. int size = getSize();
  175. WorldTile teleTile = null;
  176. for (int dir = 0; dir < checkNearDirs[0].length; dir++) {
  177. final WorldTile tile = new WorldTile(new WorldTile(owner.getX()
  178. + checkNearDirs[0][dir], owner.getY()
  179. + checkNearDirs[1][dir], owner.getPlane()));
  180. if (World.canMoveNPC(tile.getPlane(), tile.getX(), tile.getY(),
  181. size)) {
  182. teleTile = tile;
  183. break;
  184. }
  185. }
  186. if (teleTile == null) {
  187. return;
  188. }
  189. setNextWorldTile(teleTile);
  190. }
  191.  
  192. /**
  193. * Follows the owner.
  194. */
  195. protected void sendFollow() {
  196. if (getLastFaceEntity() != owner.getClientIndex()) {
  197. setNextFaceEntity(owner);
  198. }
  199. if (getFreezeDelay() >= Utils.currentTimeMillis()) {
  200. return;
  201. }
  202. int size = getSize();
  203. int distanceX = owner.getX() - getX();
  204. int distanceY = owner.getY() - getY();
  205. if (distanceX < size && distanceX > -1 && distanceY < size
  206. && distanceY > -1 && !owner.hasWalkSteps() && !hasWalkSteps()) {
  207. resetWalkSteps();
  208. if (!addWalkSteps(owner.getX() + 1, getY())) {
  209. resetWalkSteps();
  210. if (!addWalkSteps(owner.getX() - size, getY())) {
  211. resetWalkSteps();
  212. if (!addWalkSteps(getX(), owner.getY() + 1)) {
  213. resetWalkSteps();
  214. addWalkSteps(getX(), owner.getY() - size);
  215. }
  216. }
  217. }
  218. return;
  219. }
  220. if ((!clipedProjectile(owner, true)) || distanceX > size
  221. || distanceX < -1 || distanceY > size || distanceY < -1) {
  222. resetWalkSteps();
  223. addWalkStepsInteract(owner.getX(), owner.getY(), getRun() ? 2 : 1,
  224. size, true);
  225. return;
  226. }
  227. resetWalkSteps();
  228. }
  229.  
  230. /**
  231. * Sends the main configurations for the Pet interface (+ summoning orb).
  232. */
  233. public void sendMainConfigurations() {
  234. switchOrb(true);
  235. owner.getPackets().sendConfig(448, itemId);// configures
  236. owner.getPackets().sendConfig(1160, 243269632); // sets npc emote
  237. owner.getPackets().sendGlobalConfig(1436, 0);
  238. unlockOrb(); // temporary
  239. }
  240.  
  241. /**
  242. * Sends the follower details.
  243. */
  244. public void sendFollowerDetails() {
  245. owner.getPackets().sendConfigByFile(4285, (int) details.getGrowth());
  246. owner.getPackets().sendConfigByFile(4286, (int) details.getHunger());
  247. boolean res = owner.getInterfaceManager().hasRezizableScreen();
  248. owner.getPackets().sendInterface(true, res ? 746 : 548,
  249. res ? 119 : 179, 662);
  250. unlock();
  251. owner.getPackets().sendGlobalConfig(168, 8);// tab id
  252. }
  253.  
  254. /**
  255. * Switch the Summoning orb state.
  256. *
  257. * @param enable
  258. * If the orb should be enabled.
  259. */
  260. public void switchOrb(boolean enable) {
  261. owner.getPackets().sendConfig(1174, enable ? getId() : 0);
  262. if (enable) {
  263. unlock();
  264. return;
  265. }
  266. lockOrb();
  267. }
  268.  
  269. /**
  270. * Unlocks the orb.
  271. */
  272. public void unlockOrb() {
  273. owner.getPackets().sendHideIComponent(747, 9, false);
  274. Familiar.sendLeftClickOption(owner);
  275. }
  276.  
  277. /**
  278. * Unlocks the interfaces.
  279. */
  280. public void unlock() {
  281. owner.getPackets().sendHideIComponent(747, 9, false);
  282. }
  283.  
  284. /**
  285. * Locks the orb.
  286. */
  287. public void lockOrb() {
  288. owner.getPackets().sendHideIComponent(747, 9, true);
  289. }
  290.  
  291. /**
  292. * Gets the details.
  293. *
  294. * @return The details.
  295. */
  296. public PetDetails getDetails() {
  297. return details;
  298. }
  299.  
  300. /**
  301. * Gets the growthRate.
  302. *
  303. * @return The growthRate.
  304. */
  305. public double getGrowthRate() {
  306. return growthRate;
  307. }
  308.  
  309. /**
  310. * Sets the growthRate.
  311. *
  312. * @param growthRate
  313. * The growthRate to set.
  314. */
  315. public void setGrowthRate(double growthRate) {
  316. this.growthRate = growthRate;
  317. }
  318.  
  319. /**
  320. * Gets the item id of the pet.
  321. *
  322. * @return The item id.
  323. */
  324. public int getItemId() {
  325. return itemId;
  326. }
  327.  
  328. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement