Jump to content

Camaro

Scripter II
  • Posts

    689
  • Joined

  • Last visited

  • Days Won

    1
  • Feedback

    100%

Everything posted by Camaro

  1. Hi, just finished up my first script, looking for feedback on how I can improve. It completes Cooks Assistant and also the baking break achievement diary. Should be able to start from any point in the quest. Big shout-out to @The Viking for his Timing class! Also @Explv for the area map, extremely helpful. import org.osbot.rs07.api.model.NPC; import org.osbot.rs07.api.model.RS2Object; import org.osbot.rs07.api.ui.RS2Widget; import org.osbot.rs07.script.MethodProvider; public class Helper { private MethodProvider provider; public Helper(MethodProvider p) { provider = p; } public RS2Widget cooksAssistant() { return provider.getWidgets().get(399, 9, 1); } public RS2Widget progressPage() { return provider.getWidgets().get(119, 3); } public RS2Widget dialogBoxCook() { return provider.getWidgets().get(231, 2); } public RS2Widget dialogBoxMe() { return provider.getWidgets().get(217, 2); } public RS2Widget optionOne() { return provider.getWidgets().get(219, 1, 1); } public RS2Widget lineMilk() { return provider.getWidgets().get(119, 7); } public RS2Widget lineFlour() { return provider.getWidgets().get(119, 8); } public RS2Widget lineEgg() { return provider.getWidgets().get(119, 9); } public RS2Widget lumbyDiary() { return provider.getWidgets().get(259, 10, 83); } public RS2Widget achievementDiary() { return provider.getWidgets().get(399, 3); } public RS2Widget cookBreadAchievement() { return provider.getWidgets().get(119, 18); } public RS2Widget breadOption() { return provider.getWidgets().get(270, 14, 29); } public NPC cook() { return provider.getNpcs().closest(4626); } public RS2Object cow() { return provider.getObjects().closest(8689); } public RS2Object wheat() { return provider.getObjects().closest("Wheat"); } public RS2Object hopper() { return provider.getObjects().closest("Hopper"); } public RS2Object lever() { return provider.getObjects().closest("Hopper controls"); } public RS2Object flourBin() { return provider.getObjects().closest("Flour bin"); } public RS2Object range() { return provider.getObjects().closest("Cooking range"); } public RS2Object sink() { return provider.getObjects().closest("Sink"); } } import org.osbot.rs07.api.Quests; import org.osbot.rs07.api.map.Area; import org.osbot.rs07.api.model.GroundItem; import org.osbot.rs07.api.ui.*; import org.osbot.rs07.script.Script; import org.osbot.rs07.script.ScriptManifest; import java.awt.*; @ScriptManifest(info = "Cooks assistant", version = 1.0, logo = "", name = "Cooks assistant", author = "Matt") public class Main extends Script { enum Progress { unsure, needToStart, needToGetMilk, needToGetFlour, needToGetEgg, needToGiveMilk, needToGiveFlour, needToGiveEgg, needToTalk, doDiary, bakeBread, completed } enum FlourProgress { getGrain, putInHopper, pullLever, getFlour } public Progress progress = null; public FlourProgress flourProgress = null; public GroundItem tempitem = null; public int tempint = 0; public Helper helper = null; public final Area startArea = new Area(3205, 3217, 3212, 3212); public final Area bucketArea = new Area(3211, 9624, 3216, 9620); public final Area eggArea = new Area(3227, 3301, 3233, 3296); public final Area milkArea = new Area( new int[][]{ { 3251, 3278 }, { 3251, 3274 }, { 3254, 3271 }, { 3256, 3271 }, { 3256, 3278 } } ); public final Area flourArea = new Area( new int[][]{ { 3157, 3295 }, { 3162, 3290 }, { 3164, 3292 }, { 3164, 3295 } } ); public final Area hopperArea = new Area( new int[][]{ { 3166, 3311 }, { 3168, 3311 }, { 3171, 3308 }, { 3171, 3306 }, { 3168, 3303 }, { 3166, 3303 }, { 3163, 3306 }, { 3163, 3308 } } ); public boolean isAtStart() { return startArea.contains(myPlayer()); } public boolean isAtBucketArea() { return bucketArea.contains(myPlayer()); } public boolean isAtEggArea() { return eggArea.contains(myPlayer()); } public boolean isAtMilkArea() { return milkArea.contains(myPlayer()); } public boolean isAtFlourArea() { return flourArea.contains(myPlayer()); } public boolean isAtHopperArea(int plane) { return hopperArea.setPlane(plane).contains(myPlayer()); } public boolean isReady(int pots, int buckets, int eggs) { return inventory.getAmount("Pot") >= pots && inventory.getAmount("Bucket") >= buckets && inventory.getAmount("Egg") >= eggs; } public void getPot() { if (!isAtStart()) { walking.webWalk(startArea); } else if ((tempitem = getGroundItems().closest("Pot")) != null) { tempint = getInventory().getEmptySlotCount(); tempitem.interact("Take"); Timing.waitCondition(() -> getInventory().getEmptySlotCount() < tempint, 3000); } } public void getBucket() { if (!isAtBucketArea()) { walking.webWalk(bucketArea); } else if ((tempitem = getGroundItems().closest("Bucket")) != null) { tempint = getInventory().getEmptySlotCount(); tempitem.interact("Take"); Timing.waitCondition(() -> getInventory().getEmptySlotCount() < tempint, 3000); } } public void getEgg() { if (!isAtEggArea()) { walking.webWalk(eggArea); } else if ((tempitem = getGroundItems().closest("Egg")) != null) { tempint = getInventory().getEmptySlotCount(); tempitem.interact("Take"); Timing.waitCondition(() -> getInventory().getEmptySlotCount() < tempint, 3000); } } public void getMilk() { if (!isReady(0, (int)(1 - inventory.getAmount("Bucket of milk")), 0)) { getSupplies(0, (int)(1 - inventory.getAmount("Bucket of milk")), 0); } else if (!isAtMilkArea()) { walking.webWalk(milkArea); } else if (helper.cow() != null) { tempint = (int) inventory.getAmount("Bucket of milk"); helper.cow().interact("Milk"); Timing.waitCondition(() -> inventory.getAmount("Bucket of milk") > tempint, 10000); } } public void getFlour(int count) { if (!isReady((int)(count - inventory.getAmount("Pot of flour")), 0, 0)) { getSupplies((int)(count - inventory.getAmount("Pot of flour")), 0, 0); } else if (flourProgress == null) { flourProgress = FlourProgress.getGrain; } switch (flourProgress) { case getGrain: if (inventory.getAmount("Grain") >= count - inventory.getAmount("Pot of flour")) { flourProgress = FlourProgress.putInHopper; } else if (!isAtFlourArea()) { walking.webWalk(flourArea); } else if (helper.wheat() != null) { tempint = (int) inventory.getAmount("Grain"); helper.wheat().interact("Pick"); Timing.waitCondition(() -> inventory.getAmount("Grain") > tempint, 3000); } break; case putInHopper: if (!isAtHopperArea(2)) { walking.webWalk(hopperArea.setPlane(2)); } else if (helper.hopper() != null && inventory.getItem("Grain").interact("Use")) { tempint = (int) inventory.getAmount("Grain"); helper.hopper().interact("Use"); Timing.waitCondition(() -> inventory.getAmount("Grain") < tempint && !myPlayer().isAnimating(), 5000); Timing.waitCondition(() -> false, 2000); flourProgress = FlourProgress.pullLever; } break; case pullLever: if (!isAtHopperArea(2)) { walking.webWalk(hopperArea.setPlane(2)); } else if (helper.lever() != null && helper.lever().interact("Operate")) { Timing.waitCondition(() -> !myPlayer().isMoving() && myPlayer().isAnimating(), 3000); flourProgress = FlourProgress.getFlour; } break; case getFlour: if (!isAtHopperArea(0)) { walking.webWalk(hopperArea.setPlane(0)); } else if (helper.flourBin() != null) { tempint = (int) inventory.getAmount("Pot of flour"); helper.flourBin().interact("Empty"); Timing.waitCondition(() -> inventory.getAmount("Pot of flour") > tempint, 3000); flourProgress = null; } break; } } public void getSupplies(int pots, int buckets, int eggs) { log("getting supplies"); if (inventory.getAmount("Pot") < pots) { getPot(); } else if (inventory.getAmount("Bucket") < buckets) { getBucket(); } else if (inventory.getAmount("Egg") < eggs) { getEgg(); } } @Override public void onStart() throws InterruptedException { log("Starting"); progress = Progress.unsure; helper = new Helper(this); } @Override public int onLoop() throws InterruptedException { log(progress); switch (progress) { case unsure: if (getQuests().isComplete(Quests.Quest.COOKS_ASSISTANT)) { progress = Progress.doDiary; } else if (!getQuests().isStarted(Quests.Quest.COOKS_ASSISTANT) && !getQuests().isComplete(Quests.Quest.COOKS_ASSISTANT)) { progress = Progress.needToStart; } else if (!getTabs().isOpen(Tab.QUEST) && getTabs().open(Tab.QUEST)) { Timing.waitCondition(() -> getTabs().isOpen(Tab.QUEST), 2000); } else if (helper.progressPage() == null) { helper.cooksAssistant().interact("Read Journal:"); Timing.waitCondition(() -> helper.progressPage() != null, 2000); } else if (helper.lineMilk() != null && helper.lineMilk().getMessage().contains("I need to find")) { progress = Progress.needToGetMilk; } else if (helper.lineMilk() != null && helper.lineMilk().getMessage().contains("give to the cook")) { progress = inventory.getAmount("Bucket of milk") < 2 ? Progress.needToGetMilk : Progress.needToGiveMilk; } else if (helper.lineFlour() != null && helper.lineFlour().getMessage().contains("I need to find")) { progress = Progress.needToGetFlour; } else if (helper.lineFlour() != null && helper.lineFlour().getMessage().contains("give to the cook")) { progress = inventory.getAmount("Pot of flour") < 2 ? Progress.needToGetFlour : Progress.needToGiveFlour; } else if (helper.lineEgg() != null && helper.lineEgg().getMessage().contains("I need to find")) { progress = Progress.needToGetEgg; } else if (helper.lineEgg() != null && helper.lineEgg().getMessage().contains("give to the cook")) { progress = Progress.needToGiveEgg; } else if (helper.lineMilk() != null && helper.lineFlour() != null && helper.lineEgg() != null && helper.lineMilk().getMessage().contains("I have given") && helper.lineFlour().getMessage().contains("I have given") && helper.lineEgg().getMessage().contains("I have given")) { progress = Progress.needToTalk; } break; case needToStart: if (!isAtStart()) { walking.webWalk(startArea); } else if (!getDialogues().inDialogue() && helper.cook() != null) { helper.cook().interact("Talk-to"); Timing.waitCondition(() -> getDialogues().inDialogue(), 3000); } else if ((helper.dialogBoxCook() != null && helper.dialogBoxCook().getMessage().equals("Cook")) || (helper.dialogBoxMe() != null && helper.dialogBoxMe().getMessage().equals(myPlayer().getName()))) { getKeyboard().pressKey(32); } else if (helper.optionOne() != null && helper.optionOne().getMessage().equals("What's wrong?")) { getDialogues().selectOption("What's wrong?"); } else if (helper.optionOne() != null && helper.optionOne().getMessage().equals("I'm always happy to help a cook in distress.")) { getDialogues().selectOption("I'm always happy to help a cook in distress."); Timing.waitCondition(() -> getQuests().isStarted(Quests.Quest.COOKS_ASSISTANT), 2000); progress = Progress.needToGetMilk; } break; case needToGetMilk: if (inventory.getAmount("Bucket of milk") < 2) { getMilk(); } else { progress = Progress.needToGiveMilk; } break; case needToGiveMilk: if (inventory.getAmount("Bucket of milk") < 2) { progress = Progress.unsure; } else if (!isAtStart()) { walking.webWalk(startArea); } else if (!getDialogues().inDialogue() && helper.cook() != null) { helper.cook().interact("Talk-to"); } else if ((helper.dialogBoxCook() != null && helper.dialogBoxCook().getMessage().equals("Cook")) || (helper.dialogBoxMe() != null && helper.dialogBoxMe().getMessage().equals(myPlayer().getName()))) { getKeyboard().pressKey(32); } break; case needToGetFlour: if (inventory.getAmount("Pot of flour") < 2) { getFlour(2); } else { progress = Progress.needToGiveFlour; } break; case needToGiveFlour: if (inventory.getAmount("Pot of flour") < 2) { progress = Progress.unsure; } else if (!isAtStart()) { walking.webWalk(startArea); } else if (!getDialogues().inDialogue() && helper.cook() != null) { helper.cook().interact("Talk-to"); } else if ((helper.dialogBoxCook() != null && helper.dialogBoxCook().getMessage().equals("Cook")) || (helper.dialogBoxMe() != null && helper.dialogBoxMe().getMessage().equals(myPlayer().getName()))) { getKeyboard().pressKey(32); } break; case needToGetEgg: if (!isReady(0, 0, 1)) { getEgg(); } else { progress = Progress.needToGiveEgg; } break; case needToGiveEgg: if (!getInventory().contains("Egg")) { progress = Progress.unsure; } else if (!isAtStart()) { walking.webWalk(startArea); } else if (!getDialogues().inDialogue() && helper.cook() != null) { helper.cook().interact("Talk-to"); } else if ((helper.dialogBoxCook() != null && helper.dialogBoxCook().getMessage().equals("Cook")) || (helper.dialogBoxMe() != null && helper.dialogBoxMe().getMessage().equals(myPlayer().getName()))) { getKeyboard().pressKey(32); } break; case needToTalk: if (getQuests().isComplete(Quests.Quest.COOKS_ASSISTANT)) { progress = Progress.doDiary; } else if (!isAtStart()) { walking.webWalk(startArea); } else if (!getDialogues().inDialogue() && helper.cook() != null) { helper.cook().interact("Talk-to"); } else if ((helper.dialogBoxCook() != null && helper.dialogBoxCook().getMessage().equals("Cook")) || (helper.dialogBoxMe() != null && helper.dialogBoxMe().getMessage().equals(myPlayer().getName()))) { getKeyboard().pressKey(32); } break; case doDiary: if (!getWorlds().isMembersWorld()) { log("Not on members world, cannot complete achievement diary"); progress = Progress.completed; } else if (helper.progressPage() == null && !getTabs().isOpen(Tab.QUEST) && getTabs().open(Tab.QUEST)) { Timing.waitCondition(() -> getTabs().isOpen(Tab.QUEST), 2000); } else if (helper.progressPage() == null && helper.lumbyDiary() == null && helper.achievementDiary() != null) { helper.achievementDiary().interact("View Achievement Diaries"); } else if (helper.progressPage() == null) { helper.lumbyDiary().interact("Open Lumbridge & Draynor Journal"); Timing.waitCondition(() -> helper.progressPage() != null, 2000); } else if (helper.cookBreadAchievement() != null) { progress = helper.cookBreadAchievement().getMessage().contains("<str>") ? Progress.completed : Progress.bakeBread; } break; case bakeBread: if (!getInventory().contains("Bread dough") && !getInventory().contains("Bucket of water") && !getInventory().contains("Bucket")) { getSupplies(0, 1, 0); } else if (!getInventory().contains("Bread dough") && !getInventory().contains("Pot of flour")) { getFlour(1); } else if (!isAtStart()) { walking.webWalk(startArea); } else if (!getInventory().contains("Bread dough") && !getInventory().contains("Bucket of water") && helper.sink() != null) { inventory.getItem("Bucket").interact("Use"); tempint = (int) inventory.getAmount("Bucket"); helper.sink().interact("Use"); Timing.waitCondition(() -> inventory.getAmount("Bucket") < tempint, 5000); } else if (!getInventory().contains("Bread dough") && helper.breadOption() == null) { inventory.getItem("Bucket of water").interact("Use"); tempint = (int) inventory.getAmount("Bread dough"); inventory.getItem("Pot of flour").interact("Use"); Timing.waitCondition(() -> helper.breadOption() != null, 2000); } else if (!getInventory().contains("Bread dough") && helper.breadOption() != null) { helper.breadOption().interact("Make"); } else if (!getInventory().contains("Break") && helper.range() != null && !helper.range().isVisible()) { walking.walk(new Area(3210, 3216, 3211, 3215)); } else if (!getInventory().contains("Break") && helper.range() != null) { inventory.getItem("Bread dough").interact("Use"); tempint = (int) inventory.getAmount("Bread"); helper.range().interact("Use"); if (Timing.waitCondition(() -> inventory.getAmount("Bread") > tempint, 7000)) { progress = Progress.completed; } } break; case completed: log(getWidgets().get(119, 6).getMessage()); log("Completed quest"); stop(false); break; } return 600; } }
×
×
  • Create New...