import java.awt.*
import org.osbot.script.Script
import org.osbot.script.ScriptManifest
import org.osbot.script.mouse.*
import org.osbot.script.rs2.*
import org.osbot.script.rs2.map.Position
import org.osbot.script.rs2.model.GroundItem
import org.osbot.script.rs2.model.Item
import org.osbot.script.rs2.model.PrimaryObject
import org.osbot.script.rs2.model.RS2Object
import org.osbot.script.rs2.ui.*
import java.rmi.server.LogStream
@ScriptManifest(name = "LmapleChopper", author = "Linkcg0", version = 1.1D, info="Cuts maples at seers and banks them for you. Supports Bird's Nests. Made by Link.")
class LmapleChopper extends Script {
private final Color color = new Color(0, 0, 0)
private final Color rectColor = new Color(0.6f, 0.7f, 0.4f, 0.7f)
private final Font font = new Font("Georgia", 0, 18)
private final Image img1 = getImage("http://oi48.tinypic.com/29kw4rr.jpg")
private Image getImage(String url) {
try {
return ImageIO.read(new URL(url))
} catch(IOException e) {
return null;
}
}
void onExit() {
log("Maplechopper by link")
}
int[] bankId = 25808
int[] axeIds = [1352, 1360, 1350, 1354, 1362, 1358, 1356]
int[] treeId = 1307
int[] nests = [5071, 5072, 5073, 5074, 5075, 5070, 7413, 5076]
enum State {
IDLE, CHOPPING, WALK_TO_BANK, PIN, BANKING, WALK_TO_MAPLES, CLOSE_BANK
}
def nearestevilTree = null
def evilTree = 1735
def maples = 0
def state = State.IDLE
def currentTree = !null
def starttime = null;
void onStart() {
starttime = System.currentTimeMillis()
if (client.getInventory().isFull())
state = State.WALK_TO_BANK
}
int onLoop() {
switch (state) {
case State.IDLE:
return onIdle()
case State.CHOPPING:
return onChopping()
case State.WALK_TO_BANK:
return walkToBank()
case State.BANKING:
return bank()
case State.CLOSE_BANK:
return closeBank()
case State.WALK_TO_MAPLES:
return walkToMaples()
}
return 300 + random(500)
}
int onIdle() {
if (!client.getMyPlayer().isAnimating()) {
state = State.WALK_TO_MAPLES
}
else if (client.getBank().isOpen()) {
client.getBank().close()
state = State.WALK_TO_MAPLES
}
else if (client.getInventory().isFull()) {
state = State.WALK_TO_BANK
//client.moveCameraToEntity(closestObject(bankId))
return 500 + gRandom(100, 400)
}
if (random(10) == 0) {
client.moveCameraToEntity(currentTree)
sleep(3000 + gRandom(500, 200))
}
return 100 + gRandom(600, 500);
}
int onChopping() {
nearestevilTree = closestObject(evilTree)
if (client.getInventory().isFull()) {
state = State.WALK_TO_BANK
//client.moveCameraToEntity(closestObject(bankId))
return 300 + gRandom(100, 400)
}
if (random(60) == 0 && currentTree != null && currentTree.exists())
antiban()
client.moveCameraToEntity(currentTree)
if (currentTree == null) {
state = State.IDLE
log("Chopped down Maple!")
return 500 + gRandom(1000, 500)
}
if (!currentTree.exists()) {
state = State.IDLE
currentTree = null
log("Chopped down Maple!")
}
if (nearestevilTree != null) {
log("Found Evil tree. Banking logs.")
state = State.WALK_TO_BANK
}
return 500 + gRandom(100, 500)
}
int walkToBank() {
selectEntityOption(closestObject(bankId), "Bank", "Bank booth")
sleep(8000 + gRandom(300, 50))
if (client.getBank().isOpen())
state = State.BANKING
return 200 + gRandom(100, 200)
}
int bank() {
selectInventoryOption(client.inventory.getSlotForId(1518), "Store All")
state = State.CLOSE_BANK
return 500 + gRandom(200, 300)
}
int closeBank() {
client.getBank().close()
state = State.WALK_TO_MAPLES
return 500 + gRandom(200, 300)
}
int antiban() {
log("Starting antiban.")
if (currentTab() != Tab.SETTINGS){
openTab(Tab.SETTINGS)
sleep(5000 + gRandom(300, 50))
openTab(Tab.MUSIC)
}
return 500 + gRandom(200, 300)
}
int walkToMaples() {
log("Walking to Maple trees")
currentTree = closestObject(treeId)
if (currentTree != null) {
log("Found Maple tree.")
selectEntityOption(currentTree, "Chop down", "Maple tree")
client.moveCameraToEntity(currentTree)
sleep(3000 + gRandom(500, 200))
}
return 200 + gRandom(800, 300)
}
void onPaint(Graphics g) {
g.setColor(rectColor)
g.fillRect(250, 200, 266, 138)
g.setFont(font)
g.setColor(color)
g.drawImage(img1, 1, 339, null)
g.drawString("Maples Cut: ${maples}", 290, 300)
g.drawString("Time: " + format(System.currentTimeMillis() - starttime), 290, 330)
}
String format(final long time) {
final StringBuilder t = new StringBuilder();
final long total_secs = time / 1000;
final long total_mins = total_secs / 60;
final long total_hrs = total_mins / 60;
final int secs = (int) total_secs % 60;
final int mins = (int) total_mins % 60;
final int hrs = (int) total_hrs % 24;
if (hrs < 10) {
t.append("0");
}
t.append(hrs);
t.append(":");
if (mins < 10) {
t.append("0");
}
t.append(mins);
t.append(":");
if (secs < 10) {
t.append("0");
}
else if (secs < 0){
t.append("0")
}
else{
t.append(secs);
}
return t.toString();
}
void onMessage(String message) {
if (message == "You swing your axe at the tree.") {
log("Chopping down tree!")
state = State.CHOPPING
} else if (message == "You get some logs.") {
state = State.IDLE
} else if (message == "Your inventory is too full to hold any more logs.") {
log("Banking!")
state = State.WALK_TO_BANK
} else if (message == "You get some maple logs.") {
maples++
} else if (message == "A bird's nest falls out of the tree.") {
//selectEntityOption(nests, "Pick up", "Bird's nest")
log("Found Bird's Nest!")
sleep(1000 + gRandom(300, 50))
log("Hook is currently broken...")
sleep(1000 + gRandom(300, 50))
log("Oh well...no nest for you.")
state = State.IDLE
}
}
}