Search the Community
Showing results for tags 'code review'.
-
Hello, Thanks for checking out my post. here is my second script which is a moded version of my first, both of which relied on Pandemics example miner and chatgpt. Seems to be running fine but one thing that is bugging me is it stays on the bank longer than Id like, ex it withdraws gold bars and seems to sleep for a second longer then it should but im still not certain what code is producing this. It is a simple gold bar crafter making whatever mould is in your inventory in edge. Not really any antiban so if any one has some to share id appreciate it as well. It is a node task script as Pandemic showed in his miner example. Im open to all critique. It is seperated into 3 files, the main script being CashCrafter and the two nodes being BankTask & SmeltTask. Here is CashCrafter. import org.dreambot.api.methods.skills.Skill; import org.dreambot.api.methods.skills.SkillTracker; import org.dreambot.api.script.Category; import org.dreambot.api.script.ScriptManifest; import org.dreambot.api.script.impl.TaskScript; import org.dreambot.api.utilities.Logger; import tasks.BankTask; import tasks.SmeltingTask; import java.awt.*; @ScriptManifest(category = Category.CRAFTING, name = "CashCrafter", description = "Crafts Cash.", author = "BTK", version = 0.2) public class CashCrafter extends TaskScript { private long startTime; private SmeltingTask smeltingTask; private BankTask bankTask; @Override public void onStart() { Logger.log("Starting cash miner......"); SkillTracker.start(Skill.CRAFTING); startTime = System.currentTimeMillis(); smeltingTask = new SmeltingTask(); bankTask = new BankTask(); addNodes(smeltingTask, bankTask); } @Override public void onPaint(Graphics2D g) { g.setFont(new Font("Arial", Font.BOLD, 12)); Color bronze = new Color(205, 127, 50); g.setColor(bronze); String experienceGainedText = String.format( "Crafting Experience: %d (%d per hour)", SkillTracker.getGainedExperience(Skill.CRAFTING), SkillTracker.getGainedExperiencePerHour(Skill.CRAFTING) ); g.drawString(experienceGainedText, 5, 35); long elapsedTime = System.currentTimeMillis() - startTime; String timeRunningText = "Time Running: " + formatTimeElapsed(elapsedTime); g.drawString(timeRunningText, 5, 65); // Adjust y-coordinate as String smeltingStatus = "Smelting: " + smeltingTask.getStatus(); g.drawString(smeltingStatus, 5, 95); String bankStatus = "Banking: " + bankTask.getStatus(); g.drawString(bankStatus, 5, 115); } private String formatTimeElapsed(long millis) { long seconds = millis / 1000; long minutes = seconds / 60; seconds %= 60; long hours = minutes / 60; minutes %= 60; return String.format("%02d:%02d:%02d", hours, minutes, seconds); } } SmeltingTask package tasks; import org.dreambot.api.methods.Calculations; import org.dreambot.api.methods.container.impl.Inventory; import org.dreambot.api.methods.input.Camera; import org.dreambot.api.methods.interactive.GameObjects; import org.dreambot.api.methods.interactive.Players; import org.dreambot.api.methods.map.Area; import org.dreambot.api.methods.map.Tile; import org.dreambot.api.methods.skills.Skill; import org.dreambot.api.methods.skills.Skills; import org.dreambot.api.methods.tabs.Tab; import org.dreambot.api.methods.tabs.Tabs; import org.dreambot.api.methods.walking.impl.Walking; import org.dreambot.api.methods.widget.Widgets; import org.dreambot.api.script.TaskNode; import org.dreambot.api.utilities.Logger; import org.dreambot.api.utilities.Sleep; import org.dreambot.api.wrappers.interactive.GameObject; import org.dreambot.api.wrappers.widgets.WidgetChild; import java.util.Random; public class SmeltingTask extends TaskNode { Area smeltArea = new Area(3108, 3500, 3109, 3498); Tile smeltTile = new Tile(3109, 3499); private String status = "Inactive"; // ... your existing node logic ... public String getStatus() { return status; } @Override public boolean accept() { boolean hasBars = Inventory.contains(item -> item.getName().toLowerCase().contains("bar")); if (isSmelting() && !hasBars) status = "Inactive"; return !isSmelting() && hasBars; } @Override public int execute() { status = "Executing smelting."; if (!smeltArea.contains(Players.getLocal().getTile())) { Random random = new Random(); status = "Walking to smelting"; if (random.nextInt(10) == 0) { Logger.log("Walk to smelt area"); Walking.walk(smeltArea.getRandomTile()); } else { Logger.log("Walk to smelt tile"); Walking.walk(smeltTile); } Sleep.sleepUntil(Walking::shouldWalk, () -> Players.getLocal().isMoving(), 1000, 100); return 100; } GameObject furnace = getClosestFurnace(); if (furnace == null) { Logger.log("No furace...something gone wrong!"); return Calculations.random(500, 1000); } Sleep.sleep(Calculations.random(100, 500)); status = "Interacting to smelt."; if (furnace.interact("Smelt")) { status = "Cashin in."; Sleep.sleep(Calculations.random(1500, 2500)); WidgetChild bronzeBarWidget = getWidgetBasedOnMould(); if (bronzeBarWidget != null && bronzeBarWidget.interact()) { antiBan(); Sleep.sleepUntil(this::isSmelting, 3000); } } return Calculations.random(500, 1000); } private WidgetChild getWidgetBasedOnMould() { if (Inventory.contains("Necklace mould")) { return Widgets.get(446, 23); } else if (Inventory.contains("Amulet mould")) { return Widgets.get(446, 37); } else if (Inventory.contains("Bracelet mould")){ return Widgets.get(446, 50); } else if (Inventory.contains("Ring mould")) { return Widgets.get(); } else { throw new RuntimeException("No mould in inventory!"); } } private void antiBan() { int choice = Calculations.random(0, 99); // Generates a random number between 0 and 99 inclusive status = "Cashin in, antiban random: " + choice; switch (choice) { case 0: // 1% chance Skills.hoverSkill(Skill.CRAFTING); Sleep.sleep(Calculations.random(2000, 5000)); break; case 1: // 1% chance // Camera. Sleep.sleep(Calculations.random(2000, 5000)); break; case 2: // 1% chance Sleep.sleep(Calculations.random(20000, 50000)); break; case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: if (Tabs.getOpen() != Tab.INVENTORY) { Tabs.open(Tab.INVENTORY); Sleep.sleep(Calculations.random(500, 1000)); } break; default: // 90% chance // Do nothing break; } } private boolean isSmelting() { for (int i = 0; i < 9; i++) { if (Players.getLocal().isAnimating()) { return true; } int sleepTime = Calculations.random(100, 500); Sleep.sleep(sleepTime); } return false; } private GameObject getClosestFurnace() { return GameObjects.closest(object -> object.getName().equalsIgnoreCase("Furnace") && object.hasAction("Smelt") && object.distance() < 10); } } And BankTask package tasks; import org.dreambot.api.methods.Calculations; import org.dreambot.api.methods.container.impl.Inventory; import org.dreambot.api.methods.container.impl.bank.Bank; import org.dreambot.api.methods.interactive.Players; import org.dreambot.api.methods.walking.impl.Walking; import org.dreambot.api.script.TaskNode; import org.dreambot.api.utilities.Logger; import org.dreambot.api.utilities.Sleep; public class BankTask extends TaskNode { private String status = "Inactive"; public String getStatus() { return status; } @Override public boolean accept() { boolean hasBars = Inventory.contains(item -> item.getName().toLowerCase().contains("bar")); if (hasBars) status = "Inactive"; return !hasBars; } @Override public int execute() { status = "Banking"; if (Bank.open()) { status = "Banking; open."; Bank.depositAllExcept(item -> item.getName().contains("mould")); Bank.withdraw("Gold bar", 27); } else { status = "Banking; walking."; Sleep.sleepUntil(Walking::shouldWalk, () -> Players.getLocal().isMoving(), 1000, 100); return 100; } return Calculations.random(300, 600); } }