Allow get/setVarbitValue to operate on arbitrary varp sets

This commit is contained in:
Max Weber
2018-05-13 21:28:10 -06:00
parent 66ccd9c0d6
commit 572d92378a
3 changed files with 14 additions and 10 deletions

View File

@@ -173,6 +173,7 @@ public interface Client extends GameEngine
int[][] getXteaKeys();
@VisibleForDevtools
int[] getVarps();
@VisibleForDevtools
@@ -193,10 +194,10 @@ public interface Client extends GameEngine
void setSetting(Varbits varbit, int value);
@VisibleForDevtools
int getVarbitValue(int varbit);
int getVarbitValue(int[] varps, int varbitId);
@VisibleForDevtools
void setVarbitValue(int varbit, int value);
void setVarbitValue(int[] varps, int varbit, int value);
HashTable getWidgetFlags();

View File

@@ -174,7 +174,7 @@ public class DevToolsPlugin extends Plugin
case "getvar":
{
int varbit = Integer.parseInt(args[0]);
int value = client.getVarbitValue(varbit);
int value = client.getVarbitValue(client.getVarps(), varbit);
client.addChatMessage(ChatMessageType.SERVER, "", "Varbit " + varbit + ": " + value, null);
break;
}
@@ -182,7 +182,7 @@ public class DevToolsPlugin extends Plugin
{
int varbit = Integer.parseInt(args[0]);
int value = Integer.parseInt(args[1]);
client.setVarbitValue(varbit, value);
client.setVarbitValue(client.getVarps(), varbit, value);
client.addChatMessage(ChatMessageType.SERVER, "", "Set varbit " + varbit + " to " + value, null);
eventBus.post(new VarbitChanged()); // fake event
break;

View File

@@ -57,7 +57,7 @@ public abstract class VarbitMixin implements RSClient
public int getVar(Varbits varbit)
{
int varbitId = varbit.getId();
return getVarbitValue(varbitId);
return getVarbitValue(getVarps(), varbitId);
}
@Inject
@@ -65,12 +65,12 @@ public abstract class VarbitMixin implements RSClient
public void setSetting(Varbits varbit, int value)
{
int varbitId = varbit.getId();
setVarbitValue(varbitId, value);
setVarbitValue(getVarps(), varbitId, value);
}
@Inject
@Override
public int getVarbitValue(int varbitId)
public int getVarbitValue(int[] varps, int varbitId)
{
RSVarbit v = varbitCache.getIfPresent(varbitId);
if (v == null)
@@ -81,7 +81,11 @@ public abstract class VarbitMixin implements RSClient
varbitCache.put(varbitId, v);
}
int[] varps = getVarps();
if (v.getIndex() == 0 && v.getLeastSignificantBit() == 0 && v.getMostSignificantBit() == 0)
{
throw new IndexOutOfBoundsException("Varbit " + varbitId + " does not exist");
}
int value = varps[v.getIndex()];
int lsb = v.getLeastSignificantBit();
int msb = v.getMostSignificantBit();
@@ -91,7 +95,7 @@ public abstract class VarbitMixin implements RSClient
@Inject
@Override
public void setVarbitValue(int varbitId, int value)
public void setVarbitValue(int[] varps, int varbitId, int value)
{
RSVarbit v = varbitCache.getIfPresent(varbitId);
if (v == null)
@@ -102,7 +106,6 @@ public abstract class VarbitMixin implements RSClient
varbitCache.put(varbitId, v);
}
int[] varps = getVarps();
int lsb = v.getLeastSignificantBit();
int msb = v.getMostSignificantBit();
int mask = (1 << ((msb - lsb) + 1)) - 1;