I got banned for using a very simple bucket filling script I made. I ran it for 6 hours and was banned sometime last night during the update. How can I make my bot less detectable?? Would adding random sleeps and random clicks change anything? How are more complex bots made that go undetected for long periods?
Here's the code I used:
import org.osbot.rs07.api.filter.Filter;
import org.osbot.rs07.api.map.Position;
import org.osbot.rs07.api.model.Item;
import org.osbot.rs07.api.model.NPC;
import org.osbot.rs07.api.model.RS2Object;
import org.osbot.rs07.api.ui.Skill;
import org.osbot.rs07.input.keyboard.TypeStringEvent;
import org.osbot.rs07.script.Script;
import org.osbot.rs07.script.ScriptManifest;
import org.osbot.rs07.utility.ConditionalSleep;
@ScriptManifest(author = "Teet", info = "V1", logo = "", name = "Bucket filler", version = 1.0)
public class Main extends Script {
@Override
public void onStart() throws InterruptedException {
super.onStart();
}
private double getHpPercent() {
double hpPercentage = getSkills().getDynamic(Skill.HITPOINTS) * 100 / getSkills().getStatic(Skill.HITPOINTS);
return hpPercentage;
}
private void bank() throws InterruptedException {
RS2Object bank1 = getObjects().closest(obj -> obj != null && obj.getName().equals("Bank chest")
&& getMap().canReach(obj));
if (!myPlayer().isAnimating()) {
if (bank1 != null) {
if (bank1.interact("Use")) {
sleep(2000);
log("reacting with bank");
bank.depositAll("Bucket of water");
sleep(1000);
bank.withdrawAll("Bucket");
}
}
}
}
@Override
public int onLoop() throws InterruptedException {
RS2Object pond = getObjects().closest(obj -> obj != null && obj.getName().equals("Fountain")
&& getMap().canReach(obj));
if(!myPlayer().isAnimating()){
if(pond != null){
getWalking().walk(new Position(3221, 3212,0));
log("walking.... ");
sleep(2500);
getCamera().toEntity(pond);
if(inventory.contains("Bucket") ){
if(!myPlayer().isAnimating()) {
inventory.getItem("Bucket").interact("Use");
}
mouse.moveOutsideScreen();
if(pond.interact()){
Item[] contents = inventory.getItems();
sleep(1000);
boolean correctClick = inventory.contains("Bucket of water");
if(correctClick) {
new ConditionalSleep(25000) {
@Override
public boolean condition() throws InterruptedException {
return (!inventory.contains("Bucket"));
}
}.sleep();
}else{log("Player was not animating, retrying..");
}
log("reacting with pond");
}
}
}
}
Item[] contents = inventory.getItems();
if( inventory.isEmpty() ) {
bank();
}
else if(contents[contents.length-1].getName().equals("Bucket of water")){
bank();
}
return 0;
}
@Override
public void onExit() throws InterruptedException {
super.onExit();
}
}