devtools plugin: add commands to get and set varbits

This commit is contained in:
Adam
2018-04-22 20:04:37 -04:00
parent 946688cdf8
commit fad8472c50
3 changed files with 73 additions and 3 deletions

View File

@@ -167,6 +167,12 @@ public interface Client extends GameEngine
int getSetting(Varbits varbit);
void setSetting(Varbits varbit, int value);
int getVarbitValue(int varbit);
void setVarbitValue(int varbit, int value);
HashTable getWidgetFlags();
HashTable getComponentTable();

View File

@@ -24,6 +24,7 @@
*/
package net.runelite.client.plugins.devtools;
import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe;
import com.google.inject.Provides;
import java.awt.Font;
@@ -33,7 +34,10 @@ import java.util.Collection;
import javax.imageio.ImageIO;
import javax.inject.Inject;
import lombok.extern.slf4j.Slf4j;
import net.runelite.api.ChatMessageType;
import net.runelite.api.Client;
import net.runelite.api.events.CommandExecuted;
import net.runelite.api.events.VarbitChanged;
import net.runelite.api.widgets.Widget;
import net.runelite.client.config.ConfigManager;
import net.runelite.client.plugins.Plugin;
@@ -50,6 +54,9 @@ import net.runelite.client.ui.overlay.Overlay;
@Slf4j
public class DevToolsPlugin extends Plugin
{
@Inject
private Client client;
@Inject
private PluginToolbar pluginToolbar;
@@ -62,6 +69,9 @@ public class DevToolsPlugin extends Plugin
@Inject
private BorderOverlay borderOverlay;
@Inject
private EventBus eventBus;
private boolean togglePlayers;
private boolean toggleNpcs;
private boolean toggleGroundItems;
@@ -123,9 +133,28 @@ public class DevToolsPlugin extends Plugin
}
@Subscribe
public void onCommand(CommandExecuted commandExecuted) {
if (commandExecuted.getCommand().equalsIgnoreCase("test")) {
log.debug("Test!");
public void onCommand(CommandExecuted commandExecuted)
{
String[] args = commandExecuted.getArguments();
switch (commandExecuted.getCommand())
{
case "getvar":
{
int varbit = Integer.parseInt(args[0]);
int value = client.getVarbitValue(varbit);
client.addChatMessage(ChatMessageType.SERVER, "", "Varbit " + varbit + ": " + value, null);
break;
}
case "setvar":
{
int varbit = Integer.parseInt(args[0]);
int value = Integer.parseInt(args[1]);
client.setVarbitValue(varbit, value);
client.addChatMessage(ChatMessageType.SERVER, "", "Set varbit " + varbit + " to " + value, null);
eventBus.post(new VarbitChanged()); // fake event
break;
}
}
}

View File

@@ -55,6 +55,21 @@ public abstract class VarbitMixin implements RSClient
public int getSetting(Varbits varbit)
{
int varbitId = varbit.getId();
return getVarbitValue(varbitId);
}
@Inject
@Override
public void setSetting(Varbits varbit, int value)
{
int varbitId = varbit.getId();
setVarbitValue(varbitId, value);
}
@Inject
@Override
public int getVarbitValue(int varbitId)
{
RSVarbit v = varbitCache.getIfPresent(varbitId);
if (v == null)
{
@@ -71,4 +86,24 @@ public abstract class VarbitMixin implements RSClient
int mask = (1 << ((msb - lsb) + 1)) - 1;
return (value >> lsb) & mask;
}
@Inject
@Override
public void setVarbitValue(int varbitId, int value)
{
RSVarbit v = varbitCache.getIfPresent(varbitId);
if (v == null)
{
client.getVarbit(varbitId); // load varbit into cache
RSNodeCache varbits = client.getVarbitCache();
v = (RSVarbit) varbits.get(varbitId); // get from cache
varbitCache.put(varbitId, v);
}
int[] varps = getVarps();
int lsb = v.getLeastSignificantBit();
int msb = v.getMostSignificantBit();
int mask = (1 << ((msb - lsb) + 1)) - 1;
varps[v.getIndex()] = (varps[v.getIndex()] & ~(mask << lsb)) | ((value & mask) << lsb);
}
}