From 611ba3976447041f68ec0c8904ee97d62d7105fe Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 14 Feb 2021 18:25:28 -0500 Subject: [PATCH] object indicators: fix marking multilocs after var changes If a var changes after the marked objects are loaded, causing the object's name to match a marked object, it would not be identified due to it not firing spawn events --- .../objectindicators/ColorTileObject.java | 9 ++++++++ .../ObjectIndicatorsOverlay.java | 13 +++++++++++ .../ObjectIndicatorsPlugin.java | 22 ++++++++++--------- 3 files changed, 34 insertions(+), 10 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ColorTileObject.java b/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ColorTileObject.java index 1af342cd20..b1641a4885 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ColorTileObject.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ColorTileObject.java @@ -27,6 +27,7 @@ package net.runelite.client.plugins.objectindicators; import java.awt.Color; import lombok.RequiredArgsConstructor; import lombok.Value; +import net.runelite.api.ObjectComposition; import net.runelite.api.TileObject; /** @@ -38,5 +39,13 @@ import net.runelite.api.TileObject; class ColorTileObject { private final TileObject tileObject; + /** + * Non-transformed object composition for the object + */ + private final ObjectComposition composition; + /** + * Name to highlight for multilocs + */ + private final String name; private final Color color; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ObjectIndicatorsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ObjectIndicatorsOverlay.java index 0e52edf0a4..980e9317d9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ObjectIndicatorsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ObjectIndicatorsOverlay.java @@ -33,6 +33,7 @@ import net.runelite.api.Client; import net.runelite.api.DecorativeObject; import net.runelite.api.GameObject; import net.runelite.api.GroundObject; +import net.runelite.api.ObjectComposition; import net.runelite.api.TileObject; import net.runelite.api.WallObject; import net.runelite.client.ui.overlay.Overlay; @@ -71,6 +72,18 @@ class ObjectIndicatorsOverlay extends Overlay continue; } + ObjectComposition composition = colorTileObject.getComposition(); + if (composition.getImpostorIds() != null) + { + // This is a multiloc + composition = composition.getImpostor(); + // Only mark the object if the name still matches + if (composition == null || !composition.getName().equals(colorTileObject.getName())) + { + continue; + } + } + if (color == null || !config.rememberObjectColors()) { // Fallback to the current config if the object is marked before the addition of multiple colors diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ObjectIndicatorsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ObjectIndicatorsPlugin.java index cfa99092a8..6e24212005 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ObjectIndicatorsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ObjectIndicatorsPlugin.java @@ -292,16 +292,15 @@ public class ObjectIndicatorsPlugin extends Plugin { if (worldPoint.getRegionX() == objectPoint.getRegionX() && worldPoint.getRegionY() == objectPoint.getRegionY() - && worldPoint.getPlane() == objectPoint.getZ()) + && worldPoint.getPlane() == objectPoint.getZ() + && objectPoint.getId() == object.getId()) { - // Transform object to get the name which matches against what we've stored - ObjectComposition composition = getObjectComposition(object.getId()); - if (composition != null && objectPoint.getName().equals(composition.getName())) - { - log.debug("Marking object {} due to matching {}", object, objectPoint); - objects.add(new ColorTileObject(object, objectPoint.getColor())); - break; - } + log.debug("Marking object {} due to matching {}", object, objectPoint); + objects.add(new ColorTileObject(object, + client.getObjectDefinition(object.getId()), + objectPoint.getName(), + objectPoint.getColor())); + break; } } } @@ -415,7 +414,10 @@ public class ObjectIndicatorsPlugin extends Plugin else { objectPoints.add(point); - objects.add(new ColorTileObject(object, color)); + objects.add(new ColorTileObject(object, + client.getObjectDefinition(object.getId()), + name, + color)); log.debug("Marking object: {}", point); }