player indicators: decorate player name in trade window

Co-authored-by: Vandager <66982484+Vandager@users.noreply.github.com>
This commit is contained in:
Vandager
2022-04-20 23:07:40 -04:00
committed by Adam
parent c4055e765a
commit 1d0a0315d4
4 changed files with 63 additions and 1 deletions

View File

@@ -408,4 +408,10 @@ public final class ScriptID
@ScriptArguments(integer = 6) @ScriptArguments(integer = 6)
public static final int INVENTORY_DRAWITEM = 6011; public static final int INVENTORY_DRAWITEM = 6011;
/**
* Initializes the trade interface
*/
@ScriptArguments(integer = 6)
public static final int TRADE_MAIN_INIT = 755;
} }

View File

@@ -174,6 +174,7 @@ public final class WidgetID
public static final int GROUP_STORAGE_INVENTORY_GROUP_ID = 725; public static final int GROUP_STORAGE_INVENTORY_GROUP_ID = 725;
public static final int GROUP_STORAGE_GROUP_ID = 724; public static final int GROUP_STORAGE_GROUP_ID = 724;
public static final int WILDERNESS_LOOT_CHEST = 742; public static final int WILDERNESS_LOOT_CHEST = 742;
public static final int TRADE_WINDOW_GROUP_ID = 335;
static class WorldMap static class WorldMap
{ {
@@ -936,4 +937,9 @@ public final class WidgetID
static final int HEADER = 1; static final int HEADER = 1;
static final int MEMBERS = 6; static final int MEMBERS = 6;
} }
static class Trade
{
static final int HEADER = 31;
}
} }

View File

@@ -561,6 +561,8 @@ public enum WidgetInfo
CLAN_GUEST_MEMBER_LIST(WidgetID.CLAN_GUEST_GROUP_ID, WidgetID.ClanGuest.MEMBERS), CLAN_GUEST_MEMBER_LIST(WidgetID.CLAN_GUEST_GROUP_ID, WidgetID.ClanGuest.MEMBERS),
POH_TREASURE_CHEST_INVENTORY_CONTAINER(WidgetID.POH_TREASURE_CHEST_INVENTORY_GROUP_ID, 0), POH_TREASURE_CHEST_INVENTORY_CONTAINER(WidgetID.POH_TREASURE_CHEST_INVENTORY_GROUP_ID, 0),
TRADE_WINDOW_HEADER(WidgetID.TRADE_WINDOW_GROUP_ID, WidgetID.Trade.HEADER),
; ;
private final int groupId; private final int groupId;

View File

@@ -42,12 +42,17 @@ import static net.runelite.api.MenuAction.PLAYER_SEVENTH_OPTION;
import static net.runelite.api.MenuAction.PLAYER_SIXTH_OPTION; import static net.runelite.api.MenuAction.PLAYER_SIXTH_OPTION;
import static net.runelite.api.MenuAction.PLAYER_THIRD_OPTION; import static net.runelite.api.MenuAction.PLAYER_THIRD_OPTION;
import static net.runelite.api.MenuAction.RUNELITE_PLAYER; import static net.runelite.api.MenuAction.RUNELITE_PLAYER;
import static net.runelite.api.MenuAction.WIDGET_TARGET_ON_PLAYER;
import static net.runelite.api.MenuAction.WALK; import static net.runelite.api.MenuAction.WALK;
import static net.runelite.api.MenuAction.WIDGET_TARGET_ON_PLAYER;
import net.runelite.api.MenuEntry; import net.runelite.api.MenuEntry;
import net.runelite.api.Player; import net.runelite.api.Player;
import net.runelite.api.ScriptID;
import net.runelite.api.clan.ClanTitle; import net.runelite.api.clan.ClanTitle;
import net.runelite.api.events.ClientTick; import net.runelite.api.events.ClientTick;
import net.runelite.api.events.ScriptPostFired;
import net.runelite.api.widgets.Widget;
import net.runelite.api.widgets.WidgetInfo;
import net.runelite.client.callback.ClientThread;
import net.runelite.client.config.ConfigManager; import net.runelite.client.config.ConfigManager;
import net.runelite.client.eventbus.Subscribe; import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.game.ChatIconManager; import net.runelite.client.game.ChatIconManager;
@@ -63,6 +68,8 @@ import net.runelite.client.util.ColorUtil;
) )
public class PlayerIndicatorsPlugin extends Plugin public class PlayerIndicatorsPlugin extends Plugin
{ {
private static final String TRADING_WITH_TEXT = "Trading with: ";
@Inject @Inject
private OverlayManager overlayManager; private OverlayManager overlayManager;
@@ -87,6 +94,9 @@ public class PlayerIndicatorsPlugin extends Plugin
@Inject @Inject
private ChatIconManager chatIconManager; private ChatIconManager chatIconManager;
@Inject
private ClientThread clientThread;
@Provides @Provides
PlayerIndicatorsConfig provideConfig(ConfigManager configManager) PlayerIndicatorsConfig provideConfig(ConfigManager configManager)
{ {
@@ -249,6 +259,44 @@ public class PlayerIndicatorsPlugin extends Plugin
return newTarget; return newTarget;
} }
@Subscribe
public void onScriptPostFired(ScriptPostFired event)
{
if (event.getScriptId() == ScriptID.TRADE_MAIN_INIT)
{
clientThread.invokeLater(() ->
{
Widget tradeTitle = client.getWidget(WidgetInfo.TRADE_WINDOW_HEADER);
String header = tradeTitle.getText();
String playerName = header.substring(TRADING_WITH_TEXT.length());
Player targetPlayer = findPlayer(playerName);
if (targetPlayer == null)
{
return;
}
Decorations playerColor = getDecorations(targetPlayer);
if (playerColor != null)
{
tradeTitle.setText(TRADING_WITH_TEXT + ColorUtil.wrapWithColorTag(playerName, playerColor.color));
}
});
}
}
private Player findPlayer(String name)
{
for (Player player : client.getPlayers())
{
if (player.getName().equals(name))
{
return player;
}
}
return null;
}
@Value @Value
private static class Decorations private static class Decorations
{ {