Since this code ain't efficent :/ (it makes him going for ridges and boulders, but he somehow walks in small circles.)
- Code: Select all
import java.lang.*;
import haven.event.*;
import haven.*;
maid.doSay("BOT: foragebot");
//---------------------------------------------------------------------------------------------------------------
chopRadius = 120;
while (true) {
Gob[] gobs = maid.doAreaList(chopRadius)
for (Gob g : gobs) {
String gobName = maid.getName(g);
if (gobName != null && (gobName.indexOf("herbs") > 0)) {
if (maid.meterStamina != null && maid.meterStamina.value < 20) {
sleep();
}
hasPath = maid.pathFind(g.getc(), 4, false);
if (!hasPath)
continue;
maid.doRightClick(g);
flowerMenu = maid.waitForFlowerMenu();
maid.doSelect(flowerMenu, "Pick");
maid.waitForItemCreate(1);
inv = maid.getInventory();
int freeSlots = maid.getInventoryFreeSlots(inv);
if (freeSlots < 1) {
maid.doAction("act", "theTrav", "hearth");
Thread.sleep(3500); // wait for teleport
}
if (maid.meterHunger != null && maid.meterHunger.type == MeterEventObjectHunger.HungerType.VERY_HUNGRY) {
eat();
}
}
if (gobName != null && gobName.indexOf("mountain/n2w") > 0 ||
gobName.indexOf("bumlings/03") > 0 ||
gobName.indexOf("mountain/w2n") > 0) {
if (maid.meterStamina != null && maid.meterStamina.value < 20) {
sleep();
}
hasPath = maid.pathFind(g.getc(), 4, false);
if (!hasPath)
continue;
if (maid.meterHunger != null && maid.meterHunger.type == MeterEventObjectHunger.HungerType.VERY_HUNGRY) {
eat();
}
}
}
}
def sleep() {
Thread.sleep(30*1000); // rest for 2 minutes
}
def eat() {
Inventory inv = maid.getInventory();
Item[] items = maid.getItems(inv);
for (Item i : items) {
String a = i.res.res.name ;
ItemType itemType = i.getItemType(i);
// feast
if (itemType == ItemType.FOOD_FEP || itemType == ItemType.FOOD_NO_FEP) {
maid.doInteract(i);
flowerMenu = maid.waitForFlowerMenu();
maid.doSelect(flowerMenu, "Eat");
maid.waitForItemDestroy();
break;
}
}
}