This commit is contained in:
James Munson
2019-04-24 17:22:23 -07:00
parent 778524eee1
commit f6f1a4b7d0
17 changed files with 349 additions and 62 deletions

View File

@@ -81,14 +81,14 @@ class LapCounterOverlay extends Overlay
panelComponent.getChildren().clear();
panelComponent.getChildren().add(LineComponent.builder()
.left("Total Laps")
.left("Total Laps:")
.right(Integer.toString(session.getTotalLaps()))
.build());
if (session.getLapsTillLevel() > 0)
{
panelComponent.getChildren().add(LineComponent.builder()
.left("Laps till level")
.left("Laps until level:")
.right(Integer.toString(session.getLapsTillLevel()))
.build());
}

View File

@@ -303,7 +303,7 @@ public class CrypticClue extends ClueScroll implements TextClueScroll, NpcClueSc
new CrypticClue("Search the drawers, upstairs in the bank to the East of Varrock.", DRAWERS_7194, new WorldPoint(3250, 3420, 1), "Search the drawers upstairs in Varrock east bank."),
new CrypticClue("Speak to Hazelmere.", "Hazelmere", new WorldPoint(2677, 3088, 1), "Located upstairs in the house to the north of fairy ring CLS. Answer: 6859"),
new CrypticClue("The effects of this fire are magnified.", new WorldPoint(1179, 3626, 0), "Dig by the fire beside Ket'sal K'uk in the westernmost part of the Kebos Swamp. "),
new CrypticClue("Always walking around the castle grounds and somehow everyone's age.", "Hans", new WorldPoint(3221, 3218, 0), "Talk to Hans walking around Lumbridge Castle."),
new CrypticClue("Always walking around the castle grounds and somehow knows everyone's age.", "Hans", new WorldPoint(3221, 3218, 0), "Talk to Hans walking around Lumbridge Castle."),
new CrypticClue("In the place Duke Horacio calls home, talk to a man with a hat dropped by goblins.", "Cook", new WorldPoint(3208, 3213, 0), "Talk to the Cook in Lumbridge Castle."),
new CrypticClue("In a village of barbarians, I am the one who guards the village from up high.", "Hunding", new WorldPoint(3097, 3432, 2), "Talk to Hunding atop the tower on the east side of Barbarian Village."),
new CrypticClue("Talk to Charlie the Tramp in Varrock.", "Charlie the Tramp", new WorldPoint(3209, 3390, 0), "Talk to Charlie the Tramp by the southern entrance to Varrock. He will give you a task."),

View File

@@ -143,8 +143,9 @@ public enum HotColdLocation
WILDERNESS_5(new WorldPoint(3169, 3558, 0), WILDERNESS, "North of the Grand Exchange, level 5 Wilderness."),
WILDERNESS_12(new WorldPoint(3038, 3612, 0), WILDERNESS, "South-east of the Dark Warriors' Fortress, level 12 Wilderness."),
WILDERNESS_20(new WorldPoint(3225, 3676, 0), WILDERNESS, "East of the Corporeal Beast's lair, level 20 Wilderness."),
WILDERNESS_27(new WorldPoint(3174, 3735, 0), WILDERNESS, "North-west of the Corporeal Beast cave, in the ruins at level 27 Wilderness."),
WILDERNESS_27(new WorldPoint(3174, 3735, 0), WILDERNESS, "Inside the Ruins north of the Graveyard of Shadows, level 27 Wilderness."),
WILDERNESS_28(new WorldPoint(3374, 3734, 0), WILDERNESS, "East of Venenatis' nest, level 28 Wilderness."),
WILDERNESS_32(new WorldPoint(3311, 3773, 0), WILDERNESS, "North of Venenatis' nest, level 32 Wilderness."),
WILDERNESS_35(new WorldPoint(3153, 3795, 0), WILDERNESS, "East of the Wilderness canoe exit, level 35 Wilderness."),
WILDERNESS_37(new WorldPoint(2975, 3811, 0), WILDERNESS, "South-east of the Chaos Temple, level 37 Wilderness."),
WILDERNESS_38(new WorldPoint(3294, 3817, 0), WILDERNESS, "South of Callisto, level 38 Wilderness."),

