Jump to content
Frequently Asked Questions
  • Are you not able to open the client? Try following our getting started guide
  • Still not working? Try downloading and running JarFix
  • Help! My bot doesn't do anything! Enable fresh start in client settings and restart the client
  • How to purchase with PayPal/OSRS/Crypto gold? You can purchase vouchers from other users
  • Basic Lumbridge Anchovies Fisher w/ Banking


    flipjazz

    Recommended Posts

    Hey, started to learn how to script. Here is a basic Lumbridge anchovies fisher I wrote.

    Let me know if you have any tips! I saw some scripts do some human like movements like clicking on skills tab or change camera angle. Wondering how important this is and how to do it.
     

    import org.dreambot.api.Client;
    import org.dreambot.api.methods.MethodProvider;
    import org.dreambot.api.methods.container.impl.Inventory;
    import org.dreambot.api.methods.container.impl.bank.Bank;
    import org.dreambot.api.methods.container.impl.bank.BankLocation;
    import org.dreambot.api.methods.container.impl.bank.BankType;
    import org.dreambot.api.methods.interactive.NPCs;
    import org.dreambot.api.methods.interactive.Players;
    import org.dreambot.api.methods.map.Area;
    import org.dreambot.api.methods.walking.impl.Walking;
    import org.dreambot.api.script.AbstractScript;
    import org.dreambot.api.script.Category;
    import org.dreambot.api.script.ScriptManifest;
    import org.dreambot.api.wrappers.interactive.Entity;
    import org.dreambot.api.wrappers.interactive.NPC;
    import org.dreambot.api.wrappers.interactive.Player;
    
    @ScriptManifest(
        name = "Script Name",
        description = "My script description!",
        author = "Developer Name",
        version = 1.1,
        category = Category.UTILITY,
        image = "")
    public class TestScript extends AbstractScript {
    
      private final Area fishArea = new Area(3243, 3150, 3245, 3153);
      private final Area lumbridgeBank = BankLocation.LUMBRIDGE.getArea(2);
    
      @Override
      public int onLoop() {
        MethodProvider.log("On loop is called...");
        if (!Inventory.isFull()) {
          doFish();
        } else {
          goBank();
        }
        return (int) (Math.random() * 500) + 500;
      }
    
      private void goBank() {
        Player currPlayer = Players.localPlayer();
        if (currPlayer.isAnimating()) {
          MethodProvider.log("Player is moving.");
          return;
        }
    
        if (!lumbridgeBank.contains(currPlayer)) {
          MethodProvider.log("Go to bank.");
          Walking.walk(lumbridgeBank.getRandomTile());
          return;
        }
    
        Entity banker = Bank.getClosestBank(BankType.NPC);
        if (banker != null) {
          MethodProvider.log("depositing.");
          Bank.openClosest();
          Bank.depositAll(item -> item.getName().equals("Raw shrimps"));
          return;
        }
      }
    
      private void doFish() {
        Player currPlayer = Players.localPlayer();
        if (currPlayer.isAnimating()) {
          MethodProvider.log("Player is moving.");
          return;
        }
    
        NPC fishingSpot = NPCs.closest("Fishing spot");
        if (fishingSpot != null) {
          MethodProvider.log("Cast Net.");
          fishingSpot.interact("Net");
          return;
        }
    
        if (!fishArea.contains(currPlayer)) {
          MethodProvider.log("Walk to area.");
          Walking.walk(fishArea.getRandomTile());
          return;
        }
      }
    }

     

    Link to comment
    Share on other sites

    • 2 years later...

    Minor programming tip. If you can avoid the bang operator (!) then that is generally a better practice. The reason is the "NOT" adds extra cognitive load. So in your onLoop you do:

        if (!Inventory.isFull()) {
          doFish();
        } else {
          goBank();
        }

    but if you switch this it is easier to follow/read
     

        if (Inventory.isFull()) {
          goBank();
        } else {
          doFish();
        }

    You could make your banking more generic by changing:
     

          Bank.depositAll(item -> item.getName().equals("Raw shrimps"));

    to something like:
     

          Bank.depositAll(item -> item.getName().contains("Raw"));

    and then that might be more general and work for anchovies at higher levels.

     



    Also, how do you handle when you gain a level? Does it just stop there, or did I miss that?

    Link to comment
    Share on other sites

    Create an account or sign in to comment

    You need to be a member in order to leave a comment

    Create an account

    Sign up for a new account in our community. It's easy!

    Register a new account

    Sign in

    Already have an account? Sign in here.

    Sign In Now
    ×
    ×
    • Create New...

    Important Information

    We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.