-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathAA_UnicornHornGrinder.java
More file actions
151 lines (119 loc) · 3.74 KB
/
AA_UnicornHornGrinder.java
File metadata and controls
151 lines (119 loc) · 3.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
/**
* A script for grinding unicorn horns at Shantay Bank.
* Start with pestle and mortar in inventory.
* <p>
*
* @Author Chomp
*/
public class AA_UnicornHornGrinder extends AA_Script {
private static final Coordinate COORDINATE_BANK_CHEST = new Coordinate(58, 731);
private static final int ITEM_ID_PESTLE = 468;
private static final int ITEM_ID_HORN = 466;
private long startTime;
private long depositTimeout;
private long withdrawTimeout;
private long grindTimeout;
private long bankOpenTimeout;
private int previousPlayerY;
private int hornsGround;
private int hornsRemaining;
private boolean idle;
public AA_UnicornHornGrinder(final Extension ex) {
super(ex);
}
@Override
public void init(final String parameters) {
if (bot.getInventoryId(0) != ITEM_ID_PESTLE) {
throw new IllegalStateException("Pestle and mortar missing from inventory.");
}
startTime = System.currentTimeMillis();
}
@Override
public int main() {
if (idle) {
return idle();
}
if (bot.getInventorySize() == 1 || bot.getInventoryId(1) != ITEM_ID_HORN) {
if (!isBanking()) {
return openShantayBank();
}
if (bot.getInventorySize() == 1) {
if (System.currentTimeMillis() <= withdrawTimeout) {
return 0;
}
hornsRemaining = bankCount(ITEM_ID_HORN);
if (hornsRemaining == 0) {
return exit("Out of horns.");
}
withdraw(ITEM_ID_HORN, MAX_INV_SIZE - 1);
withdrawTimeout = System.currentTimeMillis() + TIMEOUT_THREE_SECONDS;
return 0;
}
if (System.currentTimeMillis() <= depositTimeout) {
return 0;
}
deposit(bot.getInventoryId(1), MAX_INV_SIZE - 1);
depositTimeout = System.currentTimeMillis() + TIMEOUT_THREE_SECONDS;
return 0;
}
if (System.currentTimeMillis() <= grindTimeout) {
return 0;
}
useItemWithItem(0, 1);
grindTimeout = System.currentTimeMillis() + TIMEOUT_ONE_SECOND;
return 0;
}
@Override
public void onServerMessage(final String message) {
if (message.endsWith("dust")) {
hornsGround++;
hornsRemaining--;
grindTimeout = 0L;
} else if (message.endsWith("area")) {
idle = true;
previousPlayerY = getY();
} else {
super.onServerMessage(message);
}
}
private int idle() {
if (getY() != previousPlayerY) {
idle = false;
return 0;
}
if (previousPlayerY == COORDINATE_BANK_CHEST.getY()) {
walkTo(COORDINATE_BANK_CHEST.getX() + 1, COORDINATE_BANK_CHEST.getY() + 1);
} else {
walkTo(COORDINATE_BANK_CHEST.getX() + 1, COORDINATE_BANK_CHEST.getY());
}
return SLEEP_ONE_TICK;
}
private int openShantayBank() {
if (System.currentTimeMillis() <= bankOpenTimeout) {
return 0;
}
if (getX() - COORDINATE_BANK_CHEST.getX() > 1) {
walkTo(COORDINATE_BANK_CHEST.getX() + 1, COORDINATE_BANK_CHEST.getY());
return SLEEP_ONE_TICK;
}
useObject1(COORDINATE_BANK_CHEST.getX(), COORDINATE_BANK_CHEST.getY());
bankOpenTimeout = System.currentTimeMillis() + TIMEOUT_TWO_SECONDS;
return 0;
}
@Override
public void paint() {
int y = PAINT_OFFSET_Y;
bot.drawString("@yel@Unicorn Horn Grinder", PAINT_OFFSET_X, y, 1, 0);
bot.drawString(String.format("@yel@Runtime: @whi@%s", toDuration(startTime)),
PAINT_OFFSET_X, y += PAINT_OFFSET_Y_INCREMENT, 1, 0);
bot.drawString(String.format("@yel@Dust: @whi@%d @cya@(@whi@%s horns@cya@/@whi@hr@cya@)",
hornsGround, toUnitsPerHour(hornsGround, startTime)),
PAINT_OFFSET_X, y += PAINT_OFFSET_Y_INCREMENT * 2, 1, 0);
if (hornsRemaining <= 0) return;
bot.drawString(String.format("@yel@Remaining: @whi@%d", hornsRemaining),
PAINT_OFFSET_X, y += PAINT_OFFSET_Y_INCREMENT * 2, 1, 0);
bot.drawString(String.format("@yel@Time remaining: @whi@%s",
toTimeToCompletion(hornsGround, hornsRemaining, startTime)),
PAINT_OFFSET_X, y + PAINT_OFFSET_Y_INCREMENT, 1, 0);
}
}