View File

@@ -406,10 +406,7 @@ public class DiscordPlugin extends Plugin
final EnumSet<WorldType> worldType = client.getWorldType();
// Do not show location in PVP activities
if (worldType.contains(WorldType.SEASONAL_DEADMAN) ||
worldType.contains(WorldType.DEADMAN) ||
worldType.contains(WorldType.PVP) ||
worldType.contains(WorldType.PVP_HIGH_RISK))
if (WorldType.isPvpWorld(worldType))
{
return false;
}

View File

@@ -118,4 +118,15 @@ public interface FishingConfig extends Config
{
return true;
}
@ConfigItem(
position = 8,
keyName = "trawlerTimer",
name = "Trawler timer in MM:SS",
description = "Trawler Timer will display a more accurate timer in MM:SS format."
)
default boolean trawlerTimer()
{
return true;
}
}

View File

@@ -57,6 +57,10 @@ import net.runelite.api.events.ItemContainerChanged;
import net.runelite.api.events.NpcDespawned;
import net.runelite.api.events.NpcSpawned;
import net.runelite.api.events.VarbitChanged;
import net.runelite.api.events.WidgetLoaded;
import net.runelite.api.widgets.Widget;
import net.runelite.api.widgets.WidgetID;
import net.runelite.api.widgets.WidgetInfo;
import net.runelite.client.Notifier;
import net.runelite.client.config.ConfigManager;
import net.runelite.client.eventbus.Subscribe;
@@ -78,9 +82,11 @@ public class FishingPlugin extends Plugin
{
private static final int TRAWLER_SHIP_REGION_NORMAL = 7499;
private static final int TRAWLER_SHIP_REGION_SINKING = 8011;
private static final int TRAWLER_TIME_LIMIT_IN_SECONDS = 614;
private static final int TRAWLER_ACTIVITY_THRESHOLD = Math.round(0.15f * 255);
private Instant trawlerStartTime;
@Getter(AccessLevel.PACKAGE)
private final FishingSession session = new FishingSession();
@@ -142,6 +148,7 @@ public class FishingPlugin extends Plugin
minnowSpots.clear();
trawlerNotificationSent = false;
currentSpot = null;
trawlerStartTime = null;
}
@Subscribe
@@ -296,6 +303,11 @@ public class FishingPlugin extends Plugin
}
}
}
if (config.trawlerTimer())
{
updateTrawlerTimer();
}
}
@Subscribe
@@ -351,6 +363,66 @@ public class FishingPlugin extends Plugin
}
}
@Subscribe
public void onWidgetLoaded(WidgetLoaded event)
{
if (event.getGroupId() == WidgetID.FISHING_TRAWLER_GROUP_ID)
{
trawlerStartTime = Instant.now();
}
}
/**
* Changes the Fishing Trawler timer widget from minutes to minutes and seconds
*/
private void updateTrawlerTimer()
{
if (trawlerStartTime == null)
{
return;
}
int regionID = client.getLocalPlayer().getWorldLocation().getRegionID();
if (regionID != TRAWLER_SHIP_REGION_NORMAL && regionID != TRAWLER_SHIP_REGION_SINKING)
{
log.debug("Trawler session ended");
return;
}
Widget trawlerTimerWidget = client.getWidget(WidgetInfo.FISHING_TRAWLER_TIMER);
if (trawlerTimerWidget == null)
{
return;
}
long timeLeft = TRAWLER_TIME_LIMIT_IN_SECONDS - Duration.between(trawlerStartTime, Instant.now()).getSeconds();
int minutes = (int) timeLeft / 60;
int seconds = (int) timeLeft % 60;
final StringBuilder trawlerText = new StringBuilder();
trawlerText.append("Time Left: ");
if (minutes > 0)
{
trawlerText.append(minutes);
}
else
{
trawlerText.append("00");
}
trawlerText.append(':');
if (seconds < 10)
{
trawlerText.append("0");
}
trawlerText.append(seconds);
trawlerTimerWidget.setText(trawlerText.toString());
}
private void inverseSortSpotDistanceFromPlayer()
{
final LocalPoint cameraPoint = new LocalPoint(client.getCameraX(), client.getCameraY());

View File

@@ -36,12 +36,14 @@ import net.runelite.client.ui.overlay.components.PanelComponent;
class NpcAggroAreaNotWorkingOverlay extends Overlay
{
private final NpcAggroAreaPlugin plugin;
private final NpcAggroAreaConfig config;
private final PanelComponent panelComponent;
@Inject
private NpcAggroAreaNotWorkingOverlay(NpcAggroAreaPlugin plugin)
private NpcAggroAreaNotWorkingOverlay(NpcAggroAreaPlugin plugin, NpcAggroAreaConfig config)
{
this.plugin = plugin;
this.config = config;
panelComponent = new PanelComponent();
panelComponent.setPreferredSize(new Dimension(150, 0));
@@ -56,7 +58,7 @@ class NpcAggroAreaNotWorkingOverlay extends Overlay
@Override
public Dimension render(Graphics2D graphics)
{
if (!plugin.isActive() || plugin.getSafeCenters()[1] != null)
if (!plugin.isActive() || plugin.getSafeCenters()[1] != null || config.hideOverlayHint())
{
return null;
}

View File

@@ -36,12 +36,11 @@ import net.runelite.api.SpriteID;
import net.runelite.api.VarClientInt;
import net.runelite.api.Varbits;
import net.runelite.api.events.GameStateChanged;
import net.runelite.api.events.ScriptCallbackEvent;
import net.runelite.api.events.VarClientIntChanged;
import net.runelite.api.events.VarbitChanged;
import net.runelite.api.events.WidgetLoaded;
import net.runelite.api.widgets.JavaScriptCallback;
import net.runelite.api.widgets.Widget;
import net.runelite.api.widgets.WidgetID;
import net.runelite.api.widgets.WidgetInfo;
import net.runelite.api.widgets.WidgetPositionMode;
import net.runelite.api.widgets.WidgetType;
@@ -104,46 +103,45 @@ public class QuestListPlugin extends Plugin
}
@Subscribe
public void onWidgetLoaded(WidgetLoaded widgetLoaded)
public void onScriptCallbackEvent(ScriptCallbackEvent event)
{
if (widgetLoaded.getGroupId() == WidgetID.QUESTLIST_GROUP_ID)
if (!event.getEventName().equals("questProgressUpdated"))
{
Widget header = client.getWidget(WidgetInfo.QUESTLIST_BOX);
if (header != null)
{
questSearchButton = header.createChild(-1, WidgetType.GRAPHIC);
questSearchButton.setSpriteId(SpriteID.GE_SEARCH);
questSearchButton.setOriginalWidth(18);
questSearchButton.setOriginalHeight(17);
questSearchButton.setXPositionMode(WidgetPositionMode.ABSOLUTE_RIGHT);
questSearchButton.setOriginalX(5);
questSearchButton.setOriginalY(0);
questSearchButton.setHasListener(true);
questSearchButton.setAction(1, MENU_OPEN);
questSearchButton.setOnOpListener((JavaScriptCallback) e -> openSearch());
questSearchButton.setName(MENU_SEARCH);
questSearchButton.revalidate();
return;
}
questHideButton = header.createChild(-1, WidgetType.GRAPHIC);
redrawHideButton();
Widget header = client.getWidget(WidgetInfo.QUESTLIST_BOX);
if (header != null)
{
questSearchButton = header.createChild(-1, WidgetType.GRAPHIC);
questSearchButton.setSpriteId(SpriteID.GE_SEARCH);
questSearchButton.setOriginalWidth(18);
questSearchButton.setOriginalHeight(17);
questSearchButton.setXPositionMode(WidgetPositionMode.ABSOLUTE_RIGHT);
questSearchButton.setOriginalX(5);
questSearchButton.setOriginalY(0);
questSearchButton.setHasListener(true);
questSearchButton.setAction(1, MENU_OPEN);
questSearchButton.setOnOpListener((JavaScriptCallback) e -> openSearch());
questSearchButton.setName(MENU_SEARCH);
questSearchButton.revalidate();
questHideButton.setOriginalWidth(13);
questHideButton.setOriginalHeight(13);
questHideButton.setXPositionMode(WidgetPositionMode.ABSOLUTE_RIGHT);
questHideButton.setOriginalX(24);
questHideButton.setOriginalY(2);
questHideButton.setHasListener(true);
questHideButton.setOnOpListener((JavaScriptCallback) e -> toggleHidden());
questHideButton.setAction(1, MENU_TOGGLE);
questHideButton.revalidate();
questHideButton = header.createChild(-1, WidgetType.GRAPHIC);
redrawHideButton();
questSet = new EnumMap<>(QuestContainer.class);
questHideButton.setOriginalWidth(13);
questHideButton.setOriginalHeight(13);
questHideButton.setXPositionMode(WidgetPositionMode.ABSOLUTE_RIGHT);
questHideButton.setOriginalX(24);
questHideButton.setOriginalY(2);
questHideButton.setHasListener(true);
questHideButton.setOnOpListener((JavaScriptCallback) e -> toggleHidden());
questHideButton.setAction(1, MENU_TOGGLE);
questHideButton.revalidate();
if (!header.isHidden())
{
updateFilter();
}
}
questSet = new EnumMap<>(QuestContainer.class);
updateFilter();
}
}
@@ -259,21 +257,26 @@ public class QuestListPlugin extends Plugin
int y = miniList.getRelativeY() + miniList.getHeight() + 10;
int newHeight = 0;
int newHeight;
if (container.getScrollHeight() > 0)
{
newHeight = (container.getScrollY() * y) / container.getScrollHeight();
}
else
{
newHeight = 0;
}
container.setScrollHeight(y);
container.revalidateScroll();
client.runScript(
ScriptID.UPDATE_SCROLLBAR,
WidgetInfo.QUESTLIST_SCROLLBAR.getId(),
WidgetInfo.QUESTLIST_CONTAINER.getId(),
newHeight
);
clientThread.invokeLater(() ->
client.runScript(
ScriptID.UPDATE_SCROLLBAR,
WidgetInfo.QUESTLIST_SCROLLBAR.getId(),
WidgetInfo.QUESTLIST_CONTAINER.getId(),
newHeight
));
}
private void updateList(QuestContainer questContainer, String filter)
@@ -309,7 +312,7 @@ public class QuestListPlugin extends Plugin
// Find all of the widgets that we care about, sorting by their Y value
quests = Arrays.stream(list.getDynamicChildren())
.sorted(Comparator.comparing(Widget::getRelativeY))
.filter(w -> !w.isSelfHidden() && !QUEST_HEADERS.contains(w.getText()))
.filter(w -> !QUEST_HEADERS.contains(w.getText()))
.map(w -> new QuestWidget(w, Text.removeTags(w.getText()).toLowerCase()))
.collect(Collectors.toList());
questSet.put(questContainer, quests);

View File

@@ -554,7 +554,7 @@ public class WorldHopperPlugin extends Plugin
if (config.quickhopOutOfDanger())
{
currentWorldTypes.remove(WorldType.PVP);
currentWorldTypes.remove(WorldType.PVP_HIGH_RISK);
currentWorldTypes.remove(WorldType.HIGH_RISK);
}
// Don't regard these worlds as a type that must be hopped between
currentWorldTypes.remove(WorldType.BOUNTY);

View File

@@ -245,7 +245,7 @@ class WorldTableRow extends JPanel
return;
}
else if (world.getTypes().contains(WorldType.PVP)
|| world.getTypes().contains(WorldType.PVP_HIGH_RISK)
|| world.getTypes().contains(WorldType.HIGH_RISK)
|| world.getTypes().contains(WorldType.DEADMAN)
|| world.getTypes().contains(WorldType.SEASONAL_DEADMAN))
{