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 WORLD_MAP_GROUP_ID = 595;
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 TITHE_FARM_GROUP_ID = 241;
public static final int KINGDOM_GROUP_ID = 392;

View File

@@ -43,6 +43,7 @@ import java.io.InputStream;
import java.io.InputStreamReader;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import net.runelite.api.events.GameTick;
import java.time.LocalDate;
import java.util.Date;
import java.util.concurrent.ScheduledExecutorService;
@@ -57,18 +58,16 @@ import net.runelite.api.Client;
import net.runelite.api.GameState;
import net.runelite.api.Point;
import net.runelite.api.events.ChatMessage;
import net.runelite.api.events.WidgetHiddenChanged;
import net.runelite.api.events.WidgetLoaded;
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.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.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.QUEST_COMPLETED_GROUP_ID;
import static net.runelite.api.widgets.WidgetID.RAIDS_REWARD_GROUP_ID;
import net.runelite.api.widgets.WidgetInfo;
import static net.runelite.api.widgets.WidgetInfo.TO_GROUP;
import net.runelite.client.Notifier;
import static net.runelite.client.RuneLite.SCREENSHOT_DIR;
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 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",
"You feel something weird sneaking into your backpack",
@@ -132,7 +131,9 @@ public class ScreenshotPlugin extends Plugin
private Integer barrowsNumber;
private Integer raidsNumber;
private Integer chambersOfXericNumber;
private boolean shouldTakeScreenshot;
@Inject
private ScreenshotConfig config;
@@ -233,6 +234,38 @@ public class ScreenshotPlugin extends Plugin
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
public void onChatMessage(ChatMessage event)
{
@@ -269,7 +302,7 @@ public class ScreenshotPlugin extends Plugin
Matcher m = NUMBER_PATTERN.matcher(Text.removeTags(chatMessage));
if (m.find())
{
raidsNumber = Integer.valueOf(m.group());
chambersOfXericNumber = Integer.valueOf(m.group());
return;
}
}
@@ -290,29 +323,20 @@ public class ScreenshotPlugin extends Plugin
@Subscribe
public void loadWidgets(WidgetLoaded event)
{
if (!config.screenshotKingdom())
{
return;
}
if (event.getGroupId() == WidgetID.KINGDOM_GROUP_ID)
{
String fileName = "Kingdom " + LocalDate.now();
takeScreenshot(fileName);
}
}
String fileName;
int groupId = event.getGroupId();
@Subscribe
public void hideWidgets(WidgetHiddenChanged event)
{
Widget widget = event.getWidget();
if (widget.isHidden())
{
return;
}
switch (TO_GROUP(widget.getId()))
switch (groupId)
{
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 DIALOG_SPRITE_GROUP_ID:
if (!config.screenshotLevels())
@@ -320,56 +344,31 @@ public class ScreenshotPlugin extends Plugin
return;
}
break;
case QUEST_COMPLETED_GROUP_ID:
case CLUE_SCROLL_REWARD_GROUP_ID:
case BARROWS_REWARD_GROUP_ID:
case RAIDS_REWARD_GROUP_ID:
if (!config.screenshotRewards())
case KINGDOM_GROUP_ID:
if (!config.screenshotKingdom())
{
return;
}
break;
}
String fileName;
switch (TO_GROUP(widget.getId()))
switch (groupId)
{
case LEVEL_UP_GROUP_ID:
case KINGDOM_GROUP_ID:
{
fileName = parseLevelUpWidget(WidgetInfo.LEVEL_UP_LEVEL);
fileName = "Kingdom " + LocalDate.now();
takeScreenshot(fileName);
break;
}
case DIALOG_SPRITE_GROUP_ID:
case CHAMBERS_OF_XERIC_REWARD_GROUP_ID:
{
fileName = parseLevelUpWidget(WidgetInfo.DIALOG_SPRITE_TEXT);
break;
}
case QUEST_COMPLETED_GROUP_ID:
{
Widget textChild = client.getWidget(WidgetInfo.QUEST_COMPLETED_NAME_TEXT);
if (textChild == null)
if (chambersOfXericNumber == null)
{
return;
}
// "You have completed The Corsair Curse!"
String text = textChild.getText();
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;
fileName = "Chambers of Xeric(" + chambersOfXericNumber + ")";
chambersOfXericNumber = null;
break;
}
case BARROWS_REWARD_GROUP_ID:
@@ -383,26 +382,30 @@ public class ScreenshotPlugin extends Plugin
barrowsNumber = null;
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;
}
fileName = "Raids(" + raidsNumber + ")";
raidsNumber = null;
fileName = Character.toUpperCase(clueType.charAt(0)) + clueType.substring(1) + "(" + clueNumber + ")";
clueType = null;
clueNumber = null;
break;
}
default:
return;
}
if (fileName == null)
{
return;
}
takeScreenshot(fileName);
}
@@ -589,8 +592,8 @@ public class ScreenshotPlugin extends Plugin
}
@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 net.runelite.api.Client;
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 static net.runelite.api.widgets.WidgetID.DIALOG_SPRITE_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 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
@Bind
@@ -121,12 +122,12 @@ public class ScreenshotPluginTest
}
@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);
assertEquals(489, screenshotPlugin.getRaidsNumber());
assertEquals(489, screenshotPlugin.getChambersOfXericNumber());
}
@Test
@@ -142,9 +143,12 @@ public class ScreenshotPluginTest
assertEquals("Hitpoints(99)", screenshotPlugin.parseLevelUpWidget(LEVEL_UP_LEVEL));
WidgetHiddenChanged event = new WidgetHiddenChanged();
event.setWidget(widget);
screenshotPlugin.hideWidgets(event);
WidgetLoaded event = new WidgetLoaded();
event.setGroupId(LEVEL_UP_GROUP_ID);
screenshotPlugin.loadWidgets(event);
GameTick tick = new GameTick();
screenshotPlugin.onGameTick(tick);
verify(drawManager).requestNextFrameListener(Matchers.any(Consumer.class));
}
@@ -162,9 +166,12 @@ public class ScreenshotPluginTest
assertEquals("Firemaking(9)", screenshotPlugin.parseLevelUpWidget(LEVEL_UP_LEVEL));
WidgetHiddenChanged event = new WidgetHiddenChanged();
event.setWidget(widget);
screenshotPlugin.hideWidgets(event);
WidgetLoaded event = new WidgetLoaded();
event.setGroupId(LEVEL_UP_GROUP_ID);
screenshotPlugin.loadWidgets(event);
GameTick tick = new GameTick();
screenshotPlugin.onGameTick(tick);
verify(drawManager).requestNextFrameListener(Matchers.any(Consumer.class));
}
@@ -182,9 +189,12 @@ public class ScreenshotPluginTest
assertEquals("Attack(70)", screenshotPlugin.parseLevelUpWidget(LEVEL_UP_LEVEL));
WidgetHiddenChanged event = new WidgetHiddenChanged();
event.setWidget(widget);
screenshotPlugin.hideWidgets(event);
WidgetLoaded event = new WidgetLoaded();
event.setGroupId(LEVEL_UP_GROUP_ID);
screenshotPlugin.loadWidgets(event);
GameTick tick = new GameTick();
screenshotPlugin.onGameTick(tick);
verify(drawManager).requestNextFrameListener(Matchers.any(Consumer.class));
}
@@ -198,13 +208,16 @@ public class ScreenshotPluginTest
Widget levelChild = mock(Widget.class);
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));
WidgetHiddenChanged event = new WidgetHiddenChanged();
event.setWidget(widget);
screenshotPlugin.hideWidgets(event);
WidgetLoaded event = new WidgetLoaded();
event.setGroupId(DIALOG_SPRITE_GROUP_ID);
screenshotPlugin.loadWidgets(event);
GameTick tick = new GameTick();
screenshotPlugin.onGameTick(tick);
verify(drawManager).requestNextFrameListener(Matchers.any(Consumer.class));
}