Imthabawse Posted March 30, 2019 Posted March 30, 2019 Made an updated version of my first Frog killing script. Whats new? - Teleport to Lumbridge Castle if you have the proper runes in you're inventory, walks to bank and withdraws more Tuna. - If you don't have the level to cast Teleport have no fear. I've added an option for walking as well Id like to add: - @Explv's sleep curious how I can add it to the API to use in all my scripts - Moving of camera to NPC when im attacking it and it's not visible on screen - Logging out (Stopping script) if out of Tuna in the bank Feedback appreciated! CODE: import org.osbot.rs07.api.map.Area; import org.osbot.rs07.api.map.constants.Banks; import org.osbot.rs07.api.model.NPC; import org.osbot.rs07.api.ui.Spells; import org.osbot.rs07.api.ui.Tab; import org.osbot.rs07.script.Script; import org.osbot.rs07.script.ScriptManifest; import org.osbot.rs07.utility.ConditionalSleep; @ScriptManifest(name = "Frog killer", logo = "", version = 1, author = "Imthabawse", info = "Kills frogs for gains") public final class FrogKiller extends Script { private final Area killArea = new Area(3208, 3168, 3194, 3181); private final Area teleArea = new Area(3226, 3227, 3217, 3212); @Override public void onStart() { log("Welcome to Frog Killer.. let's get to it!"); } @Override public int onLoop() throws InterruptedException { killFrog(); bank(); eat(); return 2500; } private void eat() { if (myPlayer().getHealthPercent() < 55 && getInventory().contains("Tuna")) { log("I got an owie, let's eat!"); getInventory().interact("Eat", "Tuna"); } } private void bank() throws InterruptedException { if (!getInventory().contains("Tuna") && !myPlayer().isAnimating() && !myPlayer().isMoving() && getInventory().contains("Air rune", "Earth rune", "Law rune")) { log("Teleportings for cool kids!"); getMagic().castSpell(Spells.NormalSpells.LUMBRIDGE_TELEPORT); new ConditionalSleep(10000) { @Override public boolean condition() { return teleArea.contains(myPosition()); } }.sleep(); log("Walking to bank.. please wait patiently."); getWalking().webWalk(Banks.LUMBRIDGE_UPPER); log("Opening bank.."); getBank().open(); log("Withdrawling Tuna's.."); getBank().withdrawAll("Tuna"); getTabs().open(Tab.INVENTORY); new ConditionalSleep(5000) { @Override public boolean condition() { return getInventory().contains("Tuna"); } }.sleep(); } else if (!getInventory().contains("Tuna") && !myPlayer().isAnimating() && !myPlayer().isMoving()) { log("Welp can't tele.. let's walk..."); getWalking().webWalk(Banks.LUMBRIDGE_UPPER); log("Opening bank.."); getBank().open(); log("Withdrawlings Tuna's.."); getBank().withdrawAll("Tuna"); getTabs().open(Tab.INVENTORY); new ConditionalSleep(5000) { @Override public boolean condition() { return getInventory().contains("Tuna"); } }.sleep(); } } private void killFrog() { if (!killArea.contains(myPosition()) && getInventory().contains("Tuna")) { log("Let's get to killing!"); getWalking().webWalk(killArea); } else if (killArea.contains(myPosition()) && !myPlayer().isAnimating() && !myPlayer().isMoving() && getInventory().contains("Tuna")) { NPC frog = getNpcs().closest(killArea,"Giant frog","Big frog"); if (!frog.isUnderAttack() && !frog.isHitBarVisible() && frog.isOnScreen()) { log("DIE! FROG! DIE!"); frog.interact("Attack"); new ConditionalSleep(5000) { @Override public boolean condition() { return myPlayer().isAnimating(); } }.sleep(); } } } }
Xx pk xX Posted March 31, 2019 Posted March 31, 2019 (edited) It's getting better and better Adding camera movement: //NPC frog = getNpcs().closest(killArea,"Giant frog","Big frog"); //it's better to use filter here with all conditions that you want for finding frog. //in your code before it would only return frog with correct frog name, however, it might return // you a frog that was already under attack/frog which has hit bar visible. NPC frog = npcs.closest(npc -> (npc.getName().equals("Giant frog") || npc.getName().equals("Big frog")) && !npc.isUnderAttack() && !npc.isHitBarVisible()); { if (frog != null) { //make sure to check if frog is not null if (!frog.isOnScreen()) { if (camera.toEntity(frog)) { //move camera to Frog if it is not on the screen //do something if camera was moved to frog - it should be on screen now } } //if (frog != null && !frog.isUnderAttack() && !frog.isHitBarVisible() && frog.isOnScreen()) { log("DIE! FROG! DIE!"); if (frog.interact("Attack")) { //add a condition to make sure you will call ConditionalSleep only if frog was interacted new ConditionalSleep(5000) { @Override public boolean condition() { return myPlayer().isAnimating(); } }.sleep(); } } } And about logging out when you don't have any Tunas anymore, it's quite simple if (getBank().getAmount("Tuna") == 0) //checks if there is 0 Tunas in bank (you can check for any number, e.g. "< 10" ///less than 10 { log("not enough tuna in bank"); getBank().close(); stop(true); // true to log out, false to stay logged in and just stop script } Edited March 31, 2019 by Xx pk xX 1