Jump to content

Currently writing an anti-ban and want opinions.


Recommended Posts

Contextual based on the actual activity you're doing. 

Example: Powerfishing script.

  • AFK for a bit after the your character stops fishing. This can be due to the fishing spot moving or inventory being full. 
  • Proceed to drop fish if the inventory is full or almost full after your character stops fishing. Its reasonable for someone to drop fish if there is only 1 inventory slot left. Then restart fishing to maximize AFK time per fishing spot interaction


Example Thieving Script.

  • When the player is stunned, randomly select an action(s) to preform or none at all...
    Such as Eating Food, Spam clicking, Dropping junk (jugs after drinking wine),  Opening pouches, Menu hover the NPC, ect. 
  • For each script session, set a random clicking cadance to use for pickpocketing. 
    • I simply set a mean/std_deviation at script start. Then use these 2 numbers to generate random sleep intervals between clicks. 
  • Continue pickpocketing for a few iterations even after your character is at max pouches. 

 

Basically some things you would expect a real player to do.  

Link to comment
Share on other sites

Action delay timer: After every 1-20 or so actions with random bias towards either end, don't initiate an action until a random time delay.

For example a mining bot, clicks the rock, "You manage to mine..." text pops up, the script would have a chance to not click the next rock from anywhere between 1 second to 10 seconds or minutes or whatever the user chooses in the GUI. 

The goal would be to create a random action profile for the account, instead of a predicted action profile.

Hope I made sense and GL <3

Link to comment
Share on other sites

Everything I'm about to say is what I think, presented as if it's what I know;

They do heuristics analysis. Account age, IP, P2P/F2P, general behaviour, where does the account go. Does it do the same as other accounts? How long?
They then get a number from 0 to 1.0 on how suspicious you are. Once you exceed a certain number, you get a ban.
In order to be sure, they need a longer period of time (hence the 24 hour restriction) to be confident that they are right.

I was once banned on an account I did manually from tut to GE. I turned on a woodcutting bot and in 1 minute of botting I was banned. Honestly I believe I would have been banned if I did the cutting without the bot. They solely banned me based on that I was doing everything exactly as the script I wrote.

Normal players run around a bit, take other paths. They deviate from the perfect steps to their goal more and more over time.

Antiban should be about doing different things, doing them differently. It should be about switching up methods, doing more than just trying to get GP or XP.

Most importantly, they compare your behaviour with others. I've written a safespot script for moss giants and I have about 30k kills with it. But it's only on that account. I take a few breaks here and there, I don't do much else on the account as F2P is quite limited. I am not at risk of a ban because I have used this script only on this account and I am behaving unique to other bots - as I've used this script on this account only.

Link to comment
Share on other sites

So I have a couple things I did on my scripts that seemed to do well for me. I'm on a bit of a hiatus, just kind of lurking the forums.
I had one function I'd run after every action to check if it should be taking a break or not and if it's a quick break (5-35 sec) or a long break (45 sec - 5 min).

It takes an input and the higher the int the less likely the break will trigger. So use lower numbers for tasks that click less like fishing, and higher numbers for click intensive stuff like thieving.

public int breakRoll(int BreakChance){
        int restChance = random(1, BreakChance);
        int longRestChance = random(1,BreakChance / 2);
        int longRest = random(45_000, 300_000);
        int shortRest = random(5_000, 30_000);
        if(restChance == BreakChance){
            if(longRestChance == BreakChance / 2){
                log("Long resting for " + longRest);
                return longRest;
            } else {
                log("Short resting for " + shortRest);
                return shortRest;
            }
        } else {
            return 1_500;
        }
    }

 

Also, if I'm dropping an inventory of stuff I try not to use the drop functions out of the API, I use a function that drops in random patterns. This one will drop a whole inventory, but you can remove inventory slots from the dropPattern arrays and those inventory slots will not be dropped, but I've only ever used this for dropping stuff from thieving stalls and cleaning herbs (requires removing a couple lines of code)

void dropInventory() throws InterruptedException {
        if(tabs.getOpen().equals(Tab.INVENTORY)) {
            int[] dropPattern1 = {0, 1, 2, 3, 7, 6, 5, 4, 8, 9, 10, 11, 15, 14, 13, 12, 16, 17, 18, 19, 23, 22, 21, 20, 24, 25, 26, 27};
            int[] dropPattern2 = {0, 4, 8, 12, 16, 20, 24, 25, 21, 17, 13, 9, 5, 1, 2, 6, 10, 14, 18, 22, 26, 27, 23, 19, 15, 11, 7, 3};
            int[] dropPattern3 = {0, 4, 8, 12, 16, 20, 24, 25, 26, 27, 23, 19, 15, 11, 7, 3, 2, 1, 5, 9, 13, 17, 21, 22, 18, 14, 10, 6};
            int[] dropPattern4 = {0, 1, 2, 3, 7, 11, 15, 19, 23, 27, 26, 25, 24, 20, 16, 12, 8, 4, 5, 6, 10, 14, 18, 22, 21, 17, 13, 9};
            int[] myPattern = {0};
            switch (random(1, 4)) {
                case 1:
                    log("pattern 1");
                    myPattern = dropPattern1;
                    break;
                case 2:
                    log("pattern 2");
                    myPattern = dropPattern2;
                    break;
                case 3:
                    log("pattern 3");
                    myPattern = dropPattern3;
                    break;
                case 4:
                    log("pattern 4");
                    myPattern = dropPattern4;
                    break;
            }

            if (myPattern.length > 1) {
                keyboard.pressKey(16);
                for (int i = 0; i < myPattern.length; i++) {
                    getMouse().click(getInventory().getMouseDestination(myPattern[i]));
                }
                keyboard.releaseKey(16);
                sleep(1_000);
            } else {
                log("Unable to set pattern");
            }
        } else {
            tabs.open(Tab.INVENTORY);
        }
    }

 

To change it up from dropping items to clicking items for things like cleaning herbs, remove the 2 lines that say

keyboard.pressKey(16);
keyboard.releaseKey(16);

Key(16) is shift.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...