Add support for the virtual level up message to screenshot plugin

This commit is contained in:
Magic fTail
2018-12-17 08:50:08 +01:00
parent 3bdf8aa2fc
commit e0aa7dc67f
3 changed files with 36 additions and 25 deletions

View File

@@ -68,6 +68,7 @@ import net.runelite.api.events.WidgetLoaded;
import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.Widget;
import static net.runelite.api.widgets.WidgetID.BARROWS_REWARD_GROUP_ID; import static net.runelite.api.widgets.WidgetID.BARROWS_REWARD_GROUP_ID;
import static net.runelite.api.widgets.WidgetID.CHAMBERS_OF_XERIC_REWARD_GROUP_ID; import static net.runelite.api.widgets.WidgetID.CHAMBERS_OF_XERIC_REWARD_GROUP_ID;
import static net.runelite.api.widgets.WidgetID.CHATBOX_GROUP_ID;
import static net.runelite.api.widgets.WidgetID.CLUE_SCROLL_REWARD_GROUP_ID; import static net.runelite.api.widgets.WidgetID.CLUE_SCROLL_REWARD_GROUP_ID;
import static net.runelite.api.widgets.WidgetID.DIALOG_SPRITE_GROUP_ID; import static net.runelite.api.widgets.WidgetID.DIALOG_SPRITE_GROUP_ID;
import static net.runelite.api.widgets.WidgetID.KINGDOM_GROUP_ID; import static net.runelite.api.widgets.WidgetID.KINGDOM_GROUP_ID;
@@ -265,11 +266,11 @@ public class ScreenshotPlugin extends Plugin
String fileName = null; String fileName = null;
if (client.getWidget(WidgetInfo.LEVEL_UP_LEVEL) != null) if (client.getWidget(WidgetInfo.LEVEL_UP_LEVEL) != null)
{ {
fileName = parseLevelUpWidget(WidgetInfo.LEVEL_UP_LEVEL); fileName = parseLevelUpWidget(client.getWidget(WidgetInfo.LEVEL_UP_LEVEL));
} }
else if (client.getWidget(WidgetInfo.DIALOG_SPRITE_TEXT) != null) else if (client.getWidget(WidgetInfo.DIALOG_SPRITE_TEXT) != null)
{ {
fileName = parseLevelUpWidget(WidgetInfo.DIALOG_SPRITE_TEXT); fileName = parseLevelUpWidget(client.getWidget(WidgetInfo.DIALOG_SPRITE_TEXT));
} }
else if (client.getWidget(WidgetInfo.QUEST_COMPLETED_NAME_TEXT) != null) else if (client.getWidget(WidgetInfo.QUEST_COMPLETED_NAME_TEXT) != null)
{ {
@@ -277,6 +278,10 @@ public class ScreenshotPlugin extends Plugin
String text = client.getWidget(WidgetInfo.QUEST_COMPLETED_NAME_TEXT).getText(); String text = client.getWidget(WidgetInfo.QUEST_COMPLETED_NAME_TEXT).getText();
fileName = "Quest(" + text.substring(19, text.length() - 1) + ")"; fileName = "Quest(" + text.substring(19, text.length() - 1) + ")";
} }
else if (client.getWidget(WidgetInfo.CHATBOX_CONTAINER).getChild(1) != null)
{
fileName = parseLevelUpWidget(client.getWidget(WidgetInfo.CHATBOX_CONTAINER).getChild(1));
}
if (fileName != null) if (fileName != null)
{ {
@@ -401,6 +406,7 @@ public class ScreenshotPlugin extends Plugin
break; break;
case LEVEL_UP_GROUP_ID: case LEVEL_UP_GROUP_ID:
case DIALOG_SPRITE_GROUP_ID: case DIALOG_SPRITE_GROUP_ID:
case CHATBOX_GROUP_ID:
if (!config.screenshotLevels()) if (!config.screenshotLevels())
{ {
return; return;
@@ -458,6 +464,7 @@ public class ScreenshotPlugin extends Plugin
case LEVEL_UP_GROUP_ID: case LEVEL_UP_GROUP_ID:
case DIALOG_SPRITE_GROUP_ID: case DIALOG_SPRITE_GROUP_ID:
case QUEST_COMPLETED_GROUP_ID: case QUEST_COMPLETED_GROUP_ID:
case CHATBOX_GROUP_ID:
{ {
// level up widget gets loaded prior to the text being set, so wait until the next tick // level up widget gets loaded prior to the text being set, so wait until the next tick
shouldTakeScreenshot = true; shouldTakeScreenshot = true;
@@ -483,22 +490,21 @@ public class ScreenshotPlugin extends Plugin
} }
/** /**
* Receives a WidgetInfo pointing to the middle widget of the level-up dialog, * Receives a Widget containing the level-up dialog,
* and parses it into a shortened string for filename usage. * and parses it into a shortened string for filename usage.
* *
* @param levelUpLevel WidgetInfo pointing to the required text widget, * @param levelUpWidget Widget containing the level-up text,
* with the format "Your Skill (level is/are) now 99." * with the format "Your Skill (level is/are) now 99."
* @return Shortened string in the format "Skill(99)" * @return Shortened string in the format "Skill(99)"
*/ */
String parseLevelUpWidget(WidgetInfo levelUpLevel) String parseLevelUpWidget(Widget levelUpWidget)
{ {
Widget levelChild = client.getWidget(levelUpLevel); if (levelUpWidget == null)
if (levelChild == null)
{ {
return null; return null;
} }
Matcher m = LEVEL_UP_PATTERN.matcher(levelChild.getText()); Matcher m = LEVEL_UP_PATTERN.matcher(levelUpWidget.getText());
if (!m.matches()) if (!m.matches())
{ {
return null; return null;

View File

@@ -43,8 +43,10 @@ import net.runelite.api.events.ExperienceChanged;
import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameStateChanged;
import net.runelite.api.events.GameTick; import net.runelite.api.events.GameTick;
import net.runelite.api.events.ScriptCallbackEvent; import net.runelite.api.events.ScriptCallbackEvent;
import net.runelite.api.events.WidgetLoaded;
import net.runelite.api.widgets.JavaScriptCallback; import net.runelite.api.widgets.JavaScriptCallback;
import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.Widget;
import net.runelite.api.widgets.WidgetID;
import net.runelite.api.widgets.WidgetInfo; import net.runelite.api.widgets.WidgetInfo;
import net.runelite.api.widgets.WidgetPositionMode; import net.runelite.api.widgets.WidgetPositionMode;
import net.runelite.api.widgets.WidgetSizeMode; import net.runelite.api.widgets.WidgetSizeMode;
@@ -354,6 +356,9 @@ public class VirtualLevelsPlugin extends Plugin implements KeyListener
clientThread.invoke(() -> client.runScript(ScriptID.CLEAR_CHATBOX_PANEL)); clientThread.invoke(() -> client.runScript(ScriptID.CLEAR_CHATBOX_PANEL));
clientThread.invoke(() -> buildVirtualLevelUp(skill)); clientThread.invoke(() -> buildVirtualLevelUp(skill));
WidgetLoaded widgetLoaded = new WidgetLoaded();
widgetLoaded.setGroupId(WidgetID.CHATBOX_GROUP_ID);
eventBus.post(widgetLoaded);
} }
@Override @Override

View File

@@ -167,12 +167,12 @@ public class ScreenshotPluginTest
Widget widget = mock(Widget.class); Widget widget = mock(Widget.class);
when(widget.getId()).thenReturn(PACK(LEVEL_UP_GROUP_ID, 0)); when(widget.getId()).thenReturn(PACK(LEVEL_UP_GROUP_ID, 0));
Widget levelChild = mock(Widget.class); Widget levelUpWidget = mock(Widget.class);
when(client.getWidget(Matchers.eq(LEVEL_UP_LEVEL))).thenReturn(levelChild); when(client.getWidget(Matchers.eq(LEVEL_UP_LEVEL))).thenReturn(levelUpWidget);
when(levelChild.getText()).thenReturn("Your Hitpoints are now 99."); when(levelUpWidget.getText()).thenReturn("Your Hitpoints are now 99.");
assertEquals("Hitpoints(99)", screenshotPlugin.parseLevelUpWidget(LEVEL_UP_LEVEL)); assertEquals("Hitpoints(99)", screenshotPlugin.parseLevelUpWidget(levelUpWidget));
WidgetLoaded event = new WidgetLoaded(); WidgetLoaded event = new WidgetLoaded();
event.setGroupId(LEVEL_UP_GROUP_ID); event.setGroupId(LEVEL_UP_GROUP_ID);
@@ -190,12 +190,12 @@ public class ScreenshotPluginTest
Widget widget = mock(Widget.class); Widget widget = mock(Widget.class);
when(widget.getId()).thenReturn(PACK(LEVEL_UP_GROUP_ID, 0)); when(widget.getId()).thenReturn(PACK(LEVEL_UP_GROUP_ID, 0));
Widget levelChild = mock(Widget.class); Widget levelUpWidget = mock(Widget.class);
when(client.getWidget(Matchers.eq(LEVEL_UP_LEVEL))).thenReturn(levelChild); when(client.getWidget(Matchers.eq(LEVEL_UP_LEVEL))).thenReturn(levelUpWidget);
when(levelChild.getText()).thenReturn("Your Firemaking level is now 9."); when(levelUpWidget.getText()).thenReturn("Your Firemaking level is now 9.");
assertEquals("Firemaking(9)", screenshotPlugin.parseLevelUpWidget(LEVEL_UP_LEVEL)); assertEquals("Firemaking(9)", screenshotPlugin.parseLevelUpWidget(levelUpWidget));
WidgetLoaded event = new WidgetLoaded(); WidgetLoaded event = new WidgetLoaded();
event.setGroupId(LEVEL_UP_GROUP_ID); event.setGroupId(LEVEL_UP_GROUP_ID);
@@ -213,12 +213,12 @@ public class ScreenshotPluginTest
Widget widget = mock(Widget.class); Widget widget = mock(Widget.class);
when(widget.getId()).thenReturn(PACK(LEVEL_UP_GROUP_ID, 0)); when(widget.getId()).thenReturn(PACK(LEVEL_UP_GROUP_ID, 0));
Widget levelChild = mock(Widget.class); Widget levelUpWidget = mock(Widget.class);
when(client.getWidget(Matchers.eq(LEVEL_UP_LEVEL))).thenReturn(levelChild); when(client.getWidget(Matchers.eq(LEVEL_UP_LEVEL))).thenReturn(levelUpWidget);
when(levelChild.getText()).thenReturn("Your Attack level is now 70."); when(levelUpWidget.getText()).thenReturn("Your Attack level is now 70.");
assertEquals("Attack(70)", screenshotPlugin.parseLevelUpWidget(LEVEL_UP_LEVEL)); assertEquals("Attack(70)", screenshotPlugin.parseLevelUpWidget(levelUpWidget));
WidgetLoaded event = new WidgetLoaded(); WidgetLoaded event = new WidgetLoaded();
event.setGroupId(LEVEL_UP_GROUP_ID); event.setGroupId(LEVEL_UP_GROUP_ID);
@@ -236,12 +236,12 @@ public class ScreenshotPluginTest
Widget widget = mock(Widget.class); Widget widget = mock(Widget.class);
when(widget.getId()).thenReturn(PACK(DIALOG_SPRITE_GROUP_ID, 0)); when(widget.getId()).thenReturn(PACK(DIALOG_SPRITE_GROUP_ID, 0));
Widget levelChild = mock(Widget.class); Widget levelUpWidget = mock(Widget.class);
when(client.getWidget(Matchers.eq(DIALOG_SPRITE_TEXT))).thenReturn(levelChild); when(client.getWidget(Matchers.eq(DIALOG_SPRITE_TEXT))).thenReturn(levelUpWidget);
when(levelChild.getText()).thenReturn("<col=000080>Congratulations, you've just advanced a Hunter level.<col=000000><br><br>Your Hunter level is now 2."); when(levelUpWidget.getText()).thenReturn("<col=000080>Congratulations, you've just advanced a Hunter level.<col=000000><br><br>Your Hunter level is now 2.");
assertEquals("Hunter(2)", screenshotPlugin.parseLevelUpWidget(DIALOG_SPRITE_TEXT)); assertEquals("Hunter(2)", screenshotPlugin.parseLevelUpWidget(levelUpWidget));
WidgetLoaded event = new WidgetLoaded(); WidgetLoaded event = new WidgetLoaded();
event.setGroupId(DIALOG_SPRITE_GROUP_ID); event.setGroupId(DIALOG_SPRITE_GROUP_ID);