Jump to content

Ragnar Lothbrok

Members
  • Posts

    210
  • Joined

  • Last visited

  • Days Won

    2
  • Feedback

    100%

Everything posted by Ragnar Lothbrok

  1. Can you show me your code responsible for interacting with the range?
  2. You can use the completeDialog() method. if (!dialogues.inDialog()) { // Talk to npc } else { if (dialogues.completeDialog("answer 1", "answer2")) { // sleep !dialogues.inDialog() } } I just wrote this up quickly so there may be some typos but you should get the general idea.
  3. You'd honestly be better creating the account yourself and paying someone like @Dbuffed or any other high rep servicer. You might end up paying more in the end but at least you have the piece of mind knowing that you are in-fact the true owner of the account.
  4. Just took a look at HosterDaddy and the prices their for virtualised instances is similar to the prices at Kimsufi - where they offer dedicated hardware with higher spec. Not sure why you'd opt for HosterDaddy.
  5. I'm only a day or two into development - during this time I haven't tested this for extended period of times so botting has been minimum. I'm near completion just adding in some extra features and stuff then I'll do some testing for longer periods of time. To answer your question however I've not had any bans as of yet.
  6. I plan on releasing the script - I done farming on my main about 6 months ago and I couldn't find any Tithe Farm Bot that actually worked on here. Seems still to this day none exist so I thought I'd give it a go
  7. One of the scripts I'm currently working on
  8. I'm having trouble with the Entity getHeight() method returning the wrong value. Here's my code: RS2Object patch = getObjects().closest(p -> IntStream.of(p.getModelIds()).anyMatch(i -> i == 7768)); if (patch != null) { if (patch.getHeight() < 80) { // Plant Seed Code } else { // Water Code } } The problem is after the seed is planted I'm still getting 0 back for the height when is should now be 80 - this doesn't seem to be constant however as sometimes I'm getting the correct result. If I use the debug on the client I can see that the height is in-fact 80. Am I just doing something stupid here or is this a client bug?
  9. Because it's not the bot that gets you locked - run this on a residential IP or some proxies which seem to bypass Jagex's systems and you'll be fine. The problem with all these locks are IP based. If it was because of a script your account would be disabled not locked.
  10. I'd start by making a banking class, breaking down each type of interaction with the bank. For example I'd have a method for both withdrawing and depositing - that's a good start. Here's a quick example I use for withdrawing items from the bank on a script I'm currently working on: MethodProvider api; Area bank; Settings settings; // Custom class - not part of the api public void withdraw(HashMap<String, Integer> items) throws InterruptedException { if (!bank.contains(api.myPosition())) { api.getWalking().webWalk(bank); } else { if (!api.getBank().isOpen()) { if (api.getBank().open()) { Sleep.sleepUntil(() -> api.getBank().isOpen(), 5000); } } else { for(Map.Entry<String, Integer> entry : items.entrySet()) { String key = entry.getKey(); Integer amount = entry.getValue(); if (api.getBank().getAmount(key) >= amount) { if (api.getBank().withdraw(key, amount)) { Sleep.sleepUntil(() -> api.getInventory().getAmount(key) == amount, 5000); } } else { settings.setQuit(true); } } } } }
  11. I don't use discord, pm me prices if you wish.
  12. Need 34 farming + 100% Hosidius favour on a fresh level 3 account. I will provide the account + bond + any supplies you may need. Prices?
  13. Can get cheap dedicated servers from any of the OVH brands: Kimsufi SoYouStart OVH Good luck.
  14. Created this as a learning tool more than anything so the code is anything but perfect but it works. I've removed some proxy options should anyone like to pick this up have a look and see if you can add them back AccountCreator Class: import com.google.gson.JsonObject; import com.google.gson.JsonParser; import org.openqa.selenium.*; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.chrome.ChromeOptions; import org.openqa.selenium.support.ui.ExpectedCondition; import org.openqa.selenium.support.ui.WebDriverWait; import java.io.*; import java.net.URL; import java.util.Random; import java.util.Scanner; import java.util.concurrent.TimeUnit; public class AccountCreator { private static final String RUNESCAPE_URL = "https://secure.runescape.com/m=account-creation/create_account"; private static final String RANDGEN_URL = "https://randomuser.me/api/?nat=gb"; private static final String USER_AGENT = "Mozilla/5.0 (Windows NT x.y; rv:10.0) Gecko/20100101 Firefox/10.0"; private static String CAPTCHA_SOLVER = "anticaptcha"; private static String token = null; private static File accountFile = new File("accounts.txt"); private static JsonObject account; public static void main(String[] args) throws Exception { System.out.println("Enter number of accounts to make:"); Scanner sc = new Scanner(System.in); int accountsToMake = sc.nextInt(); for(int x = 1; x <= accountsToMake; ++x) { System.out.println("Creating Account #" + x); account = getAccountDetails(); int attempts = 0; while (token == null) { if (attempts < 5) { switch (CAPTCHA_SOLVER) { case "anticaptcha": AntiCaptcha antiCaptcha = new AntiCaptcha(); token = antiCaptcha.solveCaptcha(RUNESCAPE_URL); break; case "twocaptcha": // TODO: 2Captcha Support break; } attempts++; } else { System.out.println("Captcha Solver Failed 5 Times - Stopping"); System.gc(); System.exit(0); } } postForm(token, account); writeFile(account.get("email").getAsString() + ":" + account.get("password").getAsString() + ":" + account.get("displayname").getAsString()); if (accountsToMake > 1) { System.out.println("Waiting 10 Seconds Before Next Account..."); TimeUnit.SECONDS.sleep((long)10); } } System.out.println("Created All Accounts - Stopping"); System.gc(); System.exit(0); } private static void waitForLoad(WebDriver driver) { ExpectedCondition<Boolean> pageLoadCondition = new ExpectedCondition<Boolean>() { public Boolean apply(WebDriver driver) { return ((JavascriptExecutor) driver).executeScript("return document.readyState").equals("complete"); } }; WebDriverWait wait = new WebDriverWait(driver, 30); wait.until(pageLoadCondition); } private static void postForm(String gresponse, JsonObject account) throws UnsupportedEncodingException, InterruptedException { System.setProperty("webdriver.chrome.driver", "chromedriver"); WebDriver driver = new ChromeDriver(); driver.manage().window().maximize(); boolean created = false; boolean captchaFailed = false; while(!created && !captchaFailed) { driver.get(RUNESCAPE_URL); waitForLoad(driver); WebElement dobDay = driver.findElement(By.name("day")); WebElement dobMonth = driver.findElement(By.name("month")); WebElement dobYear = driver.findElement(By.name("year")); WebElement email = driver.findElement(By.name("email1")); WebElement displayname = driver.findElement(By.name("displayname")); WebElement password = driver.findElement(By.name("password1")); WebElement textarea = driver.findElement(By.id("g-recaptcha-response")); WebElement submit = driver.findElement(By.name("submit")); dobDay.sendKeys("01"); dobMonth.sendKeys("01"); dobYear.sendKeys("1990"); email.sendKeys(account.get("email").getAsString()); displayname.sendKeys(account.get("displayname").getAsString()); password.sendKeys(account.get("password").getAsString()); JavascriptExecutor jse = (JavascriptExecutor)driver; jse.executeScript("arguments[0].style.display = 'block';", textarea); textarea.sendKeys(gresponse); driver.switchTo().defaultContent(); jse.executeScript("window.scrollBy(0,250)", ""); TimeUnit.SECONDS.sleep(3); submit.sendKeys(Keys.ENTER); TimeUnit.SECONDS.sleep(3); waitForLoad(driver); if (driver.findElements(By.className("m-character-name-alts__name")).size() != 0) { System.out.println("Username In Use - Trying another"); WebElement newUsername = driver.findElement(By.className("m-character-name-alts__name")); account.remove("displayname"); account.addProperty("displayname", newUsername.getText()); newUsername.click(); waitForLoad(driver); submit.sendKeys(Keys.ENTER); TimeUnit.SECONDS.sleep(3); } else if (driver.findElements(By.className("google-recaptcha-error")).size() != 0) { captchaFailed = true; } waitForLoad(driver); if (driver.findElements(By.id("p-account-created")).size() != 0) { created = true; System.out.println("Account Created"); } else { System.out.println("Failed To Create Account - Retrying"); } token = null; } driver.quit(); } private static JsonObject getAccountDetails() throws Exception { String json = readUrl(RANDGEN_URL); JsonParser jsonParser = new JsonParser(); JsonObject firstNameObject = jsonParser.parse(json).getAsJsonObject().getAsJsonArray("results").get(0).getAsJsonObject().getAsJsonObject("name"); String firstNameString = firstNameObject.get("first").getAsString(); JsonObject lastNameObject = jsonParser.parse(json).getAsJsonObject().getAsJsonArray("results").get(0).getAsJsonObject().getAsJsonObject("name"); String lastNameString = lastNameObject.get("last").getAsString(); Random randMail = new Random(); int setMail = randMail.nextInt(90) + 10; String mail = firstNameString + "." + lastNameString + setMail + "@gmail.com"; Random rendpass = new Random(); int setpass = rendpass.nextInt(70) + 10; String PASS_STRING = firstNameString.concat(String.valueOf(setpass)); JsonObject usernames = jsonParser.parse(json).getAsJsonObject().getAsJsonArray("results").get(0).getAsJsonObject().getAsJsonObject("login"); String user = usernames.get("username").getAsString(); if (user.length() > 14) { Random randNum = new Random(); int setNum = randNum.nextInt(90) + 10; user = user.substring(0, Math.min(user.length(), 10)) + setNum; } if (PASS_STRING.length() > 10) { Random randNum = new Random(); int setNum = randNum.nextInt(90) + 10; PASS_STRING = PASS_STRING.substring(0, Math.min(user.length(), 10)) + setNum; } JsonObject account = new JsonObject(); account.addProperty("email", mail); account.addProperty("displayname", user); account.addProperty("password", PASS_STRING); return account; } private static void writeFile(String account) { BufferedWriter writer = null; if (accountFile.exists()) { try(FileWriter fw = new FileWriter(accountFile, true); BufferedWriter bw = new BufferedWriter(fw); PrintWriter out = new PrintWriter(bw)) { out.println(account); } catch (IOException e) { } } else { try { File logFile = new File( "accounts.txt"); writer = new BufferedWriter(new FileWriter(logFile)); writer.write(account + "\r\n"); } catch (Exception e) { e.printStackTrace(); } finally { try { writer.close(); } catch (Exception e) { } } } } private static String readUrl(String urlString) throws Exception { BufferedReader reader = null; try { URL url = new URL(urlString); reader = new BufferedReader(new InputStreamReader(url.openStream())); StringBuilder buffer = new StringBuilder(); char[] chars = new char[1024]; int read; while((read = reader.read(chars)) != -1) { buffer.append(chars, 0, read); } String var7 = buffer.toString(); return var7; } finally { if (reader != null) { reader.close(); } } } } AntiCaptcha Class: import com.anti_captcha.AnticaptchaBase; import com.anti_captcha.Api.NoCaptcha; import com.anti_captcha.Api.NoCaptchaProxyless; import java.net.MalformedURLException; import java.net.URL; public class AntiCaptcha { private static String ANTICAPTCHA_KEY = "YOUR_KEY_HERE"; private String token = null; public String solveCaptcha(String RUNESCAPE_URL) throws MalformedURLException, InterruptedException { NoCaptchaProxyless api = new NoCaptchaProxyless(); api.setClientKey(ANTICAPTCHA_KEY); api.setWebsiteUrl(new URL(RUNESCAPE_URL)); api.setWebsiteKey("6LccFA0TAAAAAHEwUJx_c1TfTBWMTAOIphwTtd1b"); System.out.println("Sending Task To AntiCaptcha"); if (!api.createTask()) { System.out.println(api.getErrorMessage()); } else if (!api.waitForResult()) { System.out.println("Failed To Solve Captcha"); } else { System.out.println("AntiCaptcha Task Complete"); token = api.getTaskSolution().getGRecaptchaResponse(); } return token; } } All libs are in the attached zip, be sure to add the com.anti_captcha library to your src when you compile. I'm running on a mac so if you're on another OS be sure to download the correct version of Chrome Driver and update the following in the AccountCreator class: System.setProperty("webdriver.chrome.driver", "chromedriver"); For example if you downloaded the windows version you would change to this: System.setProperty("webdriver.chrome.driver", "chromedriver.exe"); Also note that the chrome driver file has to be in the same directory as your compiled Jar. You can run this using the following: java -jar YOUR_COMPILED_JAR_NAME.jar Download the libs here: https://www.mediafire.com/file/44z4zl9t7x54hf2/AccountCreatorPackaged.zip/file Can't upload to here them as they're larger than the max size however feel free to source the libs yourself.
  15. Nice release! I'm sure this will come in handy at some point.
  16. I was beginning to think that residential proxy's were in-fact required however I'm currently experiencing success with a new proxy provider. They are not residential proxys and as long as I maintain the same IP from account creation and throughout botting they bypass any locks. My guess is many of you are using Proxy6 or similar providers where they have flagged IP's - no way to know for certain however.
  17. I've been doing some testing over the last week or so and I've noticed a few things. I've been running every IP I use through a service called MaxMind to get insight data about the IP like so: Whenever I have a User Type: hosting for the account creation IP I always experience locks within 20-30 minutes. If this value is residential/cellular/business/traveler/college I am able to bot until banned on that same IP - changing IP always seems to result in a lock. My guess is that Jagex is using a similar service to gather information for new accounts - this is an expensive process so I can't imagine they're doing these checks for every single accounts considering their player base so there may be ways around this - I just haven't found any as of yet.
  18. Have you tried using a WebWalkingEvent? Haven't tested this code but off the top of my head you may be able to do something like this: WebWalkingEvent walkToDestination = new WebWalkingEvent(area); Event event = execute(walkToDestination); if (event.hasFailed()) { // Event failed do something }
  19. Looks good, had a quick look at the source and noticed you'll try and pick from the Cadava bush even if there's no berries to be picked. Here's a snippet that will pick from the closest bush with berries: Entity bush = getObjects().closest(b -> b != null && b.getName().equals("Cadava bush") && b.getModelIds().length > 1); if (bush != null) { if (bush.interact("Pick-from")) { new ConditionalSleep(5000) { @Override public boolean condition() throws InterruptedException { return getInventory.contains("Cadava berries"); } }.sleep(); } }
  20. Maybe if someone put out an official announcement and there was a clear line of communication we wouldn't have these threads - I don't blame these newbs more the admin team for the influx in these threads. A simple bot status page would be easy enough to create and simple enough to maintain - every Thursday it would automatically set the bot status to offline then once the client has been checked/updated a simple press of a button to set the status back to online. Who knows maybe there's even a way to automate it.
  21. Client hasn't been updated yet since yesterdays update.
  22. Client hasn't been updated yet since the update yesterday - you'll need to wait like the rest of us unfortunately.
×
×
  • Create New...