Merge pull request #4245 from MagicfTail/Improvescreenshot

ScreenshotPlugin: Bugfixes
This commit is contained in:
Adam
2018-07-14 16:01:38 -04:00
committed by GitHub
3 changed files with 109 additions and 93 deletions

View File

@@ -91,7 +91,7 @@ public class WidgetID
public static final int BLAST_FURNACE_GROUP_ID = 474; public static final int BLAST_FURNACE_GROUP_ID = 474;
public static final int WORLD_MAP_GROUP_ID = 595; public static final int WORLD_MAP_GROUP_ID = 595;
public static final int PYRAMID_PLUNDER_GROUP_ID = 428; public static final int PYRAMID_PLUNDER_GROUP_ID = 428;
public static final int RAIDS_REWARD_GROUP_ID = 539; public static final int CHAMBERS_OF_XERIC_REWARD_GROUP_ID = 539;
public static final int EXPERIENCE_TRACKER_GROUP_ID = 122; public static final int EXPERIENCE_TRACKER_GROUP_ID = 122;
public static final int TITHE_FARM_GROUP_ID = 241; public static final int TITHE_FARM_GROUP_ID = 241;
public static final int KINGDOM_GROUP_ID = 392; public static final int KINGDOM_GROUP_ID = 392;

View File

