Guest User

Untitled

a guest
Jul 20th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.86 KB | None | 0 0
  1. import java.awt.Color;
  2. import java.awt.Graphics;
  3. import java.awt.Point;
  4. import java.util.Map;
  5.  
  6. import org.rsbot.event.listeners.PaintListener;
  7. import org.rsbot.script.Calculations;
  8. import org.rsbot.script.Constants;
  9. import org.rsbot.script.GEItemInfo;
  10. import org.rsbot.script.Script;
  11. import org.rsbot.script.ScriptManifest;
  12. import org.rsbot.script.wrappers.RSInterface;
  13. import org.rsbot.script.wrappers.RSInterfaceChild;
  14. import org.rsbot.script.wrappers.RSTile;
  15.  
  16. @ScriptManifest(authors = { "Jacmob" }, category = "Crafting", name = "AutoSpinner", version = 1.2, description = "<html><head><style type=\"text/css\">body { font-family: Arial; padding: 10px; }</style></head><body><strong>AutoSpinner V1.2 | Jacmob</strong><br /><br />Start the script in Lumbridge Castle with flax visible at the top of your bank.</body></html>")
  17. public class AutoSpinner extends Script implements PaintListener {
  18.  
  19. private enum State {
  20. WALKTOBANK, WALKTOSPIN, OPENBANK, OPENSPIN, CLIMBUP, BANK, SPIN
  21. }
  22.  
  23. public final int EMOTE_ID = 1563;
  24. public final int FLAX_ID = 1779;
  25. public final int BOW_STRING_ID = 1777;
  26. public final int[] BANK_AREA = { 3207, 3210, 3217, 3220 };
  27. public final RSTile BANK_TILE = new RSTile(3208, 3221);
  28. public final RSTile SPINNER_TILE = new RSTile(3209, 3212);
  29. public final RSTile BANK_WALK_TILE = new RSTile(3208, 3219);
  30. public final RSTile STAIRCASE_TILE = new RSTile(3205, 3208);
  31. public final RSTile STAIRCASE_GROUND_TILE = new RSTile(3204, 3208);
  32. public final RSTile STAIRCASE_GROUND_WALK_TILE = new RSTile(3207, 3210);
  33. public final RSInterfaceChild SPIN_INTERFACE = RSInterface
  34. .getChildInterface(459, 16);
  35.  
  36. private int scriptStartXP = 0;
  37. private int nextMinRunEnergy = random(20, 50);
  38. private int flaxSpun = 0;
  39. private int flaxPrice = 0;
  40. private int stringPrice = 0;
  41. private int stringsPreviouslyHeld = 0;
  42. private long scriptStartTime = 0;
  43.  
  44. private void antiBan(final int upperBound) {
  45. final int rand = random(0, upperBound);
  46. if (rand == 69) {
  47. if (getCurrentTab() == Constants.TAB_STATS) {
  48. openTab(Constants.TAB_INVENTORY);
  49. wait(random(50, 1000));
  50. }
  51. final Point screenLoc = Calculations.tileToScreen(getMyPlayer()
  52. .getLocation());
  53. moveMouse(screenLoc, 3, 3, 5);
  54. wait(random(50, 300));
  55. clickMouse(false);
  56. wait(random(500, 2500));
  57. while (isMenuOpen()) {
  58. moveMouseRandomly(700);
  59. wait(random(100, 500));
  60. }
  61. } else if (rand == 68) {
  62. if (getCurrentTab() != Constants.TAB_STATS) {
  63. openTab(Constants.TAB_STATS);
  64. wait(random(200, 400));
  65. if (random(0, 2) == 1) {
  66. moveMouse(random(575, 695), random(240, 435), 10);
  67. }
  68. moveMouse(632, 372, 7, 7);
  69. wait(random(800, 1400));
  70. } else if (getCurrentTab() == Constants.TAB_STATS) {
  71. openTab(Constants.TAB_INVENTORY);
  72. wait(random(800, 1200));
  73. }
  74. } else if (rand == 67) {
  75. final int rand2 = random(1, 3);
  76. for (int i = 0; i < rand2; i++) {
  77. moveMouse(random(100, 700), random(100, 500));
  78. wait(random(200, 700));
  79. }
  80. moveMouse(random(0, 800), 647, 50, 100);
  81. wait(random(100, 1500));
  82. moveMouse(random(75, 400), random(75, 400), 30);
  83. } else if (rand == 0) {
  84. rotateCamera();
  85. } else if (rand < 4) {
  86. waveMouse();
  87. }
  88. }
  89.  
  90. private void closeBank() {
  91. clickMouse(480, 35, 3, 3, true, 20);
  92. }
  93.  
  94. private String getFormattedTime(final long timeMillis) {
  95. long millis = timeMillis;
  96. final long seconds2 = millis / 1000;
  97. final long hours = millis / (1000 * 60 * 60);
  98. millis -= hours * 1000 * 60 * 60;
  99. final long minutes = millis / (1000 * 60);
  100. millis -= minutes * 1000 * 60;
  101. final long seconds = millis / 1000;
  102. String hoursString = "";
  103. String minutesString = "";
  104. String secondsString = seconds + "";
  105. String type = "seconds";
  106.  
  107. if (minutes > 0) {
  108. minutesString = minutes + ":";
  109. type = "minutes";
  110. } else if (hours > 0 && seconds2 > 0) {
  111. minutesString = "0:";
  112. }
  113. if (hours > 0) {
  114. hoursString = hours + ":";
  115. type = "hours";
  116. }
  117. if (minutes < 10 && type != "seconds") {
  118. minutesString = "0" + minutesString;
  119. }
  120. if (hours < 10 && type == "hours") {
  121. hoursString = "0" + hoursString;
  122. }
  123. if (seconds < 10 && type != "seconds") {
  124. secondsString = "0" + secondsString;
  125. }
  126.  
  127. return hoursString + minutesString + secondsString + " " + type;
  128. }
  129.  
  130. private State getState() {
  131. if (getPlane() == 0) {
  132. return State.CLIMBUP;
  133. } else if (inventoryContains(FLAX_ID)) {
  134. if (getPlane() == 2) {
  135. return State.WALKTOSPIN;
  136. } else if (SPIN_INTERFACE.isValid()) {
  137. return State.SPIN;
  138. } else {
  139. return State.OPENSPIN;
  140. }
  141. } else {
  142. if (getPlane() == 1) {
  143. return State.WALKTOBANK;
  144. } else if (bank.isOpen()) {
  145. return State.BANK;
  146. } else {
  147. return State.OPENBANK;
  148. }
  149. }
  150. }
  151.  
  152. @Override
  153. public int loop() {
  154. final State state = getState();
  155. int tries = 0;
  156. antiBan(65);
  157. switch (state) {
  158. case WALKTOSPIN:
  159. if (getEnergy() > nextMinRunEnergy) {
  160. setRun(true);
  161. nextMinRunEnergy = random(20, 50);
  162. }
  163. if (tileOnScreen(STAIRCASE_TILE)) {
  164. if (bank.isOpen()) {
  165. closeBank();
  166. }
  167. if (!atTile(STAIRCASE_TILE, "Climb-down")
  168. && !getMyPlayer().isMoving()) {
  169. rotateCamera();
  170. }
  171. while (getPlane() != 1 && tries < 10) {
  172. tries++;
  173. wait(random(100, 200));
  174. }
  175. } else {
  176. walkTileSmart(STAIRCASE_TILE);
  177. while (distanceTo(STAIRCASE_TILE) > 4 && tries < 10) {
  178. tries++;
  179. wait(random(400, 500));
  180. }
  181. }
  182. break;
  183. case WALKTOBANK:
  184. if (SPIN_INTERFACE.isValid()) {
  185. clickMouse(random(480, 485), random(42, 48), true);
  186. }
  187. if (tileOnScreen(STAIRCASE_TILE)) {
  188. if (!atTile(STAIRCASE_TILE, "Climb-up")
  189. && !getMyPlayer().isMoving()) {
  190. rotateCamera();
  191. break;
  192. } else {
  193. if (random(0, 5) != 1) {
  194. moveMouse(random(608, 640), random(50, 90), 5);
  195. if (random(0, 5) != 1) {
  196. moveMouseAway(5);
  197. }
  198. }
  199. }
  200. while (getPlane() != 2 && tries < 15) {
  201. tries++;
  202. wait(random(200, 400));
  203. }
  204. } else {
  205. walkTileSmart(STAIRCASE_TILE);
  206. while (distanceTo(STAIRCASE_TILE) > 4 && tries < 10) {
  207. tries++;
  208. wait(random(400, 500));
  209. }
  210. }
  211. break;
  212. case OPENBANK:
  213. if (playerIsInArea(BANK_AREA)) {
  214. atTile(BANK_TILE, "Use-quickly");
  215. while (!bank.isOpen() && tries < 5) {
  216. tries++;
  217. wait(random(400, 600));
  218. }
  219. } else {
  220. walkTileSmart(BANK_WALK_TILE);
  221. wait(random(200, 700));
  222. moveMouse(getMouseSpeed() + random(-1, 2), 200, 200, 80, 80, 10);
  223. while (!playerIsInArea(BANK_AREA) && tries < 10) {
  224. tries++;
  225. wait(random(400, 600));
  226. }
  227. }
  228. break;
  229. case OPENSPIN:
  230. if (tileOnScreen(SPINNER_TILE)) {
  231. if (atTile(SPINNER_TILE, "Spin")) {
  232. moveMouseAway(50);
  233. } else {
  234. break;
  235. }
  236. while (!SPIN_INTERFACE.isValid() && tries < 10) {
  237. if (getMyPlayer().isMoving()) {
  238. tries = 2;
  239. }
  240. tries++;
  241. wait(random(400, 600));
  242. antiBan(65);
  243. }
  244. } else {
  245. turnToTile(SPINNER_TILE, 20);
  246. }
  247. break;
  248. case SPIN:
  249. stringsPreviouslyHeld = getInventoryCount(BOW_STRING_ID);
  250. if (atInterface(SPIN_INTERFACE, "Make All")) {
  251. if (random(0, 2) == 1) {
  252. moveMouseAway(50);
  253. }
  254. } else {
  255. break;
  256. }
  257. while (tries < 15 && inventoryContains(FLAX_ID)) {
  258. if (getMyPlayer().getAnimation() == EMOTE_ID) {
  259. tries = 0;
  260. } else {
  261. tries++;
  262. }
  263. wait(random(300, 500));
  264. antiBan(80);
  265. flaxSpun += getInventoryCount(BOW_STRING_ID)
  266. - stringsPreviouslyHeld;
  267. stringsPreviouslyHeld = getInventoryCount(BOW_STRING_ID);
  268. }
  269. break;
  270. case BANK:
  271. while (getInventoryCount() > 0) {
  272. bank.depositAll();
  273. wait(random(290, 520));
  274. }
  275. while (getInventoryCount(FLAX_ID) == 0) {
  276. bank.atItem(FLAX_ID, "Withdraw-All");
  277. wait(random(800, 1200));
  278. if (getInventoryCount(FLAX_ID) == 0
  279. && bank.getItemByID(FLAX_ID) == null) {
  280. while (bank.isOpen()) {
  281. closeBank();
  282. wait(random(200, 500));
  283. }
  284. log.info("No Flax Found");
  285. stopScript();
  286. break;
  287. }
  288. }
  289. wait(random(150, 400));
  290. if (random(0, 3) == 0) {
  291. closeBank();
  292. }
  293. case CLIMBUP:
  294. if (tileOnScreen(STAIRCASE_TILE)) {
  295. if (!atTile(STAIRCASE_GROUND_TILE, "Climb-up")
  296. && !getMyPlayer().isMoving()) {
  297. rotateCamera();
  298. }
  299. wait(random(400, 600));
  300. } else {
  301. walkTo(getClosestTileOnMap(STAIRCASE_GROUND_WALK_TILE), 1,
  302. 1);
  303. wait(random(1000, 2000));
  304. }
  305. break;
  306. default:
  307. break;
  308. }
  309. return random(400, 800);
  310. }
  311.  
  312. private void moveMouseAway(final int moveDist) {
  313. final Point pos = getMouseLocation();
  314. moveMouse(pos.x - moveDist, pos.y - moveDist, moveDist * 2,
  315. moveDist * 2);
  316. }
  317.  
  318. @Override
  319. public void onFinish() {
  320. log
  321. .info(flaxSpun
  322. + " flax spun in "
  323. + getFormattedTime(System.currentTimeMillis()
  324. - scriptStartTime) + ".");
  325. return;
  326. }
  327.  
  328. public void onRepaint(final Graphics g) {
  329. if (isLoggedIn()
  330. && skills.getCurrentSkillLevel(Constants.STAT_CRAFTING) > 1) {
  331. if (scriptStartTime == 0) {
  332. scriptStartTime = System.currentTimeMillis();
  333. scriptStartXP = skills
  334. .getCurrentSkillExp(Constants.STAT_CRAFTING);
  335. }
  336.  
  337. final Color BG = new Color(50, 50, 50, 150);
  338. final Color TEXT = new Color(200, 255, 0, 255);
  339.  
  340. final int x = 13;
  341. int y = 26;
  342.  
  343. final int levelsGained = skills
  344. .getRealSkillLevel(Constants.STAT_CRAFTING)
  345. - skills.getLvlByExp(scriptStartXP);
  346. final long runSeconds = (System.currentTimeMillis() - scriptStartTime) / 1000;
  347.  
  348. g.setColor(BG);
  349. g.fill3DRect(x - 6, y, 211, 26, true);
  350.  
  351. g.setColor(TEXT);
  352. g.drawString("AutoSpinner v1.2", x, y += 17);
  353.  
  354. y += 20;
  355. g.setColor(BG);
  356. g.fill3DRect(x - 6, y, 211, 86, true);
  357.  
  358. y -= 3;
  359. g.setColor(TEXT);
  360. g.drawString("Runtime: "
  361. + getFormattedTime(System.currentTimeMillis()
  362. - scriptStartTime), x, y += 20);
  363. g.drawString("Spun: " + flaxSpun + " Flax", x, y += 20);
  364.  
  365. if (levelsGained < 0) {
  366. scriptStartXP = skills
  367. .getCurrentSkillExp(Constants.STAT_CRAFTING);
  368. } else if (levelsGained == 1) {
  369. g
  370. .drawString(
  371. "Gained: "
  372. + (skills
  373. .getCurrentSkillExp(Constants.STAT_CRAFTING) - scriptStartXP)
  374. + " XP (" + levelsGained + " lvl)", x,
  375. y += 20);
  376. } else {
  377. g
  378. .drawString(
  379. "Gained: "
  380. + (skills
  381. .getCurrentSkillExp(Constants.STAT_CRAFTING) - scriptStartXP)
  382. + " XP (" + levelsGained + " lvls)", x,
  383. y += 20);
  384. }
  385.  
  386. if (runSeconds > 10 && flaxSpun > 0) {
  387. g
  388. .drawString(
  389. "Averaging: "
  390. + (skills
  391. .getCurrentSkillExp(Constants.STAT_CRAFTING) - scriptStartXP)
  392. * 3600 / runSeconds + " XP/hr", x,
  393. y += 20);
  394. if (flaxPrice != 0 && stringPrice != 0) {
  395. y += 20;
  396. g.setColor(BG);
  397. g.fill3DRect(x - 6, y, 211, 66, true);
  398. y -= 3;
  399. g.setColor(TEXT);
  400. final int profit = flaxSpun * (stringPrice - flaxPrice);
  401. g.drawString("Gained: " + profit + " GP", x, y += 20);
  402. g.drawString("Averaging: " + flaxSpun * 3600 / runSeconds
  403. + " spins/hr", x, y += 20);
  404. g.drawString("Averaging: " + profit * 3600 / runSeconds
  405. + " GP/hr", x, y += 20);
  406. }
  407. } else {
  408. g.drawString("Gathering Data...", x, y += 20);
  409. }
  410. }
  411. }
  412.  
  413. @Override
  414. public boolean onStart(final Map<String, String> args) {
  415. final GEItemInfo stringGE = grandExchange.loadItemInfo(BOW_STRING_ID);
  416. stringPrice = stringGE.getMarketPrice();
  417. log
  418. .info("Each bow string will be valued at the current GE market price of "
  419. + stringPrice + " coins.");
  420. final GEItemInfo flaxGE = grandExchange.loadItemInfo(FLAX_ID);
  421. flaxPrice = flaxGE.getMarketPrice();
  422. log
  423. .info("Each piece of flax will be valued at the current GE market price of "
  424. + flaxPrice + " coins.");
  425. if (flaxPrice == 0 || stringPrice == 0) {
  426. log
  427. .info("Grand Exchange prices could not be loaded - some features of the paint will be disabled.");
  428. }
  429. return true;
  430. }
  431.  
  432. private boolean playerIsInArea(final int[] bounds) {
  433. final RSTile pos = getMyPlayer().getLocation();
  434. return pos.getX() >= bounds[0] && pos.getX() <= bounds[1]
  435. && pos.getY() >= bounds[2] && pos.getY() <= bounds[3];
  436. }
  437.  
  438. private void rotateCamera() {
  439. int angle = getCameraAngle() + random(-40, 40);
  440. if (angle < 0) {
  441. angle += 359;
  442. }
  443. if (angle > 359) {
  444. angle -= 359;
  445. }
  446.  
  447. setCameraRotation(angle);
  448. }
  449.  
  450. private boolean walkTileSmart(final RSTile t) {
  451. if (tileOnScreen(t)) {
  452. return atTile(t, "Walk");
  453. }
  454. return walkTo(t);
  455. }
  456.  
  457. private void waveMouse() {
  458. final Point curPos = getMouseLocation();
  459. moveMouse(random(0, 750), random(0, 500), 20);
  460. wait(random(200, 600));
  461. moveMouse(curPos, 20, 20);
  462. }
  463. }
Add Comment
Please, Sign In to add comment