diff --git a/runelite-api/src/main/java/net/runelite/api/Client.java b/runelite-api/src/main/java/net/runelite/api/Client.java index 63e9bda05a..ea9355d739 100644 --- a/runelite-api/src/main/java/net/runelite/api/Client.java +++ b/runelite-api/src/main/java/net/runelite/api/Client.java @@ -419,4 +419,22 @@ public interface Client extends GameEngine void setProjectilesHidden(boolean state); CollisionData[] getCollisionMaps(); + + @VisibleForDevtools + int[] getBoostedSkillLevels(); + + @VisibleForDevtools + int[] getRealSkillLevels(); + + @VisibleForDevtools + int[] getSkillExperiences(); + + @VisibleForDevtools + int[] getChangedSkills(); + + @VisibleForDevtools + int getChangedSkillsCount(); + + @VisibleForDevtools + void setChangedSkillsCount(int i); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPlugin.java index deba2b4f9a..daca9042a7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPlugin.java @@ -29,6 +29,7 @@ import com.google.common.eventbus.Subscribe; import com.google.inject.Provides; import java.awt.Font; import java.awt.image.BufferedImage; +import static java.lang.Math.min; import java.util.Arrays; import java.util.Collection; import javax.imageio.ImageIO; @@ -36,6 +37,8 @@ import javax.inject.Inject; import lombok.extern.slf4j.Slf4j; import net.runelite.api.ChatMessageType; import net.runelite.api.Client; +import net.runelite.api.Experience; +import net.runelite.api.Skill; import net.runelite.api.events.CommandExecuted; import net.runelite.api.events.VarbitChanged; import net.runelite.api.widgets.Widget; @@ -157,6 +160,24 @@ public class DevToolsPlugin extends Plugin eventBus.post(new VarbitChanged()); // fake event break; } + case "addxp": + { + Skill skill = Skill.valueOf(args[0].toUpperCase()); + int xp = Integer.parseInt(args[1]); + + int totalXp = client.getSkillExperience(skill) + xp; + int level = min(Experience.getLevelForXp(totalXp), 99); + + client.getBoostedSkillLevels()[skill.ordinal()] = level; + client.getRealSkillLevels()[skill.ordinal()] = level; + client.getSkillExperiences()[skill.ordinal()] = totalXp; + + int[] skills = client.getChangedSkills(); + int count = client.getChangedSkillsCount(); + skills[++count - 1 & 31] = skill.ordinal(); + client.setChangedSkillsCount(count); + break; + } } } diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java b/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java index e1c5ba235a..7ba51dcd1a 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java @@ -101,14 +101,29 @@ public interface RSClient extends RSGameEngine, Client int getBaseY(); @Import("boostedSkillLevels") + @Override int[] getBoostedSkillLevels(); @Import("realSkillLevels") + @Override int[] getRealSkillLevels(); @Import("skillExperiences") + @Override int[] getSkillExperiences(); + @Import("changedSkills") + @Override + int[] getChangedSkills(); + + @Import("changedSkillsCount") + @Override + int getChangedSkillsCount(); + + @Import("changedSkillsCount") + @Override + void setChangedSkillsCount(int i); + @Import("gameState") int getRSGameState();