From 654f40f7f6fc74e4cf425453d19dfc7ef6f428cf Mon Sep 17 00:00:00 2001
From: Harry <37844423+HSJ-OSRS@users.noreply.github.com>
Date: Mon, 30 Sep 2019 13:19:51 +0100
Subject: [PATCH 1/9] slayer: fix task tracking & bracelet tracking (#1691)
* fix task tracking
* fix slayer bracelet tracking
---
.../plugins/itemcharges/ItemChargePlugin.java | 56 ++++++++++---------
.../client/plugins/slayer/SlayerPlugin.java | 35 +++---------
2 files changed, 37 insertions(+), 54 deletions(-)
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java
index 96aaf49328..601728dd0e 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java
@@ -76,16 +76,18 @@ public class ItemChargePlugin extends Plugin
{
private static final Pattern DODGY_CHECK_PATTERN = Pattern.compile(
"Your dodgy necklace has (\\d+) charges? left\\.");
- private static final Pattern SLAUGHTER_CHECK_PATTERN = Pattern.compile(
+ private static final String CHAT_BRACELET_SLAUGHTER = "Your bracelet of slaughter prevents your slayer";
+ private static final Pattern CHAT_BRACELET_SLAUGHTER_REGEX = Pattern.compile(
+ "Your bracelet of slaughter prevents your slayer count decreasing. It has (\\d{1,2}) charge[s]? left.");
+ private static final String CHAT_BRACELET_EXPEDITIOUS = "Your expeditious bracelet helps you progress your";
+ private static final Pattern CHAT_BRACELET_EXPEDITIOUS_REGEX = Pattern.compile(
+ "Your expeditious bracelet helps you progress your slayer (?:task )?faster. It has (\\d{1,2}) charge[s]? left.");
+ private static final Pattern CHAT_BRACELET_SLAUGHTER_CHARGE_REGEX = Pattern.compile(
"Your bracelet of slaughter has (\\d{1,2}) charge[s]? left.");
- private static final Pattern EXPEDITIOUS_CHECK_PATTERN = Pattern.compile(
+ private static final Pattern CHAT_BRACELET_EXPEDITIOUS_CHARGE_REGEX = Pattern.compile(
"Your expeditious bracelet has (\\d{1,2}) charge[s]? left.");
private static final Pattern DODGY_PROTECT_PATTERN = Pattern.compile(
"Your dodgy necklace protects you\\..*It has (\\d+) charges? left\\.");
- private static final Pattern SLAUGHTER_ACTIVATE_PATTERN = Pattern.compile(
- "Your bracelet of slaughter prevents your slayer count decreasing. It has (\\d{1,2}) charge[s]? left.");
- private static final Pattern EXPEDITIOUS_ACTIVATE_PATTERN = Pattern.compile(
- "Your expeditious bracelet helps you progress your slayer (?:task )?faster. It has (\\d{1,2}) charge[s]? left.");
private static final Pattern DODGY_BREAK_PATTERN = Pattern.compile(
"Your dodgy necklace protects you\\..*It then crumbles to dust\\.");
private static final String RING_OF_RECOIL_BREAK_MESSAGE = "
Your Ring of Recoil has shattered.";
@@ -331,11 +333,7 @@ public class ItemChargePlugin extends Plugin
{
String message = event.getMessage();
Matcher dodgyCheckMatcher = DODGY_CHECK_PATTERN.matcher(message);
- Matcher slaughterCheckMatcher = SLAUGHTER_CHECK_PATTERN.matcher(message);
- Matcher expeditiousCheckMatcher = EXPEDITIOUS_CHECK_PATTERN.matcher(message);
Matcher dodgyProtectMatcher = DODGY_PROTECT_PATTERN.matcher(message);
- Matcher slaughterActivateMatcher = SLAUGHTER_ACTIVATE_PATTERN.matcher(message);
- Matcher expeditiousActivateMatcher = EXPEDITIOUS_ACTIVATE_PATTERN.matcher(message);
Matcher dodgyBreakMatcher = DODGY_BREAK_PATTERN.matcher(message);
Matcher bindingNecklaceCheckMatcher = BINDING_CHECK_PATTERN.matcher(event.getMessage());
Matcher bindingNecklaceUsedMatcher = BINDING_USED_PATTERN.matcher(event.getMessage());
@@ -347,6 +345,10 @@ public class ItemChargePlugin extends Plugin
Matcher chronicleLastChargeMatcher = CHRONICLE_LAST_CHARGE_PATTERN.matcher(message);
Matcher chronicleOutOfChargesMatcher = CHRONICLE_OUT_OF_CHARGES_PATTERN.matcher(message);
Matcher ringOfForgingCheckMatcher = RING_OF_FORGING_CHECK_PATTERN.matcher(message);
+ Matcher slaughterMatcher = CHAT_BRACELET_SLAUGHTER_REGEX.matcher(Text.removeTags(message));
+ Matcher expeditiousMatcher = CHAT_BRACELET_EXPEDITIOUS_REGEX.matcher(Text.removeTags(message));
+ Matcher slaughterChargeMatcher = CHAT_BRACELET_SLAUGHTER_CHARGE_REGEX.matcher(Text.removeTags(message));
+ Matcher expeditiousChargeMatcher = CHAT_BRACELET_EXPEDITIOUS_CHARGE_REGEX.matcher(Text.removeTags(message));
if (event.getType() == ChatMessageType.GAMEMESSAGE || event.getType() == ChatMessageType.SPAM)
{
@@ -354,30 +356,30 @@ public class ItemChargePlugin extends Plugin
{
notifier.notify("Your Ring of Recoil has shattered");
}
+ else if (Text.removeTags(message).startsWith(CHAT_BRACELET_SLAUGHTER))
+ {
+ updateBraceletOfSlaughterCharges(slaughterMatcher.find() ? Integer.parseInt(slaughterMatcher.group(1)) : MAX_SLAUGHTER_CHARGES);
+ }
+ else if (Text.removeTags(message).startsWith(CHAT_BRACELET_EXPEDITIOUS))
+ {
+ updateExpeditiousCharges(expeditiousMatcher.find() ? Integer.parseInt(expeditiousMatcher.group(1)) : MAX_EXPEDITIOUS_CHARGES);
+ }
+ else if (slaughterChargeMatcher.find())
+ {
+ updateBraceletOfSlaughterCharges(Integer.parseInt(slaughterChargeMatcher.group(1)));
+ }
+ else if (expeditiousChargeMatcher.find())
+ {
+ updateExpeditiousCharges(Integer.parseInt(expeditiousChargeMatcher.group(1)));
+ }
else if (dodgyCheckMatcher.find())
{
updateDodgyNecklaceCharges(Integer.parseInt(dodgyCheckMatcher.group(1)));
}
- else if (slaughterCheckMatcher.find())
- {
- updateBraceletOfSlaughterCharges(Integer.parseInt(slaughterCheckMatcher.group(1)));
- }
- else if (expeditiousCheckMatcher.find())
- {
- updateExpeditiousCharges(Integer.parseInt(expeditiousCheckMatcher.group(1)));
- }
else if (dodgyProtectMatcher.find())
{
updateDodgyNecklaceCharges(Integer.parseInt(dodgyProtectMatcher.group(1)));
}
- else if (slaughterActivateMatcher.find())
- {
- updateBraceletOfSlaughterCharges(Integer.parseInt(slaughterActivateMatcher.group(1)));
- }
- else if (expeditiousActivateMatcher.find())
- {
- updateExpeditiousCharges(Integer.parseInt(expeditiousActivateMatcher.group(1)));
- }
else if (dodgyBreakMatcher.find())
{
if (this.dodgyNotification)
@@ -955,4 +957,4 @@ public class ItemChargePlugin extends Plugin
this.chronicle = config.chronicle();
this.showSackCharges = config.showSackCharges();
}
-}
\ No newline at end of file
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java
index 157891f502..b886982b4a 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java
@@ -393,8 +393,7 @@ public class SlayerPlugin extends Plugin
currentTask.setPaused(true);
break;
case LOGGED_IN:
- if (loginTick && this.amount != -1
- && !this.taskName.isEmpty())
+ if (loginTick && this.amount != -1 && !this.taskName.isEmpty() && currentTask.getTaskName() == null)
{
setTask(this.taskName, this.amount, this.initialAmount, true, this.taskLocation, this.lastCertainAmount, false);
}
@@ -753,6 +752,7 @@ public class SlayerPlugin extends Plugin
}
final Task task = Task.getTask(taskName);
+ int delta = slayerExp - cachedXp;
// null tasks are technically valid, it only means they arent explicitly defined in the Task enum
// allow them through so that if there is a task capture failure the counter will still work
@@ -762,7 +762,7 @@ public class SlayerPlugin extends Plugin
// to the expected exp gain for the task.
if (taskKillExp == 0 || taskKillExp == slayerExp - cachedXp)
{
- killedOne();
+ killedOne(delta);
}
else
{
@@ -780,9 +780,7 @@ public class SlayerPlugin extends Plugin
int killCount = estimateKillCount(potentialNPCs, gains);
for (int i = 0; i < killCount; i++)
{
- killedOne();
- int delta = slayerExp - cachedXp;
- currentTask.setElapsedXp(currentTask.getElapsedXp() + delta);
+ killedOne(delta);
}
}
@@ -840,7 +838,7 @@ public class SlayerPlugin extends Plugin
}
@VisibleForTesting
- private void killedOne()
+ private void killedOne(int delta)
{
if (currentTask.getAmount() == 0)
{
@@ -849,6 +847,7 @@ public class SlayerPlugin extends Plugin
currentTask.setAmount(currentTask.getAmount() - 1);
currentTask.setElapsedKills(currentTask.getElapsedKills() + 1);
+ currentTask.setElapsedXp(currentTask.getElapsedXp() + delta);
if (doubleTroubleExtraKill())
{
currentTask.setAmount(currentTask.getAmount() - 1);
@@ -1208,31 +1207,13 @@ public class SlayerPlugin extends Plugin
client.refreshChat();
}
- void pointsLookup(ChatMessage chatMessage, String message)
+ private void pointsLookup(ChatMessage chatMessage, String message)
{
if (!this.pointsCommand)
{
return;
}
- ChatMessageType type = chatMessage.getType();
-
- final String player;
- if (type.equals(ChatMessageType.PRIVATECHATOUT))
- {
- player = client.getLocalPlayer().getName();
- }
- else
- {
- player = Text.removeTags(chatMessage.getName())
- .replace('\u00A0', ' ');
- }
-
- if (Integer.toString(getPoints()) == null)
- {
- return;
- }
-
String response = new ChatMessageBuilder()
.append(ChatColorType.NORMAL)
.append("Slayer Points: ")
@@ -1313,7 +1294,7 @@ public class SlayerPlugin extends Plugin
return str.substring(0, 1).toUpperCase() + str.substring(1);
}
- void setPoints(int points)
+ private void setPoints(int points)
{
this.points = points;
this.cachedPoints = points;
From 6213eb84f5cd8060232d1cca4d14b2652d2f7852 Mon Sep 17 00:00:00 2001
From: Owain van Brakel
Date: Mon, 30 Sep 2019 14:20:11 +0200
Subject: [PATCH 2/9] gradle: gamepackUpdate (#1690)
---
deobfuscator/build.gradle | 67 +++++++
.../src/main/java/net/runelite/deob/Deob.java | 4 +-
.../deob/clientver/ClientVersionMain.java | 21 +++
.../runelite/deob/updater/UpdateMappings.java | 2 +-
.../java/net/runelite/gamepack/Checker.java | 166 ++++++++++++++++++
.../net/runelite/gamepack/Downloader.java | 61 +++++++
.../net/runelite/gamepack/URLDownloader.java | 35 ++++
7 files changed, 353 insertions(+), 3 deletions(-)
create mode 100644 deobfuscator/src/main/java/net/runelite/gamepack/Checker.java
create mode 100644 deobfuscator/src/main/java/net/runelite/gamepack/Downloader.java
create mode 100644 deobfuscator/src/main/java/net/runelite/gamepack/URLDownloader.java
diff --git a/deobfuscator/build.gradle b/deobfuscator/build.gradle
index 177d98c81a..0d61c904d6 100644
--- a/deobfuscator/build.gradle
+++ b/deobfuscator/build.gradle
@@ -1,4 +1,8 @@
import org.apache.tools.ant.filters.ReplaceTokens
+import org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler
+import java.nio.file.Files
+import java.nio.file.Paths
+import java.util.zip.ZipFile
plugins {
id "com.github.hauner.jarTest" version "1.0.1"
@@ -6,6 +10,30 @@ plugins {
description = 'Deobfuscator'
+def deobfuscatedJar = "${rootPath}/runescape-client/build/libs/rs-client-${project.version}.jar"
+
+def unzipFile(String file, String dest)
+{
+ def zipFile = new ZipFile(file)
+
+ zipFile.entries().each { it ->
+ def path = Paths.get(dest + File.separator + it.name)
+ if (it.directory)
+ {
+ Files.createDirectories(path)
+ }
+ else
+ {
+ def parentDir = path.getParent()
+ if (!Files.exists(parentDir))
+ {
+ Files.createDirectories(parentDir)
+ }
+ Files.copy(zipFile.getInputStream(it), path)
+ }
+ }
+}
+
configurations {
deobjars
}
@@ -48,3 +76,42 @@ processTestResources {
])
}
}
+
+task gamepackUpdate {
+ dependsOn ":deobfuscator:build"
+ dependsOn ":rs-client:build"
+
+ doLast {
+ def path = sourceSets.main.runtimeClasspath
+ def loader = new URLClassLoader(path.collect { f -> f.toURI().toURL() } as URL[])
+ def downloader = loader.loadClass('net.runelite.gamepack.Downloader')
+ def clientVersion = loader.loadClass('net.runelite.deob.clientver.ClientVersionMain')
+ def deob = loader.loadClass('net.runelite.deob.Deob')
+ def mappings = loader.loadClass('net.runelite.deob.updater.UpdateMappings')
+
+ String gamepack = downloader.gamepack()
+ int version = clientVersion.version(gamepack)
+
+ String gamepackVersion = gamepack.replace("gamepack.jar", "gamepack-" + version + ".jar")
+ String gamepackDeob = gamepack.replace("gamepack.jar", "gamepack-" + version + "-deob.jar")
+ String gamepackMappings = gamepack.replace("gamepack.jar", "gamepack-" + version + "-updated-mappings.jar")
+ String gamepackMappingsDecomp = gamepackMappings.replace(".jar", "-decomp")
+ String gamepackMappingsFern = gamepackMappingsDecomp + File.separator + gamepackMappings.split("/gamepack/")[1]
+
+ if (version == -1 || version == rsversion)
+ {
+ return
+ }
+
+ deob.main(gamepackVersion, gamepackDeob)
+ mappings.main(deobfuscatedJar, gamepackDeob, gamepackMappings)
+
+ new File(gamepackMappingsDecomp).mkdirs()
+ ConsoleDecompiler.main(gamepackMappings, gamepackMappingsDecomp)
+
+ unzipFile(gamepackMappingsFern, gamepackMappingsDecomp)
+ new File(gamepackMappingsFern).delete()
+
+ loader.close()
+ }
+}
diff --git a/deobfuscator/src/main/java/net/runelite/deob/Deob.java b/deobfuscator/src/main/java/net/runelite/deob/Deob.java
index bea8f623d3..06b9b176dc 100644
--- a/deobfuscator/src/main/java/net/runelite/deob/Deob.java
+++ b/deobfuscator/src/main/java/net/runelite/deob/Deob.java
@@ -30,8 +30,6 @@ import java.io.IOException;
import net.runelite.asm.ClassGroup;
import net.runelite.asm.execution.Execution;
import net.runelite.deob.deobfuscators.CastNull;
-import net.runelite.deob.deobfuscators.StaticShouldBeInstance;
-import net.runelite.deob.deobfuscators.constparam.ConstantParameter;
import net.runelite.deob.deobfuscators.EnumDeobfuscator;
import net.runelite.deob.deobfuscators.FieldInliner;
import net.runelite.deob.deobfuscators.IllegalStateExceptions;
@@ -39,6 +37,7 @@ import net.runelite.deob.deobfuscators.Lvt;
import net.runelite.deob.deobfuscators.Order;
import net.runelite.deob.deobfuscators.RenameUnique;
import net.runelite.deob.deobfuscators.RuntimeExceptions;
+import net.runelite.deob.deobfuscators.StaticShouldBeInstance;
import net.runelite.deob.deobfuscators.UnreachedCode;
import net.runelite.deob.deobfuscators.UnusedClass;
import net.runelite.deob.deobfuscators.UnusedFields;
@@ -49,6 +48,7 @@ import net.runelite.deob.deobfuscators.arithmetic.MultiplicationDeobfuscator;
import net.runelite.deob.deobfuscators.arithmetic.MultiplyOneDeobfuscator;
import net.runelite.deob.deobfuscators.arithmetic.MultiplyZeroDeobfuscator;
import net.runelite.deob.deobfuscators.cfg.ControlFlowDeobfuscator;
+import net.runelite.deob.deobfuscators.constparam.ConstantParameter;
import net.runelite.deob.deobfuscators.exprargorder.ExprArgOrder;
import net.runelite.deob.deobfuscators.menuaction.MenuActionDeobfuscator;
import net.runelite.deob.deobfuscators.transformers.ClientErrorTransformer;
diff --git a/deobfuscator/src/main/java/net/runelite/deob/clientver/ClientVersionMain.java b/deobfuscator/src/main/java/net/runelite/deob/clientver/ClientVersionMain.java
index 5b16f13bc7..9b22c68308 100644
--- a/deobfuscator/src/main/java/net/runelite/deob/clientver/ClientVersionMain.java
+++ b/deobfuscator/src/main/java/net/runelite/deob/clientver/ClientVersionMain.java
@@ -25,6 +25,7 @@
package net.runelite.deob.clientver;
+import com.google.common.io.Files;
import java.io.File;
import java.io.IOException;
@@ -36,4 +37,24 @@ public class ClientVersionMain
ClientVersion cv = new ClientVersion(jar);
System.out.println(cv.getVersion());
}
+
+ public static int version(String loc)
+ {
+ File jar = new File(loc);
+ ClientVersion cv = new ClientVersion(jar);
+ try
+ {
+ int version = cv.getVersion();
+
+ Files.move(jar, new File(loc.replace("gamepack.jar", "gamepack-" + version + ".jar")));
+
+ return version;
+ }
+ catch (IOException e)
+ {
+ e.printStackTrace();
+ }
+
+ return -1;
+ }
}
diff --git a/deobfuscator/src/main/java/net/runelite/deob/updater/UpdateMappings.java b/deobfuscator/src/main/java/net/runelite/deob/updater/UpdateMappings.java
index 0514ae7afa..456eef2c8f 100644
--- a/deobfuscator/src/main/java/net/runelite/deob/updater/UpdateMappings.java
+++ b/deobfuscator/src/main/java/net/runelite/deob/updater/UpdateMappings.java
@@ -96,7 +96,7 @@ public class UpdateMappings
JarUtil.loadJar(new File(args[0])),
JarUtil.loadJar(new File(args[1]))
);
- u.update();
+ u.update();
u.save(new File(args[2]));
}
}
diff --git a/deobfuscator/src/main/java/net/runelite/gamepack/Checker.java b/deobfuscator/src/main/java/net/runelite/gamepack/Checker.java
new file mode 100644
index 0000000000..cf36651cef
--- /dev/null
+++ b/deobfuscator/src/main/java/net/runelite/gamepack/Checker.java
@@ -0,0 +1,166 @@
+package net.runelite.gamepack;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+
+public class Checker
+{
+ private static final String GAME_URL = "http://oldschool1.runescape.com/";
+ private static final Split[] splits = {
+ new Split("document.write('archive=", 1),
+ new Split(" ');", 0)
+ };
+
+ static String getGamePack()
+ {
+ URL url;
+ try
+ {
+ url = new URL(GAME_URL);
+ }
+ catch (MalformedURLException e)
+ {
+ e.printStackTrace();
+ return null;
+ }
+
+ String content;
+ try
+ {
+ content = getContent(url);
+ }
+ catch (IOException e)
+ {
+ e.printStackTrace();
+ return null;
+ }
+
+ for (Split split : splits)
+ {
+ String[] str = splitAtFirst(content, split.splitAt);
+ content = str[split.index];
+ }
+
+ return content;
+ }
+
+ private static String[] splitAtFirst(String subject, String splitAt)
+ {
+ if (subject == null || subject.length() == 0)
+ {
+ return new String[]{"", ""};
+ }
+
+ if (splitAt == null || splitAt.length() == 0)
+ {
+ return new String[]{subject, ""};
+ }
+
+ char[] subjectArray = subject.toCharArray();
+ char[] split = splitAt.toCharArray();
+
+ StringBuilder builder = null;
+ for (int i = 0; i < subjectArray.length; i++)
+ {
+ char c = subjectArray[i];
+
+ if (builder == null && c == split[0])
+ {
+ builder = new StringBuilder();
+ }
+
+ if (builder != null)
+ {
+ builder.append(c);
+
+ if (startsWith(splitAt, builder.toString()))
+ {
+ if (builder.length() == splitAt.length())
+ {
+ return new String[]{subject.substring(0, i - builder.length() + 1), subject.substring(i + 1)};
+ }
+ }
+ else
+ {
+ builder = null;
+ }
+ }
+ }
+
+ return new String[]{subject, ""};
+ }
+
+ private static boolean startsWith(String subject, String start)
+ {
+ if (subject == null || subject.length() == 0 || start == null || start.length() == 0 || start.length() > subject.length())
+ {
+ return false;
+ }
+
+ char[] c1 = subject.toCharArray();
+ char[] c2 = start.toCharArray();
+ for (int i = 0; i < c2.length; i++)
+ {
+ if (c1[i] != c2[i])
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ private static String getContent(URL url) throws IOException
+ {
+ BufferedReader rd = null;
+
+ try
+ {
+ URLConnection conn = url.openConnection();
+
+ if (conn instanceof HttpURLConnection)
+ {
+ ((HttpURLConnection) conn).setInstanceFollowRedirects(false);
+ }
+
+ HttpURLConnection.setFollowRedirects(false);
+
+ rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
+ StringBuilder sb = new StringBuilder();
+
+ String line;
+ while ((line = rd.readLine()) != null)
+ {
+ sb.append(line);
+ sb.append('\n');
+ }
+
+ return sb.toString();
+
+ }
+ finally
+ {
+ if (rd != null)
+ {
+ rd.close();
+ }
+ }
+ }
+
+ public static class Split
+ {
+ public int index;
+ String splitAt;
+
+ Split(String splitAt, int index)
+ {
+ this.splitAt = splitAt;
+ this.index = index;
+ }
+ }
+}
\ No newline at end of file
diff --git a/deobfuscator/src/main/java/net/runelite/gamepack/Downloader.java b/deobfuscator/src/main/java/net/runelite/gamepack/Downloader.java
new file mode 100644
index 0000000000..350454ac8b
--- /dev/null
+++ b/deobfuscator/src/main/java/net/runelite/gamepack/Downloader.java
@@ -0,0 +1,61 @@
+package net.runelite.gamepack;
+
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+public class Downloader
+{
+ private static final String REPLACE = "%archive%";
+ private static final String GAMEPACK_URL = "http://oldschool1.runescape.com/" + REPLACE;
+
+ private static String getGamepackUrl()
+ {
+ String archive = Checker.getGamePack();
+ return archive == null ? "" : GAMEPACK_URL.replace(REPLACE, archive);
+ }
+
+ public static String gamepack()
+ {
+ Path path = Paths.get(System.getProperty("user.home"), "gamepack");
+ final File folder = new File(String.valueOf(path));
+
+ if (!folder.exists())
+ {
+ folder.mkdir();
+ }
+
+ downloadLatest(folder);
+
+ return path + File.separator + "gamepack.jar";
+ }
+
+ private static void downloadLatest(File folder)
+ {
+ File output = new File(folder, "gamepack.jar");
+
+ try
+ {
+ URL url = new URL(getGamepackUrl());
+
+ final URLDownloader downloader = new URLDownloader(url, output);
+ downloader.download();
+
+ try
+ {
+ Thread.sleep(100);
+ }
+ catch (InterruptedException e)
+ {
+ e.printStackTrace();
+ }
+ }
+ catch (IOException e)
+ {
+ e.printStackTrace();
+ }
+ }
+}
\ No newline at end of file
diff --git a/deobfuscator/src/main/java/net/runelite/gamepack/URLDownloader.java b/deobfuscator/src/main/java/net/runelite/gamepack/URLDownloader.java
new file mode 100644
index 0000000000..07d74fcf70
--- /dev/null
+++ b/deobfuscator/src/main/java/net/runelite/gamepack/URLDownloader.java
@@ -0,0 +1,35 @@
+package net.runelite.gamepack;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.net.URL;
+import java.nio.channels.Channels;
+import java.nio.channels.FileChannel;
+import java.nio.channels.ReadableByteChannel;
+
+class URLDownloader
+{
+ private URL url;
+ private File output;
+
+ URLDownloader(URL url, File output)
+ {
+ this.url = url;
+ this.output = output;
+ }
+
+ void download() throws IOException
+ {
+ this.downloadFromURL();
+ }
+
+ private void downloadFromURL() throws IOException
+ {
+ ReadableByteChannel rbc = Channels.newChannel(url.openStream());
+ FileOutputStream fos = new FileOutputStream(output);
+
+ FileChannel channel = fos.getChannel();
+ channel.transferFrom(rbc, 0, Long.MAX_VALUE);
+ }
+}
\ No newline at end of file
From 9f869c6ec98b504edd05a68360fb3b18bc06368a Mon Sep 17 00:00:00 2001
From: ST0NEWALL <46624825+pklite@users.noreply.github.com>
Date: Mon, 30 Sep 2019 08:20:28 -0400
Subject: [PATCH 3/9] Fix player attack options and player indicators (#1685)
* Fix player attack options and player indicators
* player attack options
* buying checkstyle bypass method
---
.../asm/attributes/code/instructions/VReturn.java | 1 +
.../main/java/net/runelite/injector/Inject.java | 4 ++--
.../runelite/injector/raw/HidePlayerAttacks.java | 15 ++++++---------
.../playerindicators/PlayerIndicatorsOverlay.java | 11 ++++++-----
.../WildernessLocationsMapOverlay.java | 2 +-
5 files changed, 16 insertions(+), 17 deletions(-)
diff --git a/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/VReturn.java b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/VReturn.java
index 132337a4f9..9b57fa240a 100644
--- a/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/VReturn.java
+++ b/deobfuscator/src/main/java/net/runelite/asm/attributes/code/instructions/VReturn.java
@@ -49,6 +49,7 @@ public class VReturn extends Instruction implements ReturnInstruction
public InstructionContext execute(Frame frame)
{
InstructionContext ins = new InstructionContext(this, frame);
+
frame.stop();
diff --git a/injector-plugin/src/main/java/net/runelite/injector/Inject.java b/injector-plugin/src/main/java/net/runelite/injector/Inject.java
index 6dd0a7f35d..9d9b372f07 100644
--- a/injector-plugin/src/main/java/net/runelite/injector/Inject.java
+++ b/injector-plugin/src/main/java/net/runelite/injector/Inject.java
@@ -56,9 +56,9 @@ import net.runelite.mapping.Import;
import net.runelite.rs.api.RSClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import net.runelite.injector.raw.HidePlayerAttacks;
// import net.runelite.injector.raw.DrawMenu;
-// import net.runelite.injector.raw.HidePlayerAttacks;
public class Inject
{
@@ -319,7 +319,7 @@ public class Inject
new RenderDraw(this).inject();
// new DrawMenu(this).inject();
new Occluder(this).inject();
- // new HidePlayerAttacks(this).inject();
+ new HidePlayerAttacks(this).inject();
}
private java.lang.Class injectInterface(ClassFile cf, ClassFile other)
diff --git a/injector-plugin/src/main/java/net/runelite/injector/raw/HidePlayerAttacks.java b/injector-plugin/src/main/java/net/runelite/injector/raw/HidePlayerAttacks.java
index e4160e7519..8d15fd69d2 100644
--- a/injector-plugin/src/main/java/net/runelite/injector/raw/HidePlayerAttacks.java
+++ b/injector-plugin/src/main/java/net/runelite/injector/raw/HidePlayerAttacks.java
@@ -160,6 +160,7 @@ public class HidePlayerAttacks
// add option n such
Instructions ins = addPlayerOptions.getCode().getInstructions();
+ log.info(String.valueOf(ins.getInstructions().size()));
ListIterator iterator = ins.getInstructions().listIterator();
while (iterator.hasNext())
{
@@ -169,22 +170,18 @@ public class HidePlayerAttacks
continue;
}
- i = iterator.next();
- while (!(i instanceof BiPush) || (byte) ((BiPush) i).getConstant() != 8)
- {
- i = iterator.next();
- }
-
i = iterator.next();
if (!(i instanceof IAnd))
{
- throw new InjectionException("Yikes I didn't expect this");
+ continue;
+ /*log.info(i.getClass().getName() + i.getClass().getSuperclass() + i.getType().getName() +
+ i.getType().getInstructionClass() + i.getInstructions() + i.toString());
+ throw new InjectionException("Yikes I didn't expect this");**/
}
- i = iterator.next();
if (!(i instanceof IfICmpNe))
{
- throw new InjectionException("Yikes I didn't expect this");
+ continue;
}
Label target = ((IfICmpNe) i).getJumps().get(0);
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsOverlay.java
index 4e96aa08b8..a3ceee1087 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsOverlay.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsOverlay.java
@@ -31,7 +31,6 @@ import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.util.Arrays;
import java.util.List;
-import java.util.Objects;
import javax.inject.Inject;
import javax.inject.Singleton;
import lombok.extern.slf4j.Slf4j;
@@ -124,10 +123,12 @@ public class PlayerIndicatorsOverlay extends Overlay
{
if (clanManager.getRank(actor.getName()) != null)
{
- OverlayUtil.renderActorTextAndImage(graphics, actor, builtString, color,
- ImageUtil.resizeImage(Objects.requireNonNull(clanManager
- .getClanImage(clanManager.getRank(actor.getName()))), y, y), 0, ACTOR_HORIZONTAL_TEXT_MARGIN);
- return;
+ final BufferedImage clanRankImage = clanManager.getClanImage(clanManager.getRank(actor.getName()));
+ if (clanRankImage != null)
+ {
+ OverlayUtil.renderActorTextAndImage(graphics, actor, builtString, color,
+ ImageUtil.resizeImage(clanRankImage, y, y), 0, ACTOR_HORIZONTAL_TEXT_MARGIN);
+ }
}
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/wildernesslocations/WildernessLocationsMapOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/wildernesslocations/WildernessLocationsMapOverlay.java
index cbf56934e0..d264cf4451 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/wildernesslocations/WildernessLocationsMapOverlay.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/wildernesslocations/WildernessLocationsMapOverlay.java
@@ -37,7 +37,7 @@ public class WildernessLocationsMapOverlay extends Overlay
{
setPosition(OverlayPosition.DYNAMIC);
setPriority(OverlayPriority.HIGH);
- setLayer(OverlayLayer.ALWAYS_ON_TOP);
+ setLayer(OverlayLayer.ABOVE_MAP);
this.client = client;
this.plugin = plugin;
}
From e6ed2190f7061189ec3456ef2f4ac36d39a3a63a Mon Sep 17 00:00:00 2001
From: Ganom
Date: Tue, 1 Oct 2019 00:08:17 +0000
Subject: [PATCH 4/9] project: Update gradle dependencies
---
build.gradle | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/build.gradle b/build.gradle
index f02c82d723..54bebd6724 100644
--- a/build.gradle
+++ b/build.gradle
@@ -32,7 +32,7 @@ ext {
apacheCommonsCompress = '1.19'
apacheCommonsCsv = '1.7'
apacheCommonsText = '1.8'
- asm = '7.1'
+ asm = '7.2'
commonsCli = '1.4'
discord = '1.1'
fernflower = '07082019'
@@ -43,7 +43,7 @@ ext {
h2 = '1.4.199'
hamcrest = '2.1'
httpcore = '4.4.12'
- httpmime = '4.5.9'
+ httpmime = '4.5.10'
javassist = '3.25.0-GA'
javax = '1.3.2'
javaxInject = '1'
@@ -59,7 +59,7 @@ ext {
jupiter = '5.5.2'
logback = '1.2.3'
lombok = '1.18.10'
- mapstruct = '1.3.0.Final'
+ mapstruct = '1.3.1.Final'
mariadbJdbc = '2.4.4'
mavenPluginAnnotations = '3.6.0'
mavenPluginApi = '3.6.2'
@@ -67,7 +67,7 @@ ext {
mockito = '3.0.0'
mongodbDriverSync = '3.11.0'
mysqlConnectorJava = '8.0.17'
- netty = '4.1.39.Final'
+ netty = '4.1.42.Final'
okhttp3 = '4.2.0'
orangeExtensions = '1.0'
petitparser = '2.2.0'
@@ -77,7 +77,7 @@ ext {
scribejava = '6.8.1'
sisu = '0.3.3'
slf4j = '1.7.28'
- springJdbc = '5.1.9.RELEASE'
+ springJdbc = '5.2.0.RELEASE'
springboot = '2.1.8.RELEASE'
sql2o = '1.6.0'
substance = '8.0.02'
From a532e49d020c05caa69afbd96ba7d57ad7992aa8 Mon Sep 17 00:00:00 2001
From: Ganom
Date: Tue, 1 Oct 2019 00:21:42 +0000
Subject: [PATCH 5/9] Client: Update item stats
---
.../src/main/resources/npc_stats.json | 319 +++++++++++++-----
1 file changed, 232 insertions(+), 87 deletions(-)
diff --git a/runelite-client/src/main/resources/npc_stats.json b/runelite-client/src/main/resources/npc_stats.json
index 9a39353bba..5958fc857f 100644
--- a/runelite-client/src/main/resources/npc_stats.json
+++ b/runelite-client/src/main/resources/npc_stats.json
@@ -5801,16 +5801,7 @@
"combatLevel": 66,
"slayerLevel": 1,
"attackSpeed": 15,
- "attackLevel": 90,
- "strengthLevel": 90,
- "defenceLevel": 90,
- "rangeLevel": 1,
- "magicLevel": 70,
- "magic": 70,
- "stabDef": 40,
- "slashDef": 90,
- "crushDef": 90,
- "magicDef": 34
+ "magic": 70
},
"800": {
"name": "Locust rider",
@@ -6958,18 +6949,6 @@
"rangeLevel": 1,
"magicLevel": 1
},
- "1038": {
- "name": "Monkey",
- "hitpoints": 6,
- "combatLevel": 3,
- "slayerLevel": 1,
- "attackSpeed": 4,
- "attackLevel": 2,
- "strengthLevel": 3,
- "defenceLevel": 2,
- "rangeLevel": 1,
- "magicLevel": 1
- },
"1039": {
"name": "Albino bat",
"hitpoints": 33,
@@ -8168,7 +8147,9 @@
"strengthLevel": 35,
"defenceLevel": 35,
"rangeLevel": 30,
- "magicLevel": 10
+ "magicLevel": 10,
+ "poisonImmune": true,
+ "venomImmune": true
},
"1369": {
"name": "Air elemental",
@@ -11839,24 +11820,6 @@
"crushDef": 175,
"rangeDef": 250
},
- "2263": {
- "name": "Bardur",
- "hitpoints": 99,
- "combatLevel": 94,
- "attackSpeed": 6,
- "attackLevel": 99,
- "strengthLevel": 40,
- "defenceLevel": 99,
- "rangeLevel": 1,
- "magicLevel": 1,
- "stabDef": 150,
- "slashDef": 150,
- "crushDef": 150,
- "rangeDef": 150,
- "magicDef": 150,
- "bonusAttack": 100,
- "bonusStrength": 100
- },
"2264": {
"name": "Dagannoth fledgeling",
"hitpoints": 100,
@@ -13681,7 +13644,9 @@
"strengthLevel": 1,
"defenceLevel": 1,
"rangeLevel": 1,
- "magicLevel": 1
+ "magicLevel": 1,
+ "poisonImmune": true,
+ "venomImmune": true
},
"2791": {
"name": "Cow",
@@ -13693,7 +13658,9 @@
"strengthLevel": 1,
"defenceLevel": 1,
"rangeLevel": 1,
- "magicLevel": 1
+ "magicLevel": 1,
+ "poisonImmune": true,
+ "venomImmune": true
},
"2792": {
"name": "Cow calf",
@@ -13717,7 +13684,9 @@
"strengthLevel": 1,
"defenceLevel": 1,
"rangeLevel": 1,
- "magicLevel": 1
+ "magicLevel": 1,
+ "poisonImmune": true,
+ "venomImmune": true
},
"2794": {
"name": "Cow calf",
@@ -13741,7 +13710,9 @@
"strengthLevel": 1,
"defenceLevel": 1,
"rangeLevel": 1,
- "magicLevel": 1
+ "magicLevel": 1,
+ "poisonImmune": true,
+ "venomImmune": true
},
"2801": {
"name": "Cow calf",
@@ -16031,7 +16002,7 @@
"hitpoints": 20,
"combatLevel": 18,
"slayerLevel": 1,
- "attackSpeed": 6,
+ "attackSpeed": 4,
"attackLevel": 12,
"strengthLevel": 16,
"defenceLevel": 19,
@@ -18716,26 +18687,6 @@
"rangeLevel": 1,
"magicLevel": 1
},
- "3897": {
- "name": "Koschei the deathless",
- "hitpoints": 79,
- "attackSpeed": 4
- },
- "3898": {
- "name": "Koschei the deathless",
- "hitpoints": 79,
- "attackSpeed": 4
- },
- "3899": {
- "name": "Koschei the deathless",
- "hitpoints": 79,
- "attackSpeed": 4
- },
- "3900": {
- "name": "Koschei the deathless",
- "hitpoints": 79,
- "attackSpeed": 4
- },
"3901": {
"name": "Fox",
"hitpoints": 30,
@@ -18877,18 +18828,6 @@
"magicLevel": 1,
"bonusStrength": 20
},
- "3942": {
- "name": "Freygerd",
- "hitpoints": 50,
- "combatLevel": 48,
- "attackSpeed": 4,
- "attackLevel": 40,
- "strengthLevel": 40,
- "defenceLevel": 40,
- "rangeLevel": 1,
- "magicLevel": 1,
- "bonusStrength": 20
- },
"3943": {
"name": "Lensa",
"hitpoints": 50,
@@ -22127,7 +22066,7 @@
"hitpoints": 15,
"combatLevel": 13,
"slayerLevel": 1,
- "attackSpeed": 6,
+ "attackSpeed": 4,
"attackLevel": 10,
"strengthLevel": 10,
"defenceLevel": 12,
@@ -25428,7 +25367,9 @@
"strengthLevel": 1,
"defenceLevel": 1,
"rangeLevel": 1,
- "magicLevel": 1
+ "magicLevel": 1,
+ "poisonImmune": true,
+ "venomImmune": true
},
"5848": {
"name": "Tanglefoot",
@@ -27385,10 +27326,15 @@
},
"6340": {
"name": "Cow (hard)",
- "hitpoints": 8,
+ "hitpoints": 160,
"combatLevel": 170,
"slayerLevel": 1,
- "attackSpeed": 4
+ "attackSpeed": 4,
+ "attackLevel": 200,
+ "strengthLevel": 200,
+ "defenceLevel": 1,
+ "rangeLevel": 1,
+ "magicLevel": 1
},
"6342": {
"name": "Barrelchest",
@@ -28249,7 +28195,9 @@
"strengthLevel": 1,
"defenceLevel": 1,
"rangeLevel": 1,
- "magicLevel": 1
+ "magicLevel": 1,
+ "poisonImmune": true,
+ "venomImmune": true
},
"6402": {
"name": "Mosquito swarm",
@@ -29533,7 +29481,7 @@
"hitpoints": 130,
"combatLevel": 80,
"slayerLevel": 1,
- "attackSpeed": 6,
+ "attackSpeed": 4,
"attackLevel": 55,
"strengthLevel": 60,
"defenceLevel": 50,
@@ -35559,6 +35507,7 @@
"name": "Galvek",
"hitpoints": 1200,
"combatLevel": 608,
+ "attackSpeed": 6,
"attackLevel": 632,
"strengthLevel": 268,
"defenceLevel": 188,
@@ -35575,12 +35524,14 @@
"bonusRangeStrength": 6,
"bonusMagicDamage": 42,
"poisonImmune": true,
- "venomImmune": true
+ "venomImmune": true,
+ "dragon": true
},
"8095": {
"name": "Galvek",
"hitpoints": 1200,
"combatLevel": 608,
+ "attackSpeed": 6,
"attackLevel": 632,
"strengthLevel": 268,
"defenceLevel": 188,
@@ -35597,7 +35548,8 @@
"bonusRangeStrength": 6,
"bonusMagicDamage": 42,
"poisonImmune": true,
- "venomImmune": true
+ "venomImmune": true,
+ "dragon": true
},
"8096": {
"name": "Galvek",
@@ -35753,6 +35705,7 @@
"name": "Galvek",
"hitpoints": 1200,
"combatLevel": 608,
+ "attackSpeed": 6,
"attackLevel": 632,
"strengthLevel": 268,
"defenceLevel": 188,
@@ -35769,7 +35722,8 @@
"bonusRangeStrength": 6,
"bonusMagicDamage": 42,
"poisonImmune": true,
- "venomImmune": true
+ "venomImmune": true,
+ "dragon": true
},
"8178": {
"name": "Galvek",
@@ -38227,5 +38181,196 @@
"bonusAttack": 14,
"bonusStrength": 28,
"bonusRangeStrength": 28
+ },
+ "9258": {
+ "name": "Basilisk Sentinel",
+ "hitpoints": 460,
+ "combatLevel": 351,
+ "slayerLevel": 40,
+ "attackSpeed": 4,
+ "attackLevel": 274,
+ "strengthLevel": 274,
+ "defenceLevel": 274,
+ "rangeLevel": 1,
+ "magicLevel": 274,
+ "stabDef": 40,
+ "slashDef": 40,
+ "magicDef": 40
+ },
+ "9282": {
+ "name": "Basilisk Youngling",
+ "hitpoints": 60,
+ "combatLevel": 57,
+ "slayerLevel": 40,
+ "attackSpeed": 4,
+ "attackLevel": 25,
+ "strengthLevel": 40,
+ "defenceLevel": 70,
+ "rangeLevel": 1,
+ "magicLevel": 1,
+ "stabDef": 20,
+ "slashDef": 20,
+ "magicDef": 20
+ },
+ "9287": {
+ "name": "Monstrous Basilisk",
+ "hitpoints": 170,
+ "combatLevel": 135,
+ "attackSpeed": 4,
+ "attackLevel": 88,
+ "strengthLevel": 98,
+ "defenceLevel": 130,
+ "rangeLevel": 1,
+ "magicLevel": 1,
+ "stabDef": 35,
+ "slashDef": 35,
+ "magicDef": 35,
+ "poisonImmune": true,
+ "venomImmune": true
+ },
+ "9288": {
+ "name": "Monstrous Basilisk",
+ "hitpoints": 170,
+ "combatLevel": 135,
+ "attackSpeed": 4,
+ "attackLevel": 88,
+ "strengthLevel": 98,
+ "defenceLevel": 130,
+ "rangeLevel": 1,
+ "magicLevel": 1,
+ "stabDef": 35,
+ "slashDef": 35,
+ "magicDef": 35,
+ "poisonImmune": true,
+ "venomImmune": true
+ },
+ "9289": {
+ "name": "The Jormungand",
+ "hitpoints": 600,
+ "combatLevel": 363,
+ "slayerLevel": 40,
+ "attackSpeed": 5,
+ "attackLevel": 180,
+ "strengthLevel": 180,
+ "defenceLevel": 180,
+ "rangeLevel": 180,
+ "magicLevel": 180,
+ "stabDef": 50,
+ "slashDef": 50,
+ "crushDef": 10,
+ "rangeDef": 50,
+ "magicDef": 50,
+ "bonusStrength": 12,
+ "bonusRangeStrength": 12,
+ "bonusMagicDamage": 12
+ },
+ "9290": {
+ "name": "The Jormungand",
+ "hitpoints": 600,
+ "combatLevel": 363,
+ "slayerLevel": 40,
+ "attackSpeed": 5,
+ "attackLevel": 180,
+ "strengthLevel": 180,
+ "defenceLevel": 180,
+ "rangeLevel": 180,
+ "magicLevel": 180,
+ "stabDef": 50,
+ "slashDef": 50,
+ "crushDef": 10,
+ "rangeDef": 50,
+ "magicDef": 50,
+ "bonusStrength": 12,
+ "bonusRangeStrength": 12,
+ "bonusMagicDamage": 12
+ },
+ "9291": {
+ "name": "The Jormungand",
+ "hitpoints": 600,
+ "combatLevel": 363,
+ "slayerLevel": 40,
+ "attackSpeed": 5,
+ "attackLevel": 180,
+ "strengthLevel": 180,
+ "defenceLevel": 180,
+ "rangeLevel": 180,
+ "magicLevel": 180,
+ "stabDef": 50,
+ "slashDef": 50,
+ "crushDef": 10,
+ "rangeDef": 50,
+ "magicDef": 50,
+ "bonusStrength": 12,
+ "bonusRangeStrength": 12,
+ "bonusMagicDamage": 12
+ },
+ "9292": {
+ "name": "The Jormungand",
+ "hitpoints": 600,
+ "combatLevel": 363,
+ "slayerLevel": 40,
+ "attackSpeed": 5,
+ "attackLevel": 180,
+ "strengthLevel": 180,
+ "defenceLevel": 180,
+ "rangeLevel": 180,
+ "magicLevel": 180,
+ "stabDef": 50,
+ "slashDef": 50,
+ "crushDef": 10,
+ "rangeDef": 50,
+ "magicDef": 50,
+ "bonusStrength": 12,
+ "bonusRangeStrength": 12,
+ "bonusMagicDamage": 12
+ },
+ "9293": {
+ "name": "Basilisk Knight",
+ "hitpoints": 200,
+ "combatLevel": 182,
+ "slayerLevel": 40,
+ "attackSpeed": 4,
+ "attackLevel": 150,
+ "strengthLevel": 150,
+ "defenceLevel": 150,
+ "rangeLevel": 1,
+ "magicLevel": 150,
+ "stabDef": 25,
+ "slashDef": 25,
+ "magicDef": 25
+ },
+ "9295": {
+ "name": "Typhor",
+ "hitpoints": 280,
+ "combatLevel": 194,
+ "slayerLevel": 40,
+ "attackSpeed": 4,
+ "attackLevel": 150,
+ "strengthLevel": 150,
+ "defenceLevel": 150,
+ "rangeLevel": 1,
+ "magicLevel": 150,
+ "stabDef": 25,
+ "slashDef": 25,
+ "magicDef": 25,
+ "poisonImmune": true,
+ "venomImmune": true
+ },
+ "9296": {
+ "name": "Typhor",
+ "hitpoints": 280,
+ "combatLevel": 194,
+ "slayerLevel": 40,
+ "attackSpeed": 4,
+ "attackLevel": 150,
+ "strengthLevel": 150,
+ "defenceLevel": 150,
+ "rangeLevel": 1,
+ "magicLevel": 150,
+ "stabDef": 25,
+ "slashDef": 25,
+ "magicDef": 25,
+ "poisonImmune": true,
+ "venomImmune": true
}
}
\ No newline at end of file
From 73b0ace71ff4cd9c8ea40dbce01abaf0609dcc8e Mon Sep 17 00:00:00 2001
From: Ganom
Date: Tue, 1 Oct 2019 00:21:42 +0000
Subject: [PATCH 6/9] Client: Update NPC stats
---
.../src/main/resources/npc_stats.json | 319 +++++++++++++-----
1 file changed, 232 insertions(+), 87 deletions(-)
diff --git a/runelite-client/src/main/resources/npc_stats.json b/runelite-client/src/main/resources/npc_stats.json
index 9a39353bba..5958fc857f 100644
--- a/runelite-client/src/main/resources/npc_stats.json
+++ b/runelite-client/src/main/resources/npc_stats.json
@@ -5801,16 +5801,7 @@
"combatLevel": 66,
"slayerLevel": 1,
"attackSpeed": 15,
- "attackLevel": 90,
- "strengthLevel": 90,
- "defenceLevel": 90,
- "rangeLevel": 1,
- "magicLevel": 70,
- "magic": 70,
- "stabDef": 40,
- "slashDef": 90,
- "crushDef": 90,
- "magicDef": 34
+ "magic": 70
},
"800": {
"name": "Locust rider",
@@ -6958,18 +6949,6 @@
"rangeLevel": 1,
"magicLevel": 1
},
- "1038": {
- "name": "Monkey",
- "hitpoints": 6,
- "combatLevel": 3,
- "slayerLevel": 1,
- "attackSpeed": 4,
- "attackLevel": 2,
- "strengthLevel": 3,
- "defenceLevel": 2,
- "rangeLevel": 1,
- "magicLevel": 1
- },
"1039": {
"name": "Albino bat",
"hitpoints": 33,
@@ -8168,7 +8147,9 @@
"strengthLevel": 35,
"defenceLevel": 35,
"rangeLevel": 30,
- "magicLevel": 10
+ "magicLevel": 10,
+ "poisonImmune": true,
+ "venomImmune": true
},
"1369": {
"name": "Air elemental",
@@ -11839,24 +11820,6 @@
"crushDef": 175,
"rangeDef": 250
},
- "2263": {
- "name": "Bardur",
- "hitpoints": 99,
- "combatLevel": 94,
- "attackSpeed": 6,
- "attackLevel": 99,
- "strengthLevel": 40,
- "defenceLevel": 99,
- "rangeLevel": 1,
- "magicLevel": 1,
- "stabDef": 150,
- "slashDef": 150,
- "crushDef": 150,
- "rangeDef": 150,
- "magicDef": 150,
- "bonusAttack": 100,
- "bonusStrength": 100
- },
"2264": {
"name": "Dagannoth fledgeling",
"hitpoints": 100,
@@ -13681,7 +13644,9 @@
"strengthLevel": 1,
"defenceLevel": 1,
"rangeLevel": 1,
- "magicLevel": 1
+ "magicLevel": 1,
+ "poisonImmune": true,
+ "venomImmune": true
},
"2791": {
"name": "Cow",
@@ -13693,7 +13658,9 @@
"strengthLevel": 1,
"defenceLevel": 1,
"rangeLevel": 1,
- "magicLevel": 1
+ "magicLevel": 1,
+ "poisonImmune": true,
+ "venomImmune": true
},
"2792": {
"name": "Cow calf",
@@ -13717,7 +13684,9 @@
"strengthLevel": 1,
"defenceLevel": 1,
"rangeLevel": 1,
- "magicLevel": 1
+ "magicLevel": 1,
+ "poisonImmune": true,
+ "venomImmune": true
},
"2794": {
"name": "Cow calf",
@@ -13741,7 +13710,9 @@
"strengthLevel": 1,
"defenceLevel": 1,
"rangeLevel": 1,
- "magicLevel": 1
+ "magicLevel": 1,
+ "poisonImmune": true,
+ "venomImmune": true
},
"2801": {
"name": "Cow calf",
@@ -16031,7 +16002,7 @@
"hitpoints": 20,
"combatLevel": 18,
"slayerLevel": 1,
- "attackSpeed": 6,
+ "attackSpeed": 4,
"attackLevel": 12,
"strengthLevel": 16,
"defenceLevel": 19,
@@ -18716,26 +18687,6 @@
"rangeLevel": 1,
"magicLevel": 1
},
- "3897": {
- "name": "Koschei the deathless",
- "hitpoints": 79,
- "attackSpeed": 4
- },
- "3898": {
- "name": "Koschei the deathless",
- "hitpoints": 79,
- "attackSpeed": 4
- },
- "3899": {
- "name": "Koschei the deathless",
- "hitpoints": 79,
- "attackSpeed": 4
- },
- "3900": {
- "name": "Koschei the deathless",
- "hitpoints": 79,
- "attackSpeed": 4
- },
"3901": {
"name": "Fox",
"hitpoints": 30,
@@ -18877,18 +18828,6 @@
"magicLevel": 1,
"bonusStrength": 20
},
- "3942": {
- "name": "Freygerd",
- "hitpoints": 50,
- "combatLevel": 48,
- "attackSpeed": 4,
- "attackLevel": 40,
- "strengthLevel": 40,
- "defenceLevel": 40,
- "rangeLevel": 1,
- "magicLevel": 1,
- "bonusStrength": 20
- },
"3943": {
"name": "Lensa",
"hitpoints": 50,
@@ -22127,7 +22066,7 @@
"hitpoints": 15,
"combatLevel": 13,
"slayerLevel": 1,
- "attackSpeed": 6,
+ "attackSpeed": 4,
"attackLevel": 10,
"strengthLevel": 10,
"defenceLevel": 12,
@@ -25428,7 +25367,9 @@
"strengthLevel": 1,
"defenceLevel": 1,
"rangeLevel": 1,
- "magicLevel": 1
+ "magicLevel": 1,
+ "poisonImmune": true,
+ "venomImmune": true
},
"5848": {
"name": "Tanglefoot",
@@ -27385,10 +27326,15 @@
},
"6340": {
"name": "Cow (hard)",
- "hitpoints": 8,
+ "hitpoints": 160,
"combatLevel": 170,
"slayerLevel": 1,
- "attackSpeed": 4
+ "attackSpeed": 4,
+ "attackLevel": 200,
+ "strengthLevel": 200,
+ "defenceLevel": 1,
+ "rangeLevel": 1,
+ "magicLevel": 1
},
"6342": {
"name": "Barrelchest",
@@ -28249,7 +28195,9 @@
"strengthLevel": 1,
"defenceLevel": 1,
"rangeLevel": 1,
- "magicLevel": 1
+ "magicLevel": 1,
+ "poisonImmune": true,
+ "venomImmune": true
},
"6402": {
"name": "Mosquito swarm",
@@ -29533,7 +29481,7 @@
"hitpoints": 130,
"combatLevel": 80,
"slayerLevel": 1,
- "attackSpeed": 6,
+ "attackSpeed": 4,
"attackLevel": 55,
"strengthLevel": 60,
"defenceLevel": 50,
@@ -35559,6 +35507,7 @@
"name": "Galvek",
"hitpoints": 1200,
"combatLevel": 608,
+ "attackSpeed": 6,
"attackLevel": 632,
"strengthLevel": 268,
"defenceLevel": 188,
@@ -35575,12 +35524,14 @@
"bonusRangeStrength": 6,
"bonusMagicDamage": 42,
"poisonImmune": true,
- "venomImmune": true
+ "venomImmune": true,
+ "dragon": true
},
"8095": {
"name": "Galvek",
"hitpoints": 1200,
"combatLevel": 608,
+ "attackSpeed": 6,
"attackLevel": 632,
"strengthLevel": 268,
"defenceLevel": 188,
@@ -35597,7 +35548,8 @@
"bonusRangeStrength": 6,
"bonusMagicDamage": 42,
"poisonImmune": true,
- "venomImmune": true
+ "venomImmune": true,
+ "dragon": true
},
"8096": {
"name": "Galvek",
@@ -35753,6 +35705,7 @@
"name": "Galvek",
"hitpoints": 1200,
"combatLevel": 608,
+ "attackSpeed": 6,
"attackLevel": 632,
"strengthLevel": 268,
"defenceLevel": 188,
@@ -35769,7 +35722,8 @@
"bonusRangeStrength": 6,
"bonusMagicDamage": 42,
"poisonImmune": true,
- "venomImmune": true
+ "venomImmune": true,
+ "dragon": true
},
"8178": {
"name": "Galvek",
@@ -38227,5 +38181,196 @@
"bonusAttack": 14,
"bonusStrength": 28,
"bonusRangeStrength": 28
+ },
+ "9258": {
+ "name": "Basilisk Sentinel",
+ "hitpoints": 460,
+ "combatLevel": 351,
+ "slayerLevel": 40,
+ "attackSpeed": 4,
+ "attackLevel": 274,
+ "strengthLevel": 274,
+ "defenceLevel": 274,
+ "rangeLevel": 1,
+ "magicLevel": 274,
+ "stabDef": 40,
+ "slashDef": 40,
+ "magicDef": 40
+ },
+ "9282": {
+ "name": "Basilisk Youngling",
+ "hitpoints": 60,
+ "combatLevel": 57,
+ "slayerLevel": 40,
+ "attackSpeed": 4,
+ "attackLevel": 25,
+ "strengthLevel": 40,
+ "defenceLevel": 70,
+ "rangeLevel": 1,
+ "magicLevel": 1,
+ "stabDef": 20,
+ "slashDef": 20,
+ "magicDef": 20
+ },
+ "9287": {
+ "name": "Monstrous Basilisk",
+ "hitpoints": 170,
+ "combatLevel": 135,
+ "attackSpeed": 4,
+ "attackLevel": 88,
+ "strengthLevel": 98,
+ "defenceLevel": 130,
+ "rangeLevel": 1,
+ "magicLevel": 1,
+ "stabDef": 35,
+ "slashDef": 35,
+ "magicDef": 35,
+ "poisonImmune": true,
+ "venomImmune": true
+ },
+ "9288": {
+ "name": "Monstrous Basilisk",
+ "hitpoints": 170,
+ "combatLevel": 135,
+ "attackSpeed": 4,
+ "attackLevel": 88,
+ "strengthLevel": 98,
+ "defenceLevel": 130,
+ "rangeLevel": 1,
+ "magicLevel": 1,
+ "stabDef": 35,
+ "slashDef": 35,
+ "magicDef": 35,
+ "poisonImmune": true,
+ "venomImmune": true
+ },
+ "9289": {
+ "name": "The Jormungand",
+ "hitpoints": 600,
+ "combatLevel": 363,
+ "slayerLevel": 40,
+ "attackSpeed": 5,
+ "attackLevel": 180,
+ "strengthLevel": 180,
+ "defenceLevel": 180,
+ "rangeLevel": 180,
+ "magicLevel": 180,
+ "stabDef": 50,
+ "slashDef": 50,
+ "crushDef": 10,
+ "rangeDef": 50,
+ "magicDef": 50,
+ "bonusStrength": 12,
+ "bonusRangeStrength": 12,
+ "bonusMagicDamage": 12
+ },
+ "9290": {
+ "name": "The Jormungand",
+ "hitpoints": 600,
+ "combatLevel": 363,
+ "slayerLevel": 40,
+ "attackSpeed": 5,
+ "attackLevel": 180,
+ "strengthLevel": 180,
+ "defenceLevel": 180,
+ "rangeLevel": 180,
+ "magicLevel": 180,
+ "stabDef": 50,
+ "slashDef": 50,
+ "crushDef": 10,
+ "rangeDef": 50,
+ "magicDef": 50,
+ "bonusStrength": 12,
+ "bonusRangeStrength": 12,
+ "bonusMagicDamage": 12
+ },
+ "9291": {
+ "name": "The Jormungand",
+ "hitpoints": 600,
+ "combatLevel": 363,
+ "slayerLevel": 40,
+ "attackSpeed": 5,
+ "attackLevel": 180,
+ "strengthLevel": 180,
+ "defenceLevel": 180,
+ "rangeLevel": 180,
+ "magicLevel": 180,
+ "stabDef": 50,
+ "slashDef": 50,
+ "crushDef": 10,
+ "rangeDef": 50,
+ "magicDef": 50,
+ "bonusStrength": 12,
+ "bonusRangeStrength": 12,
+ "bonusMagicDamage": 12
+ },
+ "9292": {
+ "name": "The Jormungand",
+ "hitpoints": 600,
+ "combatLevel": 363,
+ "slayerLevel": 40,
+ "attackSpeed": 5,
+ "attackLevel": 180,
+ "strengthLevel": 180,
+ "defenceLevel": 180,
+ "rangeLevel": 180,
+ "magicLevel": 180,
+ "stabDef": 50,
+ "slashDef": 50,
+ "crushDef": 10,
+ "rangeDef": 50,
+ "magicDef": 50,
+ "bonusStrength": 12,
+ "bonusRangeStrength": 12,
+ "bonusMagicDamage": 12
+ },
+ "9293": {
+ "name": "Basilisk Knight",
+ "hitpoints": 200,
+ "combatLevel": 182,
+ "slayerLevel": 40,
+ "attackSpeed": 4,
+ "attackLevel": 150,
+ "strengthLevel": 150,
+ "defenceLevel": 150,
+ "rangeLevel": 1,
+ "magicLevel": 150,
+ "stabDef": 25,
+ "slashDef": 25,
+ "magicDef": 25
+ },
+ "9295": {
+ "name": "Typhor",
+ "hitpoints": 280,
+ "combatLevel": 194,
+ "slayerLevel": 40,
+ "attackSpeed": 4,
+ "attackLevel": 150,
+ "strengthLevel": 150,
+ "defenceLevel": 150,
+ "rangeLevel": 1,
+ "magicLevel": 150,
+ "stabDef": 25,
+ "slashDef": 25,
+ "magicDef": 25,
+ "poisonImmune": true,
+ "venomImmune": true
+ },
+ "9296": {
+ "name": "Typhor",
+ "hitpoints": 280,
+ "combatLevel": 194,
+ "slayerLevel": 40,
+ "attackSpeed": 4,
+ "attackLevel": 150,
+ "strengthLevel": 150,
+ "defenceLevel": 150,
+ "rangeLevel": 1,
+ "magicLevel": 150,
+ "stabDef": 25,
+ "slashDef": 25,
+ "magicDef": 25,
+ "poisonImmune": true,
+ "venomImmune": true
}
}
\ No newline at end of file
From 34eb048ea9511fead929c2932a3716b6013aee33 Mon Sep 17 00:00:00 2001
From: HSJ-OSRS
Date: Tue, 1 Oct 2019 10:10:45 +0100
Subject: [PATCH 7/9] fix config update
---
.../client/plugins/slayer/SlayerPlugin.java | 17 ++++++++++-------
1 file changed, 10 insertions(+), 7 deletions(-)
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java
index b886982b4a..41f3423515 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java
@@ -820,20 +820,23 @@ public class SlayerPlugin extends Plugin
private void onConfigChanged(ConfigChanged event)
{
- if (!event.getGroup().equals("slayer") || !event.getKey().equals("infobox"))
+ if (!event.getGroup().equals("slayer"))
{
return;
}
updateConfig();
- if (this.showInfobox)
+ if (event.getKey().equals("infobox"))
{
- clientThread.invoke(this::addCounter);
- }
- else
- {
- removeCounter();
+ if (this.showInfobox)
+ {
+ clientThread.invoke(this::addCounter);
+ }
+ else
+ {
+ removeCounter();
+ }
}
}
From b51a1cd249665817740d5edc0be480c36ac94b19 Mon Sep 17 00:00:00 2001
From: Netami1
Date: Tue, 1 Oct 2019 12:24:05 -0400
Subject: [PATCH 8/9] sanitize text for Jagex non-breaking spaces (#1697)
add null check player name
---
.../runelite/client/plugins/coxhelper/CoxPlugin.java | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/coxhelper/CoxPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/coxhelper/CoxPlugin.java
index 6126f409a7..dbb1dc6ec1 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/coxhelper/CoxPlugin.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/coxhelper/CoxPlugin.java
@@ -217,9 +217,16 @@ public class CoxPlugin extends Plugin
{
for (Player player : client.getPlayers())
{
- if (player.getName().equals(tpMatcher.group(1)))
+ final String rawPlayerName = player.getName();
+
+ if (rawPlayerName != null)
{
- victims.add(new Victim(player, Victim.Type.TELEPORT));
+ final String fixedPlayerName = Text.sanitize(rawPlayerName);
+
+ if (fixedPlayerName.equals(tpMatcher.group(1)))
+ {
+ victims.add(new Victim(player, Victim.Type.TELEPORT));
+ }
}
}
}
From 4b310a694d5e729aa2a47b6d6e760d4079645c96 Mon Sep 17 00:00:00 2001
From: Ganom
Date: Wed, 2 Oct 2019 00:07:56 +0000
Subject: [PATCH 9/9] project: Update gradle dependencies
---
build.gradle | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/build.gradle b/build.gradle
index 54bebd6724..a697d93212 100644
--- a/build.gradle
+++ b/build.gradle
@@ -64,7 +64,7 @@ ext {
mavenPluginAnnotations = '3.6.0'
mavenPluginApi = '3.6.2'
minio = '6.0.11'
- mockito = '3.0.0'
+ mockito = '3.1.0'
mongodbDriverSync = '3.11.0'
mysqlConnectorJava = '8.0.17'
netty = '4.1.42.Final'