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;
|
package net.runelite.client.plugins.devtools;
|
||||||
|
|
||||||
|
import com.google.common.collect.HashMultimap;
|
||||||
|
import com.google.common.collect.Multimap;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import java.awt.BorderLayout;
|
import java.awt.BorderLayout;
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
@@ -48,13 +50,16 @@ import javax.swing.border.CompoundBorder;
|
|||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import net.runelite.api.Client;
|
import net.runelite.api.Client;
|
||||||
|
import net.runelite.api.IndexDataBase;
|
||||||
import net.runelite.api.VarClientInt;
|
import net.runelite.api.VarClientInt;
|
||||||
import net.runelite.api.VarClientStr;
|
import net.runelite.api.VarClientStr;
|
||||||
import net.runelite.api.VarPlayer;
|
import net.runelite.api.VarPlayer;
|
||||||
|
import net.runelite.api.VarbitComposition;
|
||||||
import net.runelite.api.Varbits;
|
import net.runelite.api.Varbits;
|
||||||
import net.runelite.api.events.VarClientIntChanged;
|
import net.runelite.api.events.VarClientIntChanged;
|
||||||
import net.runelite.api.events.VarClientStrChanged;
|
import net.runelite.api.events.VarClientStrChanged;
|
||||||
import net.runelite.api.events.VarbitChanged;
|
import net.runelite.api.events.VarbitChanged;
|
||||||
|
import net.runelite.client.callback.ClientThread;
|
||||||
import net.runelite.client.eventbus.EventBus;
|
import net.runelite.client.eventbus.EventBus;
|
||||||
import net.runelite.client.eventbus.Subscribe;
|
import net.runelite.client.eventbus.Subscribe;
|
||||||
import net.runelite.client.ui.ClientUI;
|
import net.runelite.client.ui.ClientUI;
|
||||||
@@ -84,9 +89,10 @@ class VarInspector extends JFrame
|
|||||||
}
|
}
|
||||||
|
|
||||||
private final static int MAX_LOG_ENTRIES = 10_000;
|
private final static int MAX_LOG_ENTRIES = 10_000;
|
||||||
|
private static final int VARBITS_ARCHIVE_ID = 14;
|
||||||
|
|
||||||
private final Client client;
|
private final Client client;
|
||||||
private final DevToolsPlugin plugin;
|
private final ClientThread clientThread;
|
||||||
private final EventBus eventBus;
|
private final EventBus eventBus;
|
||||||
|
|
||||||
private final JPanel tracker = new JPanel();
|
private final JPanel tracker = new JPanel();
|
||||||
@@ -95,16 +101,16 @@ class VarInspector extends JFrame
|
|||||||
|
|
||||||
private int[] oldVarps = null;
|
private int[] oldVarps = null;
|
||||||
private int[] oldVarps2 = null;
|
private int[] oldVarps2 = null;
|
||||||
private int numVarbits = 10000;
|
|
||||||
|
|
||||||
|
private Multimap<Integer, Integer> varbits;
|
||||||
private Map<Integer, Object> varcs = null;
|
private Map<Integer, Object> varcs = null;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
VarInspector(Client client, EventBus eventBus, DevToolsPlugin plugin)
|
VarInspector(Client client, ClientThread clientThread, EventBus eventBus, DevToolsPlugin plugin)
|
||||||
{
|
{
|
||||||
this.eventBus = eventBus;
|
|
||||||
this.client = client;
|
this.client = client;
|
||||||
this.plugin = plugin;
|
this.clientThread = clientThread;
|
||||||
|
this.eventBus = eventBus;
|
||||||
|
|
||||||
setTitle("RuneLite Var Inspector");
|
setTitle("RuneLite Var Inspector");
|
||||||
setIconImage(ClientUI.ICON);
|
setIconImage(ClientUI.ICON);
|
||||||
@@ -213,63 +219,51 @@ class VarInspector extends JFrame
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
public void onVarbitChanged(VarbitChanged ev)
|
public void onVarbitChanged(VarbitChanged varbitChanged)
|
||||||
{
|
{
|
||||||
|
int index = varbitChanged.getIndex();
|
||||||
int[] varps = client.getVarps();
|
int[] varps = client.getVarps();
|
||||||
|
|
||||||
// Check varbits
|
// 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);
|
// Set the varbit so it doesn't show in the varp changes
|
||||||
int neew = client.getVarbitValue(varps, i);
|
// However, some varbits share common bits, so we only do it in oldVarps2
|
||||||
if (old != neew)
|
// 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);
|
String name = Integer.toString(i);
|
||||||
for (Varbits varbit : Varbits.values())
|
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);
|
|
||||||
}
|
}
|
||||||
}
|
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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check varps
|
// 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];
|
String name = Integer.toString(index);
|
||||||
int neew = varps[i];
|
for (VarPlayer varp : VarPlayer.values())
|
||||||
if (old != neew)
|
|
||||||
{
|
{
|
||||||
String name = String.format("%d", i);
|
if (varp.getId() == index)
|
||||||
for (VarPlayer varp : VarPlayer.values())
|
|
||||||
{
|
{
|
||||||
if (varp.getId() == i)
|
name = String.format("%s(%d)", varp.name(), index);
|
||||||
{
|
break;
|
||||||
name = String.format("%s(%d)", varp.name(), i);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
addVarLog(VarType.VARP, name, old, neew);
|
|
||||||
}
|
}
|
||||||
|
addVarLog(VarType.VARP, name, old, neew);
|
||||||
}
|
}
|
||||||
|
|
||||||
System.arraycopy(client.getVarps(), 0, oldVarps, 0, oldVarps.length);
|
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, oldVarps, 0, oldVarps.length);
|
||||||
System.arraycopy(client.getVarps(), 0, oldVarps2, 0, oldVarps2.length);
|
System.arraycopy(client.getVarps(), 0, oldVarps2, 0, oldVarps2.length);
|
||||||
varcs = new HashMap<>(client.getVarcMap());
|
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);
|
eventBus.register(this);
|
||||||
setVisible(true);
|
setVisible(true);
|
||||||
@@ -361,5 +371,7 @@ class VarInspector extends JFrame
|
|||||||
tracker.removeAll();
|
tracker.removeAll();
|
||||||
eventBus.unregister(this);
|
eventBus.unregister(this);
|
||||||
setVisible(false);
|
setVisible(false);
|
||||||
|
varcs = null;
|
||||||
|
varbits = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user