@@ -43,6 +43,7 @@ import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import net.runelite.api.events.GameTick;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.Date; import java.util.Date;
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledExecutorService;
@@ -57,18 +58,16 @@ import net.runelite.api.Client;
import net.runelite.api.GameState; import net.runelite.api.GameState;
import net.runelite.api.Point; import net.runelite.api.Point;
import net.runelite.api.events.ChatMessage; import net.runelite.api.events.ChatMessage;
import net.runelite.api.events.WidgetHiddenChanged;
import net.runelite.api.events.WidgetLoaded; import net.runelite.api.events.WidgetLoaded;
import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.Widget;
import net.runelite.api.widgets.WidgetID;
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.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.LEVEL_UP_GROUP_ID; import static net.runelite.api.widgets.WidgetID.LEVEL_UP_GROUP_ID;
import static net.runelite.api.widgets.WidgetID.QUEST_COMPLETED_GROUP_ID; import static net.runelite.api.widgets.WidgetID.QUEST_COMPLETED_GROUP_ID;
import static net.runelite.api.widgets.WidgetID.RAIDS_REWARD_GROUP_ID;
import net.runelite.api.widgets.WidgetInfo; import net.runelite.api.widgets.WidgetInfo;
import static net.runelite.api.widgets.WidgetInfo.TO_GROUP;
import net.runelite.client.Notifier; import net.runelite.client.Notifier;
import static net.runelite.client.RuneLite.SCREENSHOT_DIR; import static net.runelite.client.RuneLite.SCREENSHOT_DIR;
import net.runelite.client.config.ConfigManager; import net.runelite.client.config.ConfigManager;
@@ -108,7 +107,7 @@ public class ScreenshotPlugin extends Plugin
private static final DateFormat TIME_FORMAT = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss"); private static final DateFormat TIME_FORMAT = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss");
private static final Pattern NUMBER_PATTERN = Pattern.compile("([0-9]+)"); private static final Pattern NUMBER_PATTERN = Pattern.compile("([0-9]+)");
private static final Pattern LEVEL_UP_PATTERN = Pattern.compile("Your ([a-zA-Z]+) (?:level is|are)? now (\\d+)\\."); private static final Pattern LEVEL_UP_PATTERN = Pattern.compile(".*Your ([a-zA-Z]+) (?:level is|are)? now (\\d+)\\.");
private static final ImmutableList<String> PET_MESSAGES = ImmutableList.of("You have a funny feeling like you're being followed", private static final ImmutableList<String> PET_MESSAGES = ImmutableList.of("You have a funny feeling like you're being followed",
"You feel something weird sneaking into your backpack", "You feel something weird sneaking into your backpack",
@@ -132,7 +131,9 @@ public class ScreenshotPlugin extends Plugin
private Integer barrowsNumber; private Integer barrowsNumber;
private Integer raidsNumber; private Integer chambersOfXericNumber;
private boolean shouldTakeScreenshot;
@Inject @Inject
private ScreenshotConfig config; private ScreenshotConfig config;
@@ -233,6 +234,38 @@ public class ScreenshotPlugin extends Plugin
keyManager.unregisterKeyListener(hotkeyListener); keyManager.unregisterKeyListener(hotkeyListener);
} }
@Subscribe
public void onGameTick(GameTick event)
{
if (!shouldTakeScreenshot)
{
return;
}
shouldTakeScreenshot = false;
String fileName = null;
if (client.getWidget(WidgetInfo.LEVEL_UP_LEVEL) != null)
{
fileName = parseLevelUpWidget(WidgetInfo.LEVEL_UP_LEVEL);
}
else if (client.getWidget(WidgetInfo.DIALOG_SPRITE_TEXT) != null)
{
fileName = parseLevelUpWidget(WidgetInfo.DIALOG_SPRITE_TEXT);
}
else if (client.getWidget(WidgetInfo.QUEST_COMPLETED_NAME_TEXT) != null)
{
// "You have completed The Corsair Curse!"
String text = client.getWidget(WidgetInfo.QUEST_COMPLETED_NAME_TEXT).getText();
fileName = text.substring(19, text.length() - 1);
}
if (fileName != null)
{
takeScreenshot(fileName);
}
}
@Subscribe @Subscribe
public void onChatMessage(ChatMessage event) public void onChatMessage(ChatMessage event)
{ {
@@ -269,7 +302,7 @@ public class ScreenshotPlugin extends Plugin
Matcher m = NUMBER_PATTERN.matcher(Text.removeTags(chatMessage)); Matcher m = NUMBER_PATTERN.matcher(Text.removeTags(chatMessage));
if (m.find()) if (m.find())
{ {
raidsNumber = Integer.valueOf(m.group()); chambersOfXericNumber = Integer.valueOf(m.group());
return; return;
} }
} }
@@ -290,29 +323,20 @@ public class ScreenshotPlugin extends Plugin
@Subscribe @Subscribe
public void loadWidgets(WidgetLoaded event) public void loadWidgets(WidgetLoaded event)
{ {
if (!config.screenshotKingdom()) String fileName;
{ int groupId = event.getGroupId();
return;
}
if (event.getGroupId() == WidgetID.KINGDOM_GROUP_ID)
{
String fileName = "Kingdom " + LocalDate.now();
takeScreenshot(fileName);
}
}
@Subscribe switch (groupId)
public void hideWidgets(WidgetHiddenChanged event)
{
Widget widget = event.getWidget();
if (widget.isHidden())
{
return;
}
switch (TO_GROUP(widget.getId()))
{ {
case QUEST_COMPLETED_GROUP_ID:
case CLUE_SCROLL_REWARD_GROUP_ID:
case CHAMBERS_OF_XERIC_REWARD_GROUP_ID:
case BARROWS_REWARD_GROUP_ID:
if (!config.screenshotRewards())
{
return;
}
break;
case LEVEL_UP_GROUP_ID: case LEVEL_UP_GROUP_ID:
case DIALOG_SPRITE_GROUP_ID: case DIALOG_SPRITE_GROUP_ID:
if (!config.screenshotLevels()) if (!config.screenshotLevels())
@@ -320,56 +344,31 @@ public class ScreenshotPlugin extends Plugin
return; return;
} }
break; break;
case QUEST_COMPLETED_GROUP_ID: case KINGDOM_GROUP_ID:
case CLUE_SCROLL_REWARD_GROUP_ID: if (!config.screenshotKingdom())
case BARROWS_REWARD_GROUP_ID:
case RAIDS_REWARD_GROUP_ID:
if (!config.screenshotRewards())
{ {
return; return;
} }
break; break;
} }
String fileName; switch (groupId)
switch (TO_GROUP(widget.getId()))
{ {
case LEVEL_UP_GROUP_ID: case KINGDOM_GROUP_ID:
{ {
fileName = parseLevelUpWidget(WidgetInfo.LEVEL_UP_LEVEL); fileName = "Kingdom " + LocalDate.now();
takeScreenshot(fileName);
break; break;
} }
case DIALOG_SPRITE_GROUP_ID: case CHAMBERS_OF_XERIC_REWARD_GROUP_ID:
{ {
fileName = parseLevelUpWidget(WidgetInfo.DIALOG_SPRITE_TEXT); if (chambersOfXericNumber == null)
break;
}
case QUEST_COMPLETED_GROUP_ID:
{
Widget textChild = client.getWidget(WidgetInfo.QUEST_COMPLETED_NAME_TEXT);
if (textChild == null)
{ {
return; return;
} }
// "You have completed The Corsair Curse!" fileName = "Chambers of Xeric(" + chambersOfXericNumber + ")";
String text = textChild.getText(); chambersOfXericNumber = null;
fileName = text.substring(19, text.length() - 1);
break;
}
case CLUE_SCROLL_REWARD_GROUP_ID:
{
if (clueType == null || clueNumber == null)
{
return;
}
fileName = Character.toUpperCase(clueType.charAt(0)) + clueType.substring(1) + "(" + clueNumber + ")";
clueType = null;
clueNumber = null;
break; break;
} }
case BARROWS_REWARD_GROUP_ID: case BARROWS_REWARD_GROUP_ID:
@@ -383,26 +382,30 @@ public class ScreenshotPlugin extends Plugin
barrowsNumber = null; barrowsNumber = null;
break; break;
} }
case RAIDS_REWARD_GROUP_ID: case LEVEL_UP_GROUP_ID:
case DIALOG_SPRITE_GROUP_ID:
case QUEST_COMPLETED_GROUP_ID:
{ {
if (raidsNumber == null) // level up widget gets loaded prior to the text being set, so wait until the next tick
shouldTakeScreenshot = true;
return;
}
case CLUE_SCROLL_REWARD_GROUP_ID:
{
if (clueType == null || clueNumber == null)
{ {
return; return;
} }
fileName = "Raids(" + raidsNumber + ")"; fileName = Character.toUpperCase(clueType.charAt(0)) + clueType.substring(1) + "(" + clueNumber + ")";
raidsNumber = null; clueType = null;
clueNumber = null;
break; break;
} }
default: default:
return; return;
} }
if (fileName == null)
{
return;
}
takeScreenshot(fileName); takeScreenshot(fileName);
} }
@@ -589,8 +592,8 @@ public class ScreenshotPlugin extends Plugin
} }
@VisibleForTesting @VisibleForTesting
int getRaidsNumber() int getChambersOfXericNumber()
{ {
return raidsNumber; return chambersOfXericNumber;
} }
} }

