var inspector: optimize var checking
This fixes the inspector incorrectly only checking the first ~2k varbits due to there being some holes now in the varbit ids
This commit is contained in:
@@ -24,6 +24,8 @@
|
||||
*/
|
||||
package net.runelite.client.plugins.devtools;
|
||||
|
||||
import com.google.common.collect.HashMultimap;
|
||||
import com.google.common.collect.Multimap;
|
||||
import com.google.inject.Inject;
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Dimension;
|
||||
@@ -48,13 +50,16 @@ import javax.swing.border.CompoundBorder;
|
||||
import lombok.Getter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.runelite.api.Client;
|
||||
import net.runelite.api.IndexDataBase;
|
||||
import net.runelite.api.VarClientInt;
|
||||
import net.runelite.api.VarClientStr;
|
||||
import net.runelite.api.VarPlayer;
|
||||
import net.runelite.api.VarbitComposition;
|
||||
import net.runelite.api.Varbits;
|
||||
import net.runelite.api.events.VarClientIntChanged;
|
||||
import net.runelite.api.events.VarClientStrChanged;
|
||||
import net.runelite.api.events.VarbitChanged;
|
||||
import net.runelite.client.callback.ClientThread;
|
||||
import net.runelite.client.eventbus.EventBus;
|
||||
import net.runelite.client.eventbus.Subscribe;
|
||||
import net.runelite.client.ui.ClientUI;
|
||||
@@ -84,9 +89,10 @@ class VarInspector extends JFrame
|
||||
}
|
||||
|
||||
private final static int MAX_LOG_ENTRIES = 10_000;
|
||||
private static final int VARBITS_ARCHIVE_ID = 14;
|
||||
|
||||
private final Client client;
|
||||
private final DevToolsPlugin plugin;
|
||||
private final ClientThread clientThread;
|
||||
private final EventBus eventBus;
|
||||
|
||||
private final JPanel tracker = new JPanel();
|
||||
@@ -95,16 +101,16 @@ class VarInspector extends JFrame
|
||||
|
||||
private int[] oldVarps = null;
|
||||
private int[] oldVarps2 = null;
|
||||
private int numVarbits = 10000;
|
||||
|
||||
private Multimap<Integer, Integer> varbits;
|
||||
private Map<Integer, Object> varcs = null;
|
||||
|
||||
@Inject
|
||||
VarInspector(Client client, EventBus eventBus, DevToolsPlugin plugin)
|
||||
VarInspector(Client client, ClientThread clientThread, EventBus eventBus, DevToolsPlugin plugin)
|
||||
{
|
||||
this.eventBus = eventBus;
|
||||
this.client = client;
|
||||
this.plugin = plugin;
|
||||
this.clientThread = clientThread;
|
||||
this.eventBus = eventBus;
|
||||
|
||||
setTitle("RuneLite Var Inspector");
|
||||
setIconImage(ClientUI.ICON);
|
||||
@@ -213,63 +219,51 @@ class VarInspector extends JFrame
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onVarbitChanged(VarbitChanged ev)
|
||||
public void onVarbitChanged(VarbitChanged varbitChanged)
|
||||
{
|
||||
int index = varbitChanged.getIndex();
|
||||
int[] varps = client.getVarps();
|
||||
|
||||
// Check varbits
|
||||
for (int i = 0; i < numVarbits; i++)
|
||||
for (int i : varbits.get(index))
|
||||
{
|
||||
try
|
||||
int old = client.getVarbitValue(oldVarps, i);
|
||||
int neew = client.getVarbitValue(varps, i);
|
||||
if (old != neew)
|
||||
{
|
||||
int old = client.getVarbitValue(oldVarps, i);
|
||||
int neew = client.getVarbitValue(varps, i);
|
||||
if (old != neew)
|
||||
{
|
||||
// Set the varbit so it doesn't show in the varp changes
|
||||
// However, some varbits share common bits, so we only do it in oldVarps2
|
||||
// Example: 4101 collides with 4104-4129
|
||||
client.setVarbitValue(oldVarps2, i, neew);
|
||||
// Set the varbit so it doesn't show in the varp changes
|
||||
// However, some varbits share common bits, so we only do it in oldVarps2
|
||||
// Example: 4101 collides with 4104-4129
|
||||
client.setVarbitValue(oldVarps2, i, neew);
|
||||
|
||||
String name = String.format("%d", i);
|
||||
for (Varbits varbit : Varbits.values())
|
||||
String name = Integer.toString(i);
|
||||
for (Varbits varbit : Varbits.values())
|
||||
{
|
||||
if (varbit.getId() == i)
|
||||
{
|
||||
if (varbit.getId() == i)
|
||||
{
|
||||
name = String.format("%s(%d)", varbit.name(), i);
|
||||
break;
|
||||
}
|
||||
name = String.format("%s(%d)", varbit.name(), i);
|
||||
break;
|
||||
}
|
||||
addVarLog(VarType.VARBIT, name, old, neew);
|
||||
}
|
||||
}
|
||||
catch (IndexOutOfBoundsException e)
|
||||
{
|
||||
// We don't know what the last varbit is, so we just hit the end, then set it for future iterations
|
||||
log.debug("Hit OOB at varbit {}", i);
|
||||
numVarbits = i;
|
||||
break;
|
||||
addVarLog(VarType.VARBIT, name, old, neew);
|
||||
}
|
||||
}
|
||||
|
||||
// Check varps
|
||||
for (int i = 0; i < varps.length; i++)
|
||||
int old = oldVarps2[index];
|
||||
int neew = varps[index];
|
||||
if (old != neew)
|
||||
{
|
||||
int old = oldVarps2[i];
|
||||
int neew = varps[i];
|
||||
if (old != neew)
|
||||
String name = Integer.toString(index);
|
||||
for (VarPlayer varp : VarPlayer.values())
|
||||
{
|
||||
String name = String.format("%d", i);
|
||||
for (VarPlayer varp : VarPlayer.values())
|
||||
if (varp.getId() == index)
|
||||
{
|
||||
if (varp.getId() == i)
|
||||
{
|
||||
name = String.format("%s(%d)", varp.name(), i);
|
||||
break;
|
||||
}
|
||||
name = String.format("%s(%d)", varp.name(), index);
|
||||
break;
|
||||
}
|
||||
addVarLog(VarType.VARP, name, old, neew);
|
||||
}
|
||||
addVarLog(VarType.VARP, name, old, neew);
|
||||
}
|
||||
|
||||
System.arraycopy(client.getVarps(), 0, oldVarps, 0, oldVarps.length);
|
||||
@@ -349,6 +343,22 @@ class VarInspector extends JFrame
|
||||
System.arraycopy(client.getVarps(), 0, oldVarps, 0, oldVarps.length);
|
||||
System.arraycopy(client.getVarps(), 0, oldVarps2, 0, oldVarps2.length);
|
||||
varcs = new HashMap<>(client.getVarcMap());
|
||||
varbits = HashMultimap.create();
|
||||
|
||||
clientThread.invoke(() ->
|
||||
{
|
||||
// Build varp index -> varbit id map
|
||||
IndexDataBase indexVarbits = client.getIndexConfig();
|
||||
final int[] varbitIds = indexVarbits.getFileIds(VARBITS_ARCHIVE_ID);
|
||||
for (int id : varbitIds)
|
||||
{
|
||||
VarbitComposition varbit = client.getVarbit(id);
|
||||
if (varbit != null)
|
||||
{
|
||||
varbits.put(varbit.getIndex(), id);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
eventBus.register(this);
|
||||
setVisible(true);
|
||||
@@ -361,5 +371,7 @@ class VarInspector extends JFrame
|
||||
tracker.removeAll();
|
||||
eventBus.unregister(this);
|
||||
setVisible(false);
|
||||
varcs = null;
|
||||
varbits = null;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user