SHOW:
|
|
- or go back to the newest paste.
1 | import java.awt.Color; | |
2 | import java.awt.Graphics; | |
3 | import java.awt.Point; | |
4 | import java.awt.Polygon; | |
5 | import java.util.HashSet; | |
6 | import java.util.Set; | |
7 | ||
8 | import org.rsbot.event.events.MessageEvent; | |
9 | import org.rsbot.event.listeners.MessageListener; | |
10 | import org.rsbot.event.listeners.PaintListener; | |
11 | import org.rsbot.script.Script; | |
12 | import org.rsbot.script.ScriptManifest; | |
13 | import org.rsbot.script.methods.Game; | |
14 | import org.rsbot.script.methods.Skills; | |
15 | import org.rsbot.script.util.Filter; | |
16 | import org.rsbot.script.util.Timer; | |
17 | import org.rsbot.script.wrappers.RSArea; | |
18 | import org.rsbot.script.wrappers.RSItem; | |
19 | import org.rsbot.script.wrappers.RSModel; | |
20 | import org.rsbot.script.wrappers.RSNPC; | |
21 | import org.rsbot.script.wrappers.RSObject; | |
22 | import org.rsbot.script.wrappers.RSPath; | |
23 | import org.rsbot.script.wrappers.RSTile; | |
24 | import org.rsbot.script.wrappers.RSTilePath; | |
25 | ||
26 | @ScriptManifest(authors = "Aion, Tak", | |
27 | name = "Tak's Modified Air Crafter", | |
28 | version = 0.1, | |
29 | description = "Modified Aion Air Crafter Supports Pure Essance.") | |
30 | public class TaksAirCrafter extends Script implements PaintListener, MessageListener { | |
31 | ||
32 | public static interface Constants { | |
33 | ||
34 | int ITEM_AIR_RUNE = 556; | |
35 | ||
36 | int ITEM_AIR_TALISMAN = 1438; | |
37 | ||
38 | int ITEM_RUNE_ESS = 1436; | |
39 | ||
40 | int ITEM_PRUNE_ESS = 7936; | |
41 | ||
42 | int OBJECT_ALTAR = 2478; | |
43 | ||
44 | int OBJECT_PORTAL = 2465; | |
45 | ||
46 | int OBJECT_RUINS = 2452; | |
47 | ||
48 | int NPC_BANKER = 5912; | |
49 | ||
50 | double VERSION = TaksAirCrafter.class.getAnnotation(ScriptManifest.class).version(); | |
51 | ||
52 | Filter<RSNPC> FILTER_NPC = new Filter<RSNPC>() { | |
53 | public boolean accept(RSNPC t) { | |
54 | return t != null && t.getID() == Constants.NPC_BANKER; | |
55 | } | |
56 | }; | |
57 | ||
58 | RSTile[] PATH = { | |
59 | new RSTile(3185, 3434), new RSTile(3173, 3428), | |
60 | new RSTile(3159, 3423), new RSTile(3147, 3415), | |
61 | new RSTile(3135, 3407), new RSTile(3129, 3405) | |
62 | }; | |
63 | ||
64 | RSArea AREA_ALTAR = new RSArea(new RSTile(2835, 4823), new RSTile(2851, 4843)); | |
65 | ||
66 | RSArea AREA_BANK = new RSArea(new RSTile(3178, 3431), new RSTile(3195, 3447)); | |
67 | ||
68 | RSArea AREA_RUINS = new RSArea(new RSTile(3122, 3401), new RSTile(3132, 3409)); | |
69 | ||
70 | RSArea AREA_MUSICIAN = new RSArea(new RSTile(3149, 3419), new RSTile(3157, 3424)); | |
71 | } | |
72 | ||
73 | public static abstract class Action { | |
74 | ||
75 | public abstract String getDesc(); | |
76 | ||
77 | public abstract boolean isValid(); | |
78 | ||
79 | public abstract void process(); | |
80 | } | |
81 | ||
82 | public class BankAction extends Action { | |
83 | ||
84 | public String getDesc() { | |
85 | if (!bank.isOpen()) { | |
86 | return "Opening bank."; | |
87 | } else if (inventory.contains(Constants.ITEM_AIR_RUNE)) { | |
88 | return "Depositing items."; | |
89 | } | |
90 | return "Withdrawing items."; | |
91 | } | |
92 | ||
93 | public boolean isValid() { | |
94 | return !canCraft() && inBank(); | |
95 | } | |
96 | ||
97 | public void process() { | |
98 | if (bank.isOpen()) { | |
99 | if (inventory.contains(Constants.ITEM_AIR_RUNE)) { | |
100 | if (inventory.containsOneOf(Constants.ITEM_AIR_TALISMAN, Constants.ITEM_RUNE_ESS, Constants.ITEM_PRUNE_ESS)) { | |
101 | bank.depositAllExcept(Constants.ITEM_AIR_TALISMAN, Constants.ITEM_RUNE_ESS, Constants.ITEM_PRUNE_ESS); | |
102 | } else { | |
103 | bank.depositAll(); | |
104 | } | |
105 | } else if (!inventory.contains(Constants.ITEM_RUNE_ESS) || !inventory.contains(Constants.ITEM_PRUNE_ESS)) { | |
106 | int runeCount = bank.getCount(Constants.ITEM_RUNE_ESS); | |
107 | int pruneCount = bank.getCount(Constants.ITEM_PRUNE_ESS); | |
108 | if (runeCount < 1) { | |
109 | log("You are out of rune essences!"); | |
110 | } else { | |
111 | bank.withdraw(Constants.ITEM_RUNE_ESS, 0); | |
112 | } | |
113 | ||
114 | if(pruneCount < 1) { | |
115 | log("You are out of pure rune essences!"); | |
116 | } else { | |
117 | bank.withdraw(Constants.ITEM_PRUNE_ESS, 0); | |
118 | } | |
119 | } | |
120 | sleep(600, 800); | |
121 | } else { | |
122 | RSNPC banker = npcs.getNearest(Constants.FILTER_NPC); | |
123 | if (banker != null) { | |
124 | while (!bank.isOpen()) { | |
125 | camera.setAngle(random(1, 359)); | |
126 | ||
127 | mouse.move(banker.getModel().getPoint(), 1, 1); | |
128 | mouse.click(false); | |
129 | menu.doAction("Bank banker"); | |
130 | sleep(random(600, 800)); | |
131 | ||
132 | if (!bank.isOpen()) { | |
133 | bank.open(); | |
134 | } | |
135 | } | |
136 | } | |
137 | } | |
138 | } | |
139 | } | |
140 | ||
141 | public abstract class ObjectAction extends Action { | |
142 | ||
143 | private String action; | |
144 | private int id; | |
145 | ||
146 | public ObjectAction(String action, int id) { | |
147 | this.action = action; | |
148 | this.id = id; | |
149 | } | |
150 | ||
151 | public String getDesc() { | |
152 | return "Interacting with object."; | |
153 | } | |
154 | ||
155 | public void process() { | |
156 | RSObject object = objects.getNearest(id); | |
157 | if (object != null) { | |
158 | if (object.isOnScreen()) { | |
159 | object.doAction(action); | |
160 | if (calc.distanceTo(object) > 1) { | |
161 | waitToMove(random(600, 900)); | |
162 | } | |
163 | } else { | |
164 | camera.turnToObject(object); | |
165 | if (!object.isOnScreen()) { | |
166 | walking.getPath(object.getLocation()).traverse(); | |
167 | } | |
168 | } | |
169 | } | |
170 | } | |
171 | } | |
172 | ||
173 | public abstract class WalkToArea extends Action { | |
174 | ||
175 | private RSPath path; | |
176 | ||
177 | public WalkToArea(RSPath path) { | |
178 | this.path = path; | |
179 | } | |
180 | ||
181 | protected abstract boolean canRest(); | |
182 | ||
183 | protected abstract boolean isTargetValid(); | |
184 | ||
185 | public boolean isValid() { | |
186 | return isTargetValid(); | |
187 | } | |
188 | ||
189 | public void process() { | |
190 | if (walking.getEnergy() < 20) { | |
191 | if (canRest() && inMusician()) { | |
192 | RSTilePath tilePath = walking.newTilePath(Constants.AREA_MUSICIAN.getTileArray()); | |
193 | if (!tilePath.traverse()) { | |
194 | walking.newTilePath(new RSTile[]{Constants.AREA_MUSICIAN.getCentralTile()}).traverse(); | |
195 | } | |
196 | waitToMove(random(600, 900)); | |
197 | walking.rest(100); | |
198 | } | |
199 | } else if (!walking.isRunEnabled()) { | |
200 | walking.setRun(true); | |
201 | } | |
202 | path.traverse(); | |
203 | } | |
204 | } | |
205 | ||
206 | private int runesCrafted; | |
207 | ||
208 | private int startExp; | |
209 | private int startLvl; | |
210 | ||
211 | private Set<Action> actions; | |
212 | private Action action; | |
213 | ||
214 | private Timer timer; | |
215 | ||
216 | @Override | |
217 | public boolean onStart() { | |
218 | timer = new Timer(0); | |
219 | ||
220 | actions = new HashSet<Action>(); | |
221 | ||
222 | actions.add(new BankAction()); | |
223 | ||
224 | actions.add(new ObjectAction("Enter", Constants.OBJECT_RUINS) { | |
225 | ||
226 | @Override | |
227 | public String getDesc() { | |
228 | return "Entering mysterious ruins."; | |
229 | } | |
230 | ||
231 | public boolean isValid() { | |
232 | return canCraft() && inRuins(); | |
233 | } | |
234 | ||
235 | public void process() { | |
236 | if (inventory.contains(Constants.ITEM_AIR_TALISMAN)) { | |
237 | if (!inventory.isItemSelected()) { | |
238 | inventory.getItem(Constants.ITEM_AIR_TALISMAN).doClick(true); | |
239 | } else { | |
240 | RSItem selItem = inventory.getSelectedItem(); | |
241 | if (selItem.getID() != Constants.ITEM_AIR_TALISMAN) { | |
242 | selItem.doClick(true); | |
243 | return; | |
244 | } | |
245 | } | |
246 | RSObject obj = objects.getNearest(Constants.OBJECT_ALTAR); | |
247 | if (obj != null) { | |
248 | Point toClick = getScreenPoint(obj); | |
249 | if (toClick.x != -1 && toClick.y != -1) { | |
250 | mouse.click(toClick, true); | |
251 | if (calc.distanceTo(obj) > 1) { | |
252 | waitToMove(random(600, 900)); | |
253 | } | |
254 | return; | |
255 | } else if (obj.isOnScreen()) { | |
256 | obj.doClick(true); | |
257 | if (calc.distanceTo(obj) > 1) { | |
258 | waitToMove(random(600, 900)); | |
259 | } | |
260 | } else { | |
261 | camera.turnToObject(obj); | |
262 | if (!obj.isOnScreen()) | |
263 | walking.getPath(obj.getLocation()).traverse(); | |
264 | } | |
265 | } | |
266 | } else { | |
267 | super.process(); | |
268 | } | |
269 | waitToStop(); | |
270 | } | |
271 | }); | |
272 | ||
273 | actions.add(new ObjectAction("Craft-rune", Constants.OBJECT_ALTAR) { | |
274 | ||
275 | @Override | |
276 | public String getDesc() { | |
277 | return "Crafting runes."; | |
278 | } | |
279 | ||
280 | public boolean isValid() { | |
281 | return canCraft() && inAltar(); | |
282 | } | |
283 | ||
284 | public void process() { | |
285 | super.process(); | |
286 | sleep(200, 400); | |
287 | waitForAnim(random(900, 1200)); | |
288 | if (random(1, 6) == 3) { | |
289 | RSObject portal = objects.getNearest(Constants.OBJECT_PORTAL); | |
290 | if (portal != null) { | |
291 | Point toClick = getScreenPoint(portal); | |
292 | if (toClick.x != -1 && toClick.y != -1) { | |
293 | mouse.click(toClick, true); | |
294 | } else { | |
295 | portal.doClick(false); | |
296 | } | |
297 | if (menu.isOpen()) { | |
298 | if (!menu.contains("Enter")) { | |
299 | while (menu.isOpen()) { | |
300 | mouse.moveRandomly(750); | |
301 | } | |
302 | } | |
303 | } | |
304 | } | |
305 | } | |
306 | } | |
307 | }); | |
308 | ||
309 | actions.add(new ObjectAction("Enter", Constants.OBJECT_PORTAL) { | |
310 | ||
311 | public String getDesc() { | |
312 | return "Leaving mysterious ruins"; | |
313 | } | |
314 | ||
315 | public boolean isValid() { | |
316 | return !canCraft() && inAltar(); | |
317 | } | |
318 | ||
319 | public void process() { | |
320 | if (menu.isOpen()) { | |
321 | if (menu.contains("Enter")) { | |
322 | menu.doAction("Enter"); | |
323 | waitToMove(random(600, 900)); | |
324 | } else { | |
325 | mouse.moveSlightly(); | |
326 | } | |
327 | } else { | |
328 | super.process(); | |
329 | } | |
330 | waitToStop(); | |
331 | } | |
332 | }); | |
333 | ||
334 | actions.add(new WalkToArea(walking.newTilePath(Constants.PATH).reverse()) { | |
335 | ||
336 | protected boolean canRest() { | |
337 | return true; | |
338 | } | |
339 | ||
340 | protected boolean isTargetValid() { | |
341 | return !canCraft() && !inAltar() && !inBank(); | |
342 | } | |
343 | ||
344 | public String getDesc() { | |
345 | return "Heading to bank"; | |
346 | } | |
347 | }); | |
348 | ||
349 | actions.add(new WalkToArea(walking.newTilePath(Constants.PATH)) { | |
350 | ||
351 | protected boolean canRest() { | |
352 | return true; | |
353 | } | |
354 | ||
355 | protected boolean isTargetValid() { | |
356 | return canCraft() && !inRuins() && !inAltar(); | |
357 | } | |
358 | ||
359 | public String getDesc() { | |
360 | return "Heading to mysterious ruins"; | |
361 | } | |
362 | }); | |
363 | ||
364 | startExp = skills.getCurrentExp(Skills.RUNECRAFTING); | |
365 | startLvl = skills.getCurrentLevel(Skills.RUNECRAFTING); | |
366 | return true; | |
367 | } | |
368 | ||
369 | public int loop() { | |
370 | if (interfaces.get(741).isValid()) { | |
371 | interfaces.getComponent(741, 9).doClick(); | |
372 | return random(300, 500); | |
373 | } else if (interfaces.get(740).isValid()) { | |
374 | env.saveScreenshot(false); | |
375 | interfaces.getComponent(740, 3).doClick(); | |
376 | sleep(600, 700); | |
377 | if (game.getCurrentTab() != Game.TAB_STATS) { | |
378 | game.openTab(Game.TAB_STATS); | |
379 | sleep(800, 1200); | |
380 | } | |
381 | skills.doHover(Skills.INTERFACE_RUNECRAFTING); | |
382 | sleep(150, 300); | |
383 | mouse.click(true); | |
384 | return random(random(1000, 1300), 2000); | |
385 | } | |
386 | ||
387 | if (action != null) { | |
388 | if (action.isValid()) { | |
389 | action.process(); | |
390 | } else { | |
391 | action = null; | |
392 | } | |
393 | } else { | |
394 | for (Action a : actions) { | |
395 | if (a.isValid()) { | |
396 | action = a; | |
397 | break; | |
398 | } | |
399 | } | |
400 | } | |
401 | if (random(1, 10) == random(1, 6)) { | |
402 | antiban(); | |
403 | } | |
404 | return random(200, 400); | |
405 | } | |
406 | ||
407 | public void onRepaint(Graphics g) { | |
408 | if (game.isLoggedIn() && !game.isLoginScreen()) { | |
409 | g.setColor(new Color(16, 16, 16, 123)); | |
410 | g.fillRoundRect(8, 179, 243, 153, 15, 15); | |
411 | ||
412 | g.setColor(Color.RED); | |
413 | g.draw3DRect(13, 291, 231, 15, true); | |
414 | ||
415 | g.setColor(new Color(48, 225, 48, 170)); | |
416 | g.fill3DRect(14, 292, (getPercentToLvl() * 229 / 100), 14, true); | |
417 | ||
418 | g.setColor(Color.WHITE); | |
419 | g.drawString("Aion's Air Crafter v" + getVersion(), 65, 192); | |
420 | g.drawString("Runtime: " + getRuntime(), 13, 206); | |
421 | ||
422 | g.drawString("Crafted " + format(getRunesCrafted()) + " air runes", 13, 225); | |
423 | g.drawString("Gained " + format(getExpGained()) + " exp", 13, 239); | |
424 | g.drawString("Runes/Hour: " + format((int) getRunesHour()), 140, 225); | |
425 | g.drawString("Exp/Hour: " + format((int) getExpHour()), 140, 239); | |
426 | ||
427 | int lvlGained = getLvlGained(); | |
428 | String text = lvlGained == 0 ? "runecrafting" : ""; | |
429 | g.drawString("Current " + text + " level: " + getRunecraftLvl(), 13, 258); | |
430 | if (lvlGained != 0) { | |
431 | text = lvlGained == 1 ? "" : "s"; | |
432 | g.drawString("Gained " + lvlGained + " level" + text, 140, 258); | |
433 | } | |
434 | ||
435 | g.drawString("Exp left: " + format(getExpToLvl()), 13, 272); | |
436 | g.drawString("Runes left: " + format(getRunesLeft()), 140, 272); | |
437 | g.drawString("Estimated time to level: " + getTimeToLvl(), 13, 286); | |
438 | g.drawString(getPercentToLvl() + "%", 113, 303); | |
439 | ||
440 | if (action != null) { | |
441 | g.drawString("Status: " + action.getDesc(), 13, 325); | |
442 | } | |
443 | ||
444 | } | |
445 | ||
446 | Point mPoint = mouse.getLocation(); | |
447 | Point pPoint = mouse.getPressLocation(); | |
448 | long mpt = System.currentTimeMillis() - mouse.getPressTime(); | |
449 | ||
450 | if (mpt < 1000) { | |
451 | g.setColor(Color.red); | |
452 | g.drawOval(pPoint.x - 2, pPoint.y - 2, 4, 4); | |
453 | g.drawOval(pPoint.x - 9, pPoint.y - 9, 18, 18); | |
454 | } | |
455 | ||
456 | g.setColor(Color.YELLOW); | |
457 | g.drawOval(mPoint.x - 2, mPoint.y - 2, 4, 4); | |
458 | g.drawOval(mPoint.x - 9, mPoint.y - 9, 18, 18); | |
459 | } | |
460 | ||
461 | public void messageReceived(MessageEvent e) { | |
462 | String message = e.getMessage().toLowerCase(); | |
463 | if (message.contains("bind the temple")) { | |
464 | runesCrafted += inventory.getCount(Constants.ITEM_RUNE_ESS); | |
465 | runesCrafted += inventory.getCount(Constants.ITEM_PRUNE_ESS); | |
466 | } else if (message.contains("you've just")) { | |
467 | log(message); | |
468 | } | |
469 | } | |
470 | ||
471 | private void antiban() { | |
472 | switch (random(1, 50)) { | |
473 | case 2: | |
474 | if (random(1, 5) != 1) { | |
475 | break; | |
476 | } | |
477 | mouse.moveSlightly(); | |
478 | break; | |
479 | case 6: | |
480 | if (random(1, 18) != 7) { | |
481 | break; | |
482 | } | |
483 | if (game.getCurrentTab() != Game.TAB_STATS) { | |
484 | game.openTab(Game.TAB_STATS); | |
485 | sleep(500, 900); | |
486 | } | |
487 | skills.doHover(Skills.INTERFACE_RUNECRAFTING); | |
488 | sleep(random(1400, 2000), 3000); | |
489 | if (random(0, 5) != 3) { | |
490 | break; | |
491 | } | |
492 | mouse.moveSlightly(); | |
493 | break; | |
494 | case 9: | |
495 | case 14: | |
496 | case 17: | |
497 | case 25: | |
498 | camera.setAngle(random(-360, 360)); | |
499 | break; | |
500 | case 30: | |
501 | case 34: | |
502 | case 37: | |
503 | case 40: | |
504 | camera.setPitch(camera.getPitch() >= random(65, 101) ? random(0, 61) : random(61, 101)); | |
505 | } | |
506 | } | |
507 | ||
508 | private boolean canCraft() { | |
509 | return inventory.contains(Constants.ITEM_RUNE_ESS) || inventory.contains(Constants.ITEM_PRUNE_ESS); | |
510 | } | |
511 | ||
512 | private String format(int number) { | |
513 | return format(String.valueOf(number)); | |
514 | } | |
515 | ||
516 | private String format(String number) { | |
517 | if (number.length() < 4) { | |
518 | return number; | |
519 | } | |
520 | return format(number.substring(0, number.length() - 3)) + "," | |
521 | + number.substring(number.length() - 3, number.length()); | |
522 | } | |
523 | ||
524 | private int getExpGained() { | |
525 | if (startExp == -1) { | |
526 | if (game.getClientState() == 10) { | |
527 | startExp = skills.getCurrentExp(Skills.RUNECRAFTING); | |
528 | } | |
529 | } | |
530 | return skills.getCurrentExp(Skills.RUNECRAFTING) - startExp; | |
531 | } | |
532 | ||
533 | private double getExpHour() { | |
534 | int xpGained = getExpGained(); | |
535 | long start = System.currentTimeMillis() - timer.getElapsed(); | |
536 | return xpGained * 3600000D / (System.currentTimeMillis() - start); | |
537 | } | |
538 | ||
539 | private int getExpToLvl() { | |
540 | return skills.getExpToNextLevel(Skills.RUNECRAFTING); | |
541 | } | |
542 | ||
543 | private int getLvlGained() { | |
544 | if (startLvl == -1) { | |
545 | if (game.getClientState() == 10) { | |
546 | startLvl = skills.getCurrentLevel(Skills.RUNECRAFTING); | |
547 | } | |
548 | } | |
549 | return skills.getCurrentLevel(Skills.RUNECRAFTING) - startLvl; | |
550 | } | |
551 | ||
552 | private int getPercentToLvl() { | |
553 | return skills.getPercentToNextLevel(Skills.RUNECRAFTING); | |
554 | } | |
555 | ||
556 | private int getRunecraftLvl() { | |
557 | return skills.getCurrentLevel(Skills.RUNECRAFTING); | |
558 | } | |
559 | ||
560 | private int getRunesCrafted() { | |
561 | return runesCrafted; | |
562 | } | |
563 | ||
564 | private double getRunesHour() { | |
565 | int runes = getRunesCrafted(); | |
566 | long start = System.currentTimeMillis() - timer.getElapsed(); | |
567 | return runes * 3600000D / (System.currentTimeMillis() - start); | |
568 | } | |
569 | ||
570 | private int getRunesLeft() { | |
571 | return getExpToLvl() / 5; | |
572 | } | |
573 | ||
574 | private String getRuntime() { | |
575 | return timer.toElapsedString(); | |
576 | } | |
577 | ||
578 | private Point getScreenPoint(RSObject obj) { | |
579 | if (obj != null) { | |
580 | RSModel model = obj.getModel(); | |
581 | if (model != null) { | |
582 | for (Polygon pol : model.getTriangles()) { | |
583 | for (int i = 0; i < pol.npoints; i++) { | |
584 | Point p = new Point(pol.xpoints[i], pol.ypoints[i]); | |
585 | if (calc.pointOnScreen(p)) { | |
586 | return p; | |
587 | } | |
588 | } | |
589 | } | |
590 | } | |
591 | } | |
592 | return new Point(-1, -1); | |
593 | } | |
594 | ||
595 | private String getTimeFormat(long time) { | |
596 | return Timer.format(time); | |
597 | } | |
598 | ||
599 | private String getTimeToLvl() { | |
600 | return getTimeFormat((long) (getExpToLvl() / getExpHour() * 3600000D)); | |
601 | } | |
602 | ||
603 | private double getVersion() { | |
604 | return Constants.VERSION; | |
605 | } | |
606 | ||
607 | private boolean inAltar() { | |
608 | return Constants.AREA_ALTAR.contains(getMyPlayer().getLocation()); | |
609 | } | |
610 | ||
611 | private boolean inBank() { | |
612 | return Constants.AREA_BANK.contains(getMyPlayer().getLocation()); | |
613 | } | |
614 | ||
615 | private boolean inRuins() { | |
616 | return Constants.AREA_RUINS.contains(getMyPlayer().getLocation()); | |
617 | } | |
618 | ||
619 | private boolean inMusician() { | |
620 | return Constants.AREA_MUSICIAN.contains(getMyPlayer().getLocation()); | |
621 | } | |
622 | ||
623 | private void waitForAnim(int timeout) { | |
624 | long endTime = System.currentTimeMillis() + timeout; | |
625 | while (System.currentTimeMillis() < endTime) { | |
626 | if (getMyPlayer().getAnimation() != -1) { | |
627 | break; | |
628 | } | |
629 | sleep(5, 15); | |
630 | } | |
631 | } | |
632 | ||
633 | private void waitForIface(int iface, int timeout) { | |
634 | long endTime = System.currentTimeMillis() + timeout; | |
635 | while (System.currentTimeMillis() < endTime) { | |
636 | if (interfaces.get(iface).isValid()) { | |
637 | break; | |
638 | } | |
639 | sleep(5, 15); | |
640 | } | |
641 | } | |
642 | ||
643 | private boolean waitToMove(int timeout) { | |
644 | long endTime = System.currentTimeMillis() + timeout; | |
645 | while (System.currentTimeMillis() < endTime) { | |
646 | if (getMyPlayer().isMoving()) { | |
647 | return true; | |
648 | } | |
649 | sleep(5, 15); | |
650 | } | |
651 | return false; | |
652 | } | |
653 | ||
654 | private void waitToStop() { | |
655 | do { | |
656 | sleep(5, 15); | |
657 | } while (getMyPlayer().isMoving()); | |
658 | } |