View File

@@ -33,7 +33,8 @@ import javax.inject.Inject;
import static net.runelite.api.ChatMessageType.SERVER; import static net.runelite.api.ChatMessageType.SERVER;
import net.runelite.api.Client; import net.runelite.api.Client;
import net.runelite.api.events.ChatMessage; import net.runelite.api.events.ChatMessage;
import net.runelite.api.events.WidgetHiddenChanged; import net.runelite.api.events.GameTick;
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.DIALOG_SPRITE_GROUP_ID; import static net.runelite.api.widgets.WidgetID.DIALOG_SPRITE_GROUP_ID;
import static net.runelite.api.widgets.WidgetID.LEVEL_UP_GROUP_ID; import static net.runelite.api.widgets.WidgetID.LEVEL_UP_GROUP_ID;
@@ -60,7 +61,7 @@ public class ScreenshotPluginTest
{ {
private static final String CLUE_SCROLL = "<col=3300ff>You have completed 28 medium Treasure Trails</col>"; private static final String CLUE_SCROLL = "<col=3300ff>You have completed 28 medium Treasure Trails</col>";
private static final String BARROWS_CHEST = "Your Barrows chest count is <col=ff0000>310</col>"; private static final String BARROWS_CHEST = "Your Barrows chest count is <col=ff0000>310</col>";
private static final String RAIDS_CHEST = "Your completed Chambers of Xeric count is: <col=ff0000>489.</col>"; private static final String CHAMBERS_OF_XERIC_CHEST = "Your completed Chambers of Xeric count is: <col=ff0000>489</col>.";
@Mock @Mock
@Bind @Bind
@@ -121,12 +122,12 @@ public class ScreenshotPluginTest
} }
@Test @Test
public void testRaidsChest() public void testChambersOfXericChest()
{ {
ChatMessage chatMessageEvent = new ChatMessage(SERVER, "Seth", RAIDS_CHEST, null); ChatMessage chatMessageEvent = new ChatMessage(SERVER, "Seth", CHAMBERS_OF_XERIC_CHEST, null);
screenshotPlugin.onChatMessage(chatMessageEvent); screenshotPlugin.onChatMessage(chatMessageEvent);
assertEquals(489, screenshotPlugin.getRaidsNumber()); assertEquals(489, screenshotPlugin.getChambersOfXericNumber());
} }
@Test @Test
@@ -142,9 +143,12 @@ public class ScreenshotPluginTest
assertEquals("Hitpoints(99)", screenshotPlugin.parseLevelUpWidget(LEVEL_UP_LEVEL)); assertEquals("Hitpoints(99)", screenshotPlugin.parseLevelUpWidget(LEVEL_UP_LEVEL));
WidgetHiddenChanged event = new WidgetHiddenChanged(); WidgetLoaded event = new WidgetLoaded();
event.setWidget(widget); event.setGroupId(LEVEL_UP_GROUP_ID);
screenshotPlugin.hideWidgets(event); screenshotPlugin.loadWidgets(event);
GameTick tick = new GameTick();
screenshotPlugin.onGameTick(tick);
verify(drawManager).requestNextFrameListener(Matchers.any(Consumer.class)); verify(drawManager).requestNextFrameListener(Matchers.any(Consumer.class));
} }
@@ -162,9 +166,12 @@ public class ScreenshotPluginTest
assertEquals("Firemaking(9)", screenshotPlugin.parseLevelUpWidget(LEVEL_UP_LEVEL)); assertEquals("Firemaking(9)", screenshotPlugin.parseLevelUpWidget(LEVEL_UP_LEVEL));
WidgetHiddenChanged event = new WidgetHiddenChanged(); WidgetLoaded event = new WidgetLoaded();
event.setWidget(widget); event.setGroupId(LEVEL_UP_GROUP_ID);
screenshotPlugin.hideWidgets(event); screenshotPlugin.loadWidgets(event);
GameTick tick = new GameTick();
screenshotPlugin.onGameTick(tick);
verify(drawManager).requestNextFrameListener(Matchers.any(Consumer.class)); verify(drawManager).requestNextFrameListener(Matchers.any(Consumer.class));
} }
@@ -182,9 +189,12 @@ public class ScreenshotPluginTest
assertEquals("Attack(70)", screenshotPlugin.parseLevelUpWidget(LEVEL_UP_LEVEL)); assertEquals("Attack(70)", screenshotPlugin.parseLevelUpWidget(LEVEL_UP_LEVEL));
WidgetHiddenChanged event = new WidgetHiddenChanged(); WidgetLoaded event = new WidgetLoaded();
event.setWidget(widget); event.setGroupId(LEVEL_UP_GROUP_ID);
screenshotPlugin.hideWidgets(event); screenshotPlugin.loadWidgets(event);
GameTick tick = new GameTick();
screenshotPlugin.onGameTick(tick);
verify(drawManager).requestNextFrameListener(Matchers.any(Consumer.class)); verify(drawManager).requestNextFrameListener(Matchers.any(Consumer.class));
} }
@@ -198,13 +208,16 @@ public class ScreenshotPluginTest
Widget levelChild = mock(Widget.class); Widget levelChild = mock(Widget.class);
when(client.getWidget(Matchers.eq(DIALOG_SPRITE_TEXT))).thenReturn(levelChild); when(client.getWidget(Matchers.eq(DIALOG_SPRITE_TEXT))).thenReturn(levelChild);
when(levelChild.getText()).thenReturn("Your Hunter level is now 2."); when(levelChild.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(DIALOG_SPRITE_TEXT));
WidgetHiddenChanged event = new WidgetHiddenChanged(); WidgetLoaded event = new WidgetLoaded();
event.setWidget(widget); event.setGroupId(DIALOG_SPRITE_GROUP_ID);
screenshotPlugin.hideWidgets(event); screenshotPlugin.loadWidgets(event);
GameTick tick = new GameTick();
screenshotPlugin.onGameTick(tick);
verify(drawManager).requestNextFrameListener(Matchers.any(Consumer.class)); verify(drawManager).requestNextFrameListener(Matchers.any(Consumer.class));
} }