Merge pull request #28 from Parabot/development

[MERGE] Development into master
This commit is contained in:
Jeroen Ketelaar
2017-02-02 23:14:32 +01:00
committed by GitHub
12 changed files with 307 additions and 57 deletions
+10 -1
View File
@@ -3,6 +3,10 @@ package org.parabot.randoms;
import org.parabot.core.Context;
import org.parabot.environment.randoms.Random;
import org.parabot.randoms.dreamscape.SerialBanAvoider;
import org.parabot.randoms.elkoy.AntiDetector;
import org.parabot.randoms.elkoy.LogoutDisabler;
import org.parabot.randoms.elkoy.QuestionSolver;
import org.parabot.randoms.elkoy.MouseOnScreen;
import org.parabot.randoms.pkhonor.*;
import java.util.ArrayList;
@@ -20,11 +24,16 @@ public class Core {
randoms.add(new SandwichLady());
randoms.add(new MysteriousOldMan());
randoms.add(new BobsIsland());
randoms.add(new PacketBlockInterceptor());
// Dreamscape
randoms.add(new SerialBanAvoider());
// Elkoy
//randoms.add(new QuestionSolver());
randoms.add(new LogoutDisabler());
randoms.add(new MouseOnScreen());
randoms.add(new AntiDetector());
org.parabot.core.Core.verbose("Possible randoms:");
for (Random random : randoms) {
if (random.getServer().equalsIgnoreCase(server)) {
@@ -0,0 +1,83 @@
package org.parabot.randoms.elkoy;
import org.parabot.core.Context;
import org.parabot.core.reflect.RefClass;
import org.parabot.core.reflect.RefField;
import org.parabot.environment.api.utils.Time;
import org.parabot.environment.randoms.Random;
import org.parabot.environment.randoms.RandomType;
/**
* @author JKetelaar, Empathy, Ethan
*/
public class AntiDetector implements Random, Runnable {
private boolean activated;
private final String[] toBeNull = {"P", "Q", "N"};
private final String className = "cb";
@Override
public boolean activate() {
return !activated;
}
@Override
public void execute() {
activated = true;
new Thread(this).start();
}
@Override
public String getName() {
return "Anti Bot Detector";
}
@Override
public String getServer() {
return "Elkoy";
}
@Override
public RandomType getRandomType() {
return RandomType.ON_SERVER_START;
}
@Override
public void run() {
while (activated) {
try {
final RefClass refClass = new RefClass(Context.getInstance().getASMClassLoader().loadClass(className));
for (RefField refField : refClass.getFields()) {
if (refField != null) {
if (refClass.isStatic()) {
if (refField.getType().getName().equalsIgnoreCase("boolean")) {
refField.set(false);
} else if (refField.getType().getName().equalsIgnoreCase("int")) {
int i = (int) refField.asObject();
if (i >= 0) {
refField.set(-1);
}
} else if (refField.getType().getName().equalsIgnoreCase("string")) {
String str = (String) refField.asObject();
if (str.length() > 0) {
refField.set(null);
}
}
}
}
}
for (String s : toBeNull) {
refClass.getField(s).set(null);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Time.sleep(25);
}
}
}
@@ -0,0 +1,49 @@
package org.parabot.randoms.elkoy;
import org.parabot.environment.api.utils.Time;
import org.parabot.environment.input.Keyboard;
import org.parabot.environment.randoms.RandomType;
import org.rev317.min.api.methods.Game;
import java.awt.event.KeyEvent;
import java.util.Random;
/**
* @author EmmaStone
*/
public class LogoutDisabler implements org.parabot.environment.randoms.Random {
private final int[] KEYS = {KeyEvent.VK_UP, KeyEvent.VK_DOWN, KeyEvent.VK_LEFT, KeyEvent.VK_RIGHT};
private final Random random = new Random();
private long ms = System.currentTimeMillis();
@Override
public boolean activate() {
return Game.isLoggedIn() && (System.currentTimeMillis() - ms) / 1000 > random.nextInt((50 - 30) + 1) + 30;
}
@Override
public void execute() {
int keyCode = KEYS[random.nextInt(KEYS.length)];
Keyboard.getInstance().pressKey(keyCode);
Time.sleep(random.nextInt((20 - 5) + 1) + 5);
Keyboard.getInstance().releaseKey(keyCode);
ms = System.currentTimeMillis();
}
@Override
public String getName() {
return "Logout Disabler";
}
@Override
public String getServer() {
return "Elkoy";
}
@Override
public RandomType getRandomType() {
return RandomType.SCRIPT;
}
}
@@ -0,0 +1,47 @@
package org.parabot.randoms.elkoy;
import org.parabot.core.Context;
import org.parabot.environment.input.Mouse;
import org.parabot.environment.randoms.Random;
import org.parabot.environment.randoms.RandomType;
import java.awt.*;
/**
* @author JKetelaar, Fryslan
*/
public class MouseOnScreen implements Random {
@Override
public boolean activate() {
return !onScreen();
}
@Override
public void execute() {
int x = org.parabot.environment.api.utils.Random.between(100, Context.getInstance().getApplet().getWidth());
int y = org.parabot.environment.api.utils.Random.between(100, Context.getInstance().getApplet().getHeight());
Mouse.getInstance().moveMouse(x, y);
}
@Override
public String getName() {
return "Mouse on screen";
}
@Override
public String getServer() {
return "Elkoy";
}
@Override
public RandomType getRandomType() {
return RandomType.SCRIPT;
}
private boolean onScreen() {
Point loc = Mouse.getInstance().getPoint();
return Context.getInstance().getApplet().contains(loc);
}
}
@@ -0,0 +1,101 @@
package org.parabot.randoms.elkoy;
import org.json.simple.JSONObject;
import org.json.simple.parser.ParseException;
import org.parabot.api.io.WebUtil;
import org.parabot.core.Context;
import org.parabot.core.ui.Logger;
import org.parabot.environment.api.utils.Time;
import org.parabot.environment.input.Keyboard;
import org.parabot.environment.randoms.Random;
import org.parabot.environment.randoms.RandomType;
import org.parabot.environment.scripts.Script;
import org.parabot.environment.scripts.framework.SleepCondition;
import org.rev317.min.Loader;
import org.rev317.min.api.methods.Game;
import org.rev317.min.api.methods.Interfaces;
import org.rev317.min.api.methods.Menu;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URLEncoder;
/**
* @author EmmaStone
*/
public class QuestionSolver implements Random {
@Override
public boolean activate() {
return Game.isLoggedIn() && Interfaces.getBackDialogId() == 368;
}
@Override
public void execute() {
String message = Loader.getClient().getInterfaceCache()[371].getMessage();
if (!message.contains("otherwise you will be teleported")) {
message = message.replace("@dre@ ", "");
Logger.addMessage("Contacting server to get an answer", false);
String answer = getAnswer(message);
if (answer == null) {
Logger.addMessage("Could not solve the question, please report this question (and the possible answer) on the forums", true);
Logger.addMessage("Question: " + message, true);
forceRelog();
Logger.addMessage("Logged account out for security measures", true);
Context.getInstance().getRunningScript().setState(Script.STATE_STOPPED);
} else {
Logger.addMessage("Answer found, now trying: " + answer, false);
Menu.sendAction(679, -1, -1, 373);
Time.sleep(1000);
Keyboard.getInstance().sendKeys(answer);
}
}
Time.sleep(1000);
}
private String getAnswer(String question) {
try {
JSONObject object = (JSONObject) WebUtil.getJsonParser().parse(WebUtil.getContents("http://bdn.parabot.org/api/v2/data/questions/get",
"server=ikov&question=" + URLEncoder.encode(question, "UTF-8"))); //TODO Implement BDN V3
JSONObject result;
if ((result = (JSONObject) object.get("result")) != null) {
Object answer;
if ((answer = result.get("answer")) != null) {
return (String) answer;
}
}
} catch (MalformedURLException | UnsupportedEncodingException | ParseException e) {
e.printStackTrace();
}
return null;
}
private void forceRelog() {
Logger.addMessage("Logging out...", false);
Loader.getClient().dropClient();
Time.sleep(new SleepCondition() {
@Override
public boolean isValid() {
return !Game.isLoggedIn();
}
}, 5000);
}
@Override
public String getName() {
return "Question Solver";
}
@Override
public String getServer() {
return "Elkoy";
}
@Override
public RandomType getRandomType() {
return RandomType.SCRIPT;
}
}
@@ -20,6 +20,7 @@ public class BanFile implements Random {
return true;
}
}
return false;
}
@@ -30,7 +31,6 @@ public class BanFile implements Random {
banfile.delete();
}
}
}
@Override
@@ -55,6 +55,7 @@ public class BanFile implements Random {
return true;
}
}
return false;
}
}
@@ -16,9 +16,6 @@ public class BobsIsland implements Random {
private static final Tile center = new Tile(2525, 4777);
private static final int portalId = 8987;
public BobsIsland() {
}
@Override
public boolean activate() {
return center.distanceTo() < 25;
@@ -27,6 +27,7 @@ public class Jail implements Random {
this.jailer = getJailer();
return true;
}
return false;
} catch (Exception e) {
return false;
@@ -91,6 +92,7 @@ public class Jail implements Random {
return jailer;
}
}
return null;
}
@@ -100,6 +102,7 @@ public class Jail implements Random {
return rock;
}
}
return null;
}
@@ -41,6 +41,7 @@ public class MysteriousOldMan implements Random {
return man;
}
}
return null;
}
@@ -1,47 +0,0 @@
package org.parabot.randoms.pkhonor;
import org.parabot.core.reflect.RefClass;
import org.parabot.core.reflect.RefField;
import org.parabot.environment.randoms.Random;
import org.parabot.environment.randoms.RandomType;
import org.rev317.min.Loader;
/**
* @author EmmaStone
*/
public class PacketBlockInterceptor implements Random {
@Override
public boolean activate() {
return !getField();
}
@Override
public void execute() {
setField();
}
private boolean getField() {
return new RefClass(Loader.getClient()).getField("PG").asBoolean();
}
private void setField() {
RefField refField = new RefClass(Loader.getClient()).getField("PG");
refField.set(true);
}
@Override
public String getName() {
return "Packet Block Interceptor";
}
@Override
public String getServer() {
return "pkhonor";
}
@Override
public RandomType getRandomType() {
return RandomType.SCRIPT;
}
}
@@ -41,6 +41,7 @@ public class SandwichLady implements Random {
return lady;
}
}
return null;
}
@@ -17,23 +17,28 @@ public class TriangleSandwich implements Random {
@Override
public boolean activate() {
for (Item i : Inventory.getItems(id)) {
if (i != null) {
this.item = i;
return true;
if (Inventory.getItems() != null) {
for (Item i : Inventory.getItems(id)) {
if (i != null) {
this.item = i;
return true;
}
}
}
return false;
}
@Override
public void execute() {
if (this.item != null) {
final int sandwich = Inventory.getCount(id);
item.drop();
Time.sleep(new SleepCondition() {
@Override
public boolean isValid() {
return Inventory.getCount(id) == 0;
return Inventory.getCount(id) != sandwich;
}
}, 1500);
}