-
Posts
8 -
Joined
-
Last visited
-
Feedback
0%
Scripter 3's Achievements
Newbie (1/10)
1
Reputation
-
[Snippet] CSleep, Syntactic Sugar for ConditionalSleep
Scripter 3 replied to Botre's topic in Snippets
Nice work. Thanks for the snippet -
[Snippet] A start to an AIO Runecrafter [Open-Source]
Scripter 3 replied to Scripter 3's topic in Snippets
True. I'll let those who use this to edit it themselves -
public enum Tanner { LEATHER("Cowhide", 324, 148, "Leather"), HARD_LEATHER("Cowhide", 324, 149, "Hard leather"), GREEN_LEATHER("Green dragonhide", 324, 152, "Green dragon leather"), RED_LEATHER("Red dragonhide", 324, 154, "Red dragon leather"), BLUE_LEATHER("Blue dragonhide", 324, 153, "Blue dragon leather"), BLACK_LEATHER("Black dragonhide", 324, 107, "Black dragon leather"); private int parent, child; //WidgetParent, WidgetChild private String startProduct, endProduct; Tanner(String startProduct, int parent, int child, String endProduct) { this.startProduct = startProduct; this.parent = parent; this.child = child; this.endProduct = endProduct; } public int getParent() { return parent; } public int getChild() { return child; } public String getStartProduct() { return startProduct; } public String getEndProduct() { return endProduct; } } refer to http://osbot.org/forum/topic/95545-snippet-a-start-to-an-aio-runecrafter-open-source for an example on usage.
-
Our Enum for our altar modes Credits: Isolate - for status snippet, Explv - for JOptionPane snippet, and Valkyr - for being my boy toy. import org.osbot.rs07.api.map.Area; import org.osbot.rs07.api.map.Position; public enum Altars { AIR_ALTAR("Rune essence", "Air rune", new Position(2986, 3294,0), new Position(3013, 3356, 0), new Area(2839, 4840, 2849, 4827), new Area(3009, 3358, 3021, 3353), new Area(2970, 3379, 3022, 3275)), MIND_ALTAR("Rune essence", "Mind rune", new Position(2980, 3513, 0), new Position(2945, 3370, 0), new Area(2771, 4852, 2798, 4823), new Area(2940, 3375, 2952, 3358), new Area(2922, 3525, 3037, 3308)), WATER_ALTAR("Rune essence", "Water rune", new Position(3183, 3166, 0), new Position(3094, 3244, 0), new Area(2706, 4842, 2730, 4828), new Area(3088, 3246, 3097, 3240), new Area(3058, 3278, 3280, 3119)), EARTH_ALTAR("Rune essence", "Earth rune", new Position(3305, 3472, 0), new Position(3253, 3421, 0), new Area(2644, 4851, 2663, 4824), new Area(3248, 3427, 3259, 3414), new Area(3225, 3406, 3318, 3500)), FIRE_ALTAR("Rune essence", "Fire rune", new Position(3312, 3253, 0), new Position(3382, 3270, 0), new Area(2572, 4852, 2596, 4827), new Area(3375, 3275, 3388, 3266), new Area(3267, 3302, 3412, 3154)), BODY_ALTAR("Rune essence", "Body rune", new Position(3055, 3447, 0), new Position(3093, 3490, 0), new Area(2511, 4847, 2529, 4829), new Area(3090, 3499, 3098, 3488), new Area(3039, 3521, 3127, 3408)), COSMIC_ALTAR("Pure essence", "Cosmic rune", new Position(2408, 4379, 0), new Position(2386, 4458, 0), new Area(2119, 4856, 2164, 4811), new Area(2382, 4461, 2390, 4453), new Area(2382, 4461, 2424, 4369)), //CHAOS_ALTAR("Pure essence", "Chaos rune", new Position(3062, 3590, 0), new Position(3094, 3497, 0), new Area(), new Area(3090, 3499, 3098, 3488), new Area(3114, 3455, 2959, 3621)), ASTRAL_ALTAR("Pure essence", "Astral rune", new Position(2156, 3865, 0), new Position(2100, 3918, 0), new Area(2150, 3871, 2164, 3859), new Area(2097, 3921, 2104, 3917), new Area(2094, 3924, 2170, 3845)) ; private String essence, crafted; private Position ruinsPos, bankPos; private Area altarZone, bankZone, pathingZone; Altars(String essence, String craftedRune, Position ruinsPos, Position bankPos, Area altarZone, Area bankZone, Area pathingZone) { this.essence = essence; this.crafted = craftedRune; this.ruinsPos = ruinsPos; this.bankPos = bankPos; this.altarZone = altarZone; this.bankZone = bankZone; this.pathingZone = pathingZone; } public String getEssence() { return essence; } public String getCrafted() { return crafted; } public Position getRuinsPos() { return ruinsPos; } public Position getBankPos() { return bankPos; } public Area getAltarZone() { return altarZone; } public Area getBankZone() { return bankZone; } public Area getPathingZone() { return pathingZone; } } You can edit and expand it as you like Main @ScriptManifest(name = "Runecrafter", author = "Scripter 3", version = 1.0, info = "Supports walking atm", logo = "") public class RC extends Script{ // define variables private String essence, crafted; private Position ruinsPos, bankPos; private Area altarZone, bankZone, pathingZone; private Altars altars; public static String getStatus, lastLoggedStatus; private long startTime; private int runesMade; } onStart @Override public void onStart() throws InterruptedException { startTime = System.currentTimeMillis(); //start the timer getExperienceTracker().startAll(); /start the experience tracker. can just do start(Skill skill); runesMade = 0; //refresh our rune counter altars = (Altars) JOptionPane.showInputDialog(null, "Select a mode:", "Runecrafter", JOptionPane.INFORMATION_MESSAGE, null, Altars.values(), Altars.values()[0] ); //JOptionPane that throws our enum into it to select a 'Mode' loadMode(altars); //load our mode. } onLoop @Override public int onLoop() throws InterruptedException { /*Handle level-up*/ if (getDialogues().isPendingContinuation()) { //if pending con -> click con getDialogues().clickContinue(); new ConditionalSleep(2000, 600) { //sleep @Override public boolean condition() throws InterruptedException { return !getDialogues().isPendingContinuation(); } }.sleep(); } /*Handle bank depositbox missclick */ if (getDepositBox().isOpen()){ //if its open -> close -> sleep getDepositBox().close(); new ConditionalSleep(2000, 900) { @Override public boolean condition() throws InterruptedException { return !getDepositBox().isOpen(); } }.sleep(); } /*Handle running*/ if (getSettings().getRunEnergy() >= random(15, 35) && !getSettings().isRunning()){ getSettings().setRunning(true); new ConditionalSleep(2000, 700) { @Override public boolean condition() throws InterruptedException { return getSettings().isRunning(); } }.sleep(); } //if not running -> randomize between 15,25 energy -> turn it on -> sleep /*Handle banking*/ if (bankZone.contains(myPosition()) && !getInventory().contains(essence)){ //pretty explanatory if (!getBank().isOpen()){ getStatus = "Opening bank"; getBank().open(); new ConditionalSleep(2000, 767) { @Override public boolean condition() throws InterruptedException { return getBank().isOpen(); } }.sleep(); } else { if (getInventory().contains(crafted)){ getStatus = "Depositing"; getBank().depositAll(); sleep(600); } else { getStatus = "Withdrawing"; getBank().withdrawAll(essence); sleep(600); if (random(0, 7) < 2) getBank().close(); } } } /*Handle walking w/ essence*/ if (pathingZone.contains(myPosition()) && getInventory().contains(essence)){ if (ruinsPos.distance(myPosition()) <= 10){ RS2Object ruins = getObjects().closest(obj -> obj.hasAction("Enter") && obj.getName().equals("Mysterious ruins")); if (ruins != null && ruins.interact("Enter")){ getStatus = "Entering ruins"; new ConditionalSleep(5000, 676) { @Override public boolean condition() throws InterruptedException { return altarZone.contains(myPosition()); } }.sleep(); } } else { getStatus = "Walking to ruins"; WebWalkEvent toRuins = new WebWalkEvent(INodeRouteFinder.createAdvanced(), ruinsPos); execute(toRuins); } } /*Handle walking w/o essence*/ if (pathingZone.contains(myPosition()) && getInventory().contains(crafted)){ getStatus = "Walking to bank"; WebWalkEvent toRuins = new WebWalkEvent(INodeRouteFinder.createAdvanced(), bankPos); execute(toRuins); } /*Craft runes in altar area || leave altar area*/ if (altarZone.contains(myPosition())){ if (getInventory().contains(essence)){ RS2Object altar = getObjects().closest("Altar"); if (altar != null && altar.interact("Craft-rune")){ getStatus = "Crafting runes"; new ConditionalSleep(4000, 912) { @Override public boolean condition() throws InterruptedException { return getInventory().contains(crafted); } }.sleep(); runesMade += getInventory().getAmount(crafted); } } else if (getInventory().contains(crafted)){ RS2Object portal = getObjects().closest("Portal"); if (portal != null && portal.interact("Use")){ getStatus = "Exiting area"; new ConditionalSleep(3500, 684) { @Override public boolean condition() throws InterruptedException { return pathingZone.contains(myPosition()); } }.sleep(); } } } return 600; } onPaint @Override public void onPaint(Graphics2D gfx) { long timeRan = System.currentTimeMillis() - this.startTime; gfx.setColor(Color.PINK); gfx.drawString("Mode: " + altars, 20, 20); gfx.drawString("Status: " + printStatus(), 20, 40); gfx.drawString("Time: " + Time.format(timeRan), 20, 60); gfx.drawString("Experience: " + getExperienceTracker().getGainedXP(Skill.RUNECRAFTING) + " (" + getExperienceTracker().getGainedXPPerHour(Skill.RUNECRAFTING) + ")", 20, 80); gfx.drawString("Time Till Level: " + Time.format(getExperienceTracker().getTimeToLevel(Skill.RUNECRAFTING)), 20, 100); gfx.drawString("Gained level(s): +" + getExperienceTracker().getGainedLevels(Skill.RUNECRAFTING), 20, 120); gfx.drawString("Runes crafted: " + runesMade, 20, 140); } methods /** * Methods * @param mode */ public void loadMode(Altars mode) { this.essence = mode.getEssence(); this.crafted = mode.getCrafted(); this.ruinsPos = mode.getRuinsPos(); this.bankPos = mode.getBankPos(); this.altarZone = mode.getAltarZone(); this.bankZone = mode.getBankZone(); this.pathingZone = mode.getPathingZone(); } private String printStatus(){ if(!Objects.equals(lastLoggedStatus, getStatus)){ log("Current Status: " + getStatus); lastLoggedStatus = getStatus; } return lastLoggedStatus; } Quick copy pasta import com.ajck.runecrafting.util.Altars; import com.ajck.runecrafting.util.Time; import org.osbot.rs07.api.map.Area; import org.osbot.rs07.api.map.Position; import org.osbot.rs07.api.model.RS2Object; import org.osbot.rs07.api.ui.Skill; import org.osbot.rs07.api.webwalk.INodeRouteFinder; import org.osbot.rs07.event.WebWalkEvent; import org.osbot.rs07.script.Script; import org.osbot.rs07.script.ScriptManifest; import org.osbot.rs07.utility.ConditionalSleep; import javax.swing.*; import java.awt.*; import java.util.Objects; @ScriptManifest(name = "Runecrafter", author = "Scripter 3", version = 1.0, info = "Supports walking atm", logo = "") public class RC extends Script{ private String essence, crafted; private Position ruinsPos, bankPos; private Area altarZone, bankZone, pathingZone; private Altars altars; public static String getStatus, lastLoggedStatus; private long startTime; private int runesMade; @Override public void onStart() throws InterruptedException { startTime = System.currentTimeMillis(); getExperienceTracker().startAll(); runesMade = 0; altars = (Altars) JOptionPane.showInputDialog(null, "Select a mode:", "Runecrafter", JOptionPane.INFORMATION_MESSAGE, null, Altars.values(), Altars.values()[0] ); loadMode(altars); } @Override public int onLoop() throws InterruptedException { /*Handle level-up*/ if (getDialogues().isPendingContinuation()) { getDialogues().clickContinue(); new ConditionalSleep(2000, 600) { @Override public boolean condition() throws InterruptedException { return !getDialogues().isPendingContinuation(); } }.sleep(); } /*Handle bank depositbox missclick */ if (getDepositBox().isOpen()){ getDepositBox().close(); new ConditionalSleep(2000, 900) { @Override public boolean condition() throws InterruptedException { return !getDepositBox().isOpen(); } }.sleep(); } /*Handle running*/ if (getSettings().getRunEnergy() >= random(15, 35) && !getSettings().isRunning()){ getSettings().setRunning(true); new ConditionalSleep(2000, 700) { @Override public boolean condition() throws InterruptedException { return getSettings().isRunning(); } }.sleep(); } /*Handle banking*/ if (bankZone.contains(myPosition()) && !getInventory().contains(essence)){ if (!getBank().isOpen()){ getStatus = "Opening bank"; getBank().open(); new ConditionalSleep(2000, 767) { @Override public boolean condition() throws InterruptedException { return getBank().isOpen(); } }.sleep(); } else { if (getInventory().contains(crafted)){ getStatus = "Depositing"; getBank().depositAll(); sleep(600); } else { getStatus = "Withdrawing"; getBank().withdrawAll(essence); sleep(600); if (random(0, 7) < 2) getBank().close(); } } } /*Handle walking w/ essence*/ if (pathingZone.contains(myPosition()) && getInventory().contains(essence)){ if (ruinsPos.distance(myPosition()) <= 10){ RS2Object ruins = getObjects().closest(obj -> obj.hasAction("Enter") && obj.getName().equals("Mysterious ruins")); if (ruins != null && ruins.interact("Enter")){ getStatus = "Entering ruins"; new ConditionalSleep(5000, 676) { @Override public boolean condition() throws InterruptedException { return altarZone.contains(myPosition()); } }.sleep(); } } else { getStatus = "Walking to ruins"; WebWalkEvent toRuins = new WebWalkEvent(INodeRouteFinder.createAdvanced(), ruinsPos); execute(toRuins); } } /*Handle walking w/o essence*/ if (pathingZone.contains(myPosition()) && getInventory().contains(crafted)){ getStatus = "Walking to bank"; WebWalkEvent toRuins = new WebWalkEvent(INodeRouteFinder.createAdvanced(), bankPos); execute(toRuins); } /*Craft runes in altar area || leave altar area*/ if (altarZone.contains(myPosition())){ if (getInventory().contains(essence)){ RS2Object altar = getObjects().closest("Altar"); if (altar != null && altar.interact("Craft-rune")){ getStatus = "Crafting runes"; new ConditionalSleep(4000, 912) { @Override public boolean condition() throws InterruptedException { return getInventory().contains(crafted); } }.sleep(); runesMade += getInventory().getAmount(crafted); } } else if (getInventory().contains(crafted)){ RS2Object portal = getObjects().closest("Portal"); if (portal != null && portal.interact("Use")){ getStatus = "Exiting area"; new ConditionalSleep(3500, 684) { @Override public boolean condition() throws InterruptedException { return pathingZone.contains(myPosition()); } }.sleep(); } } } return 600; } @Override public void onPaint(Graphics2D gfx) { long timeRan = System.currentTimeMillis() - this.startTime; gfx.setColor(Color.PINK); gfx.drawString("Mode: " + altars, 20, 20); gfx.drawString("Status: " + printStatus(), 20, 40); gfx.drawString("Time: " + Time.format(timeRan), 20, 60); gfx.drawString("Experience: " + getExperienceTracker().getGainedXP(Skill.RUNECRAFTING) + " (" + getExperienceTracker().getGainedXPPerHour(Skill.RUNECRAFTING) + ")", 20, 80); gfx.drawString("Time Till Level: " + Time.format(getExperienceTracker().getTimeToLevel(Skill.RUNECRAFTING)), 20, 100); gfx.drawString("Gained level(s): +" + getExperienceTracker().getGainedLevels(Skill.RUNECRAFTING), 20, 120); gfx.drawString("Runes crafted: " + runesMade, 20, 140); } /** * Methods * @param mode */ public void loadMode(Altars mode) { this.essence = mode.getEssence(); this.crafted = mode.getCrafted(); this.ruinsPos = mode.getRuinsPos(); this.bankPos = mode.getBankPos(); this.altarZone = mode.getAltarZone(); this.bankZone = mode.getBankZone(); this.pathingZone = mode.getPathingZone(); } private String printStatus(){ if(!Objects.equals(lastLoggedStatus, getStatus)){ log("Current Status: " + getStatus); lastLoggedStatus = getStatus; } return lastLoggedStatus; } } If something can be changed please let everyone know EDIT: forgot a few classes public class Time { public static String format(long time) { StringBuilder t = new StringBuilder(); long total_secs = time / 1000L; long total_mins = total_secs / 60L; long total_hrs = total_mins / 60L; long total_days = total_hrs / 24L; int secs = (int)total_secs % 60; int mins = (int)total_mins % 60; int hrs = (int)total_hrs % 24; int days = (int)total_days; if (days > 0) { if (days < 10) { t.append("0"); } t.append(days); t.append(":"); } 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"); } t.append(secs); return t.toString(); } } public class Timer { //Extra private final long start; private final long period; private long end; public Timer(long period) { this.period = period; this.start = System.currentTimeMillis(); this.end = (this.start + period); } public long getElapsed() { return System.currentTimeMillis() - this.start; } public long getRemaining() { if (isRunning()) { return this.end - System.currentTimeMillis(); } return 0L; } public boolean isRunning() { return System.currentTimeMillis() < this.end; } public void reset() { this.end = (System.currentTimeMillis() + this.period); } public long setEndIn(long ms) { this.end = (System.currentTimeMillis() + ms); return this.end; } public String toElapsedString() { return Time.format(getElapsed()); } public String toRemainingString() { return Time.format(getRemaining()); } }
-
I've noticed it walks back to tiles it's already passed.
-
A Beginners Guide to Writing OSBot Scripts (where to get started!) by Apaec
Scripter 3 replied to Apaec's topic in Tutorials
nvm