soms Posted January 19, 2021 Share Posted January 19, 2021 Crafts any jewellery using Edgeville furnace 💰 glhf  import com.epicbot.api.shared.APIContext; import com.epicbot.api.shared.GameType; import com.epicbot.api.shared.entity.SceneObject; import com.epicbot.api.shared.entity.WidgetChild; import com.epicbot.api.shared.model.Tile; import com.epicbot.api.shared.script.LoopScript; import com.epicbot.api.shared.script.ScriptManifest; import com.epicbot.api.shared.util.Random; import com.epicbot.api.shared.util.time.Time; @ScriptManifest(name = "JewelleryCrafter", gameType = GameType.OS) public class EdgeJewelleryCrafter extends LoopScript { private long anim; private int runE = Random.nextInt(50,80); private static final int GOLD_FURNACE_GROUP = 446; private static final int SILVER_FURNACE_GROUP = 6; private static final Tile FURNACE_ROOM = new Tile(3108, 3499, 0); private static final Tile EDGE_BANK = new Tile(3096, 3496, 0); /* Settings */ private static final String JEWELLERY_NAME = "Diamond bracelet"; private static final String MOULD = "Bracelet mould"; private static final String BAR = "Gold bar"; private static final boolean USING_GEM = true; private static final String GEM = "Diamond"; @Override protected int loop() { APIContext ctx = getAPIContext(); int hr = Time.getHumanReaction(); if (ctx.walking().getRunEnergy() > runE && !ctx.walking().isRunEnabled() && !localAnimating(ctx) && !ctx.bank().isOpen()) { ctx.walking().setRun(true); runE = Random.nextInt(30,80); return hr; } if (ctx.inventory().containsAll(BAR, MOULD) && (!USING_GEM || ctx.inventory().contains(GEM)) && !localAnimating(ctx)) { if (isOpen(ctx) && initiate(ctx, JEWELLERY_NAME)) { Time.sleep(5000, () -> localAnimating(ctx)); return hr; } SceneObject furnace = ctx.objects().query().named("Furnace").results().first(); if (furnace != null) { if (furnace.isVisible() && furnace.interact("Smelt")) { Time.sleep(10000, () -> isOpen(ctx)); return hr; } else if (!furnace.isVisible()) { ctx.walking().walkTo(FURNACE_ROOM); Time.sleep(10000, ()->furnace.isVisible() || furnace.distanceTo(ctx) <= 2); } } } else if (!ctx.inventory().containsAll(BAR, MOULD) || (USING_GEM && !ctx.inventory().contains(GEM))) { if (openBankOnScreen(ctx)) { ctx.bank().depositAllExcept(MOULD, BAR); if (JEWELLERY_NAME.startsWith("Gold")) { banking(ctx, MOULD, BAR); } else { banking(ctx, MOULD, BAR, GEM); } } else { ctx.walking().walkTo(EDGE_BANK.randomize(2,0)); Time.sleep(15000,() -> openBankOnScreen(ctx)); } } return hr; } private static boolean getItem(int amount, String name, APIContext ctx) { if (ctx.bank().contains(name)) { ctx.bank().withdraw(amount, name); Time.sleep(4000, () -> APIContext.get().inventory().contains(name)); return true; } else { ctx.script().stop("No "+name+" in bank, stopping."); } return false; } public static boolean banking(APIContext ctx, String... item) { if (!ctx.inventory().contains(item[0]) && getItem(1, item[0], ctx)) if (item.length == 2) { if (!ctx.inventory().contains(item[1]) && getItem(ctx.bank().getCount(item[1]), item[1], ctx)) return ctx.inventory().containsAll(item[0], item[1]); } if (item.length == 3) { if (ctx.inventory().getCount(item[1]) < 13 && getItem(13, item[1], ctx)) if (ctx.inventory().getCount(item[2]) < 13 && getItem(13, item[2], ctx)) return ctx.inventory().containsAll(item[0], item[1], item[2]); } return false; } public static boolean openBankOnScreen(APIContext ctx) { if (ctx.bank().isOpen()) { return true; } SceneObject bank = ctx.objects().query().actions("Bank").visible().results().nearest(); if (bank != null && bank.interact("Bank")) { Time.sleep(10000, ()->ctx.bank().isOpen()); } return ctx.bank().isOpen(); } @Override public boolean onStart(String... strings) { return true; } private boolean localAnimating(APIContext ctx) { if (ctx.localPlayer().isAnimating()) { anim = System.currentTimeMillis(); return true; } return System.currentTimeMillis() <= (anim + Random.nextInt(2600, 3600)); } public static boolean isOpen(APIContext ctx) { return ctx.widgets().query().group(GOLD_FURNACE_GROUP, SILVER_FURNACE_GROUP).visible().results().first() != null; } public static boolean initiate(APIContext ctx, String name) { WidgetChild named = ctx.widgets().query().visible().group(GOLD_FURNACE_GROUP, SILVER_FURNACE_GROUP).filter(w -> w.getActions().size() != 0).itemName(name).results().first(); if (named != null) { return named.interact(); } WidgetChild actionable = ctx.widgets().query().visible().group(GOLD_FURNACE_GROUP, SILVER_FURNACE_GROUP).filter(w -> w.hasActionMatch("Make "+name)).results().first(); if (actionable != null) { return actionable.interact(); } return false; } }  1 Quote Link to comment Share on other sites More sharing options...
Sellout Posted January 19, 2021 Share Posted January 19, 2021 nois Quote Link to comment Share on other sites More sharing options...
Global Moderators MansNoThot Posted January 19, 2021 Global Moderators Share Posted January 19, 2021 gz on release! Quote Link to comment Share on other sites More sharing options...
blasmi223 Posted February 18, 2022 Share Posted February 18, 2022 Is this working? Quote Link to comment Share on other sites More sharing options...
devil1485 Posted February 23, 2023 Share Posted February 23, 2023 (edited) its working but it doesnt reconize gold bars in the bank... so it freezing when bank is open. he detects it in inventory though Edited February 23, 2023 by devil1485 Quote Link to comment Share on other sites More sharing options...
devil1485 Posted February 23, 2023 Share Posted February 23, 2023 what do I need to change to detect the gold bars in bank? Quote Link to comment Share on other sites More sharing options...
flip242 Posted May 15, 2023 Share Posted May 15, 2023 Here is the code if you want to craft silver bars into tiaras  import com.epicbot.api.shared.APIContext; import com.epicbot.api.shared.GameType; import com.epicbot.api.shared.entity.SceneObject; import com.epicbot.api.shared.entity.WidgetChild; import com.epicbot.api.shared.model.Tile; import com.epicbot.api.shared.script.LoopScript; import com.epicbot.api.shared.script.ScriptManifest; import com.epicbot.api.shared.util.Random; import com.epicbot.api.shared.util.time.Time; @ScriptManifest(name = "JewelleryCrafter", gameType = GameType.OS) public class EdgeJewelleryCrafter extends LoopScript { private long anim; private int runE = Random.nextInt(50, 80); private static final int FURNACE_GROUP = 446; private static final int SILVER_FURNACE_GROUP = 6; private static final Tile FURNACE_ROOM = new Tile(3108, 3499, 0); private static final Tile EDGE_BANK = new Tile(3096, 3496, 0); /* Settings */ private static final String JEWELLERY_NAME = "Tiara"; private static final String MOULD = "Tiara mould"; private static final String BAR = "Silver bar"; @Override protected int loop() { APIContext ctx = getAPIContext(); int hr = Time.getHumanReaction(); if (ctx.walking().getRunEnergy() > runE && !ctx.walking().isRunEnabled() && !localAnimating(ctx) && !ctx.bank().isOpen()) { ctx.walking().setRun(true); runE = Random.nextInt(30, 80); return hr; } if (ctx.inventory().containsAll(BAR, MOULD) && !localAnimating(ctx)) { if (isOpen(ctx) && initiate(ctx, JEWELLERY_NAME)) { Time.sleep(5000, () -> localAnimating(ctx)); return hr; } SceneObject furnace = ctx.objects().query().named("Furnace").results().first(); if (furnace != null) { if (furnace.isVisible() && furnace.interact("Smelt")) { Time.sleep(10000, () -> isOpen(ctx)); return hr; } else if (!furnace.isVisible()) { ctx.walking().walkTo(FURNACE_ROOM); Time.sleep(10000, () -> furnace.isVisible() || furnace.distanceTo(ctx) <= 2); } } } else if (!ctx.inventory().containsAll(BAR)) { if (openBankOnScreen(ctx)) { ctx.bank().depositAllExcept(BAR); depositTiaraMould(ctx); banking(ctx, MOULD, BAR); } else { ctx.walking().walkTo(EDGE_BANK.randomize(2, 0)); Time.sleep(15000, () -> openBankOnScreen(ctx)); } } return hr; } private static boolean getItem(String name, APIContext ctx) { if (ctx.bank().contains(name)) { ctx.bank().withdrawAll(name); Time.sleep(4000, () -> ctx.inventory().contains(name)); return true; } else { ctx.script().stop("No " + name + " in bank, stopping."); } return false; } public static boolean banking(APIContext ctx, String... item) { if (!ctx.inventory().contains(item[0]) && getItem(item[0], ctx)) { if (item.length == 2) { if (!ctx.inventory().contains(item[1]) && getItem(item[1], ctx)) { return ctx.inventory().containsAll(item[0], item[1]); } } return false; } else if (item.length == 1) { return ctx.inventory().contains(item[0]); } return false; } public static boolean openBankOnScreen(APIContext ctx) { if (ctx.bank().isOpen()) { return true; } SceneObject bank = ctx.objects().query().actions("Bank").visible().results().nearest(); if (bank != null && bank.interact("Bank")) { Time.sleep(10000, () -> ctx.bank().isOpen()); } return ctx.bank().isOpen(); } private static void depositTiaraMould(APIContext ctx) { if (ctx.bank().isOpen()) { ctx.bank().depositAllExcept(BAR); Time.sleep(3000, () -> ctx.inventory().isEmpty()); } } @Override public boolean onStart(String... strings) { return true; } private boolean localAnimating(APIContext ctx) { if (ctx.localPlayer().isAnimating()) { anim = System.currentTimeMillis(); return true; } return System.currentTimeMillis() <= (anim + Random.nextInt(2600, 3600)); } public static boolean isOpen(APIContext ctx) { return ctx.widgets().query().group(FURNACE_GROUP,SILVER_FURNACE_GROUP).visible().results().first() != null; } public static boolean initiate(APIContext ctx, String name) { WidgetChild named = ctx.widgets().query().visible().group(FURNACE_GROUP,SILVER_FURNACE_GROUP).filter(w -> w.getActions().size() != 0).itemName(name).results().first(); if (named != null) { return named.interact(); } WidgetChild actionable = ctx.widgets().query().visible().group(FURNACE_GROUP,SILVER_FURNACE_GROUP).filter(w -> w.hasActionMatch("Make " + name)).results().first(); if (actionable != null) { return actionable.interact(); } return false; } }  EdgeJewelleryCrafter.class Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.