The Slayer plugin highlights target monsters based on their name rather
than NPC ID, as many common monsters (skeletons, zombies, etc.) have
nearly endless variations for different models and combat levels.
Previously, this name matching was done via a simple
`String#contains()`, which led to some incorrect matches such as pirates
being highlighted while on rat tasks and Jonny the beard being
highlighted while on bear tasks.
This commit changes matching to use regex to match string boundaries or
whitespace at either end of the task string, ensuring these substring
matches can only happen when word breaks occur. The only known existing
case where this would apply is for baby dragons and brutal dragons,
which are valid alternatives for their respective chromatic dragon
tasks.
The Wilderness and PVP kill-death information box is created while in
these areas regardless of whether the setting (configured via the notice
board at the Edgeville bank) is enabled to show the text, meaning the
widget contains only empty text widgets when the setting is disabled
rather than being null, causing a bounding box to still be drawn and
affecting other snapped widget layout. This commit adds a child class of
WidgetOverlay specific to this widget and prevents it from being drawn
when the setting to show this information is disabled.
This interface allows for drastically simplified skill actions, allowing
us to eschew their name entries in favor of looking up the item name
using the items' compositions (fetched from their IDs) at runtime.
As the number of bonus types increases, the existing system of allowing
only a single type of bonus to be applied, and only allowing actions to
entirely opt out of having bonuses applied rather than more fine-grained
control, is showing its age. This commit redefines all bonus and action
entries in Java enums so that such systems can be better-defined.
Additionally, it comes with the benefit of easier change validation via
testing and enabling item and sprite ID referencing via runelite-api.
Due to an apparent typo, the wrong value was being referenced for the
left bar's Y offset specifically for the resizable viewport with bottom
line interfaces. This commit fixes this reference and the associated
value.
LOOKING_INTO is a generic animation used for numerous activities, and
was previously used as an intermediate animation in a test case. Now
that it is used to trigger idle notifications, a dummy animation has
been inserted to ensure the affected test case will not be broken in the
same way in the future.
Co-authored-by: Nick Wolff <nickwolff2@gmail.com>
Co-authored-by: Arnaud Peralta <arnaud.peralta@gmail.com>
Prior to this commit, ThreeStepCrypticClue simply returned a
concatenation of the active step locations without filtering the mapped
locations in any way. This could lead to NPEs in the plugin as some
cryptic clues have null locations for steps which have no specific
location or have a variable location. This commit addresses this by
making CrypticClue's location field `@Nullable`, filtering null
locations from ThreeStepCrypticClue's getLocations stream, and by adding
a test to ensure ThreeStepCrypticClue's getLocations method cannot yield
any null entries in its return value.
BorderLayout does not guarantee equal sizing of its children, so having
a component centered between two components of unequal sizes will leave
it centered relative to their sizes, such as the following:
```
|-----BorderLayout-------------------------------------------|
||----WEST----||------CENTER------||----------EAST----------||
||------------||------------------||------------------------||
|------------------------------------------------------------|
```
Conversely, GridLayout uses fixed, equal-width columns for its children,
ensuring the center component will always occupy the center third of the
parent's dimensions.
P.S. This change causes labels to truncate earlier as they do not expand
beyond a third of the parent container's dimensions. Because the use
case for this component is with small labels, I do not anticipate this
will cause breakage.
After the addition of runelite-jshell, some of its dependencies are not
preserved during jar minimization, causing the shell dev tool to fail on
some systems. This change ensures all dependencies are preserved in the
resulting shaded jar. This change results in a roughly 2Mb larger output
shaded jar.
As is the case with other graphics-based timers, the imbued heart timer
will not fire if other graphics animations are triggered (such as those
created when fighting the Dagannoth Kings). To add this timer more
reliably, this commit will add the timer when a Magic stat boost occurs
of the appropriate amount after recently clicking on an imbued heart.
Because the magic level boost, combined with an imbued heart click
check, is a reliable way to detect usage of an imbued heart, the
graphics check is removed.
Commit 36bb7c8401 improved the clue scroll
plugin by resetting the active clue step when a beginner or master clue
item was displayed in the chat dialog when receiving a new step. This
commit caused a new bug, however, in that it became possible to click on
a new clue step while the new step dialog was open such that the new
step dialog persisted through a GameTick due to client-server delay,
causing the saved clue item ID to be lost. This commit fixes that issue
by resetting only the active clue object, but not the recorded clue item
ID, as beginner and master clues only use a single item ID.
Previously, when pressing left or right without Shift pressed, the
cursor would end up one character left or right of the start of the
selection, which is not expected behavior compared to how most programs
handle this case. This commit changes this behavior to place the cursor
at the start or end of the selection when pressing left or right,
respectively, when a selection is active.
Teleporting using a trailblazer leagues area teleport previously caused
a home or minigame teleport timer to be created, depending on which of
the two was most recently stored as `lastTeleportClicked`. To avoid
this, a new TeleportWidget has been registered which does not follow any
code paths in the plugin.
The Varlamore Envoy is a quest item which, while having a known location
in the library once a rotation is determined, cannot be found under
certain circumstances. (when the Depths of Despair quest has not been
started, has been collected while completing the quest, and after the
quest is completed) Previously searching a bookcase which could contain
this book and not finding it would cause a state reset. This commit
keeps those null finds from resetting the known library state.
ImageUtil had previously provided a number of image fill and outline
methods which accepted Predicates to control the fill and outline
behavior, but they are not used anywhere in the client or by external
plugins. This commit removes these methods and the
is(Not)?FullyTransparent ColorUtil methods which existed solely as
Predicate defaults for them.
We receive numerous support queries regarding unknown or errantly-set
keybinds causing issues during normal gameplay for our users, especially
since the plugin hub has been released and more plugins are able to
register keybinds. This commit adds logging for keybind registration and
activation for ease of troubleshooting.
Two infernal max cape items exist: one being the item which players can
use, and another presumably being the item displayed in the dialog shown
when combining a max cape and an infernal cape. `INFERNAL_MAX_CAPE` is
the definition for the latter cape, and `INFERNAL_MAX_CAPE_21285` is the
real item players would have.
Because both level up dialogs and BA high gambles use the same widget
interface, commit 40f032bede caused BA
high gambles and some level up dialogs to trigger screenshots if either
config was enabled in the config, as that would set a flag to capture a
screenshot on the next game tick based on the widget text. This commit
adds config checks to the DIALOG_SPRITE_TEXT branch to ensure the
appropriate config flag must be set for a screenshot to be captured.
After the 2020-08-06 game update[1] the Bracelet of slaughter gives a
slightly different text than before. This commit updates the slayer
plugin to identify that new text.
[1]: https://secure.runescape.com/m=news/pvp-changes?oldschool=1
Prior to this commit, reducing the size of an overlay not attached to an
anchor point using the north or west edges and corners such that its
dimensions would be below the minimum overlay size would push that
overlay in that direction as it was dragged. This commit updates the
overlay resize logic to prevent "pushing" overlays when trying to reduce
the width or height below the overlay's minimum size.
Selecting #FFFFFF as a prayer color yields an RGB value of -1. Since all
values will be negative numbers, 0 should be used as an "unset" value
instead.
This commit moves login screen handling out of the KeyManager into the
KeyListener interface so it does not need any knowledge of
HotkeyListener's implementation.
Key remaps have been blocked at the KeyManager level as of commit
01bdbe5aab, so a LOGIN_SCREEN game state
check is no longer needed within individual KeyListeners.
This commit prevents fonts with thin and angled glyphs from having gaps
between the characters and their outline by offsetting outline draws in
one direction exclusively.
This commit removes the hashing feature from container calculation which
alone would make obsolete the ContainerCalculation class, so it
additionally inlines the `calculate()` method into the plugin class.
Additionally, this commit adds null handling for the items parameter of
`calculate()` to prevent NPEs.
Prior to this commit it was possible to receive a change or update in
task by playing on mobile or another client, log back in to RuneLite
with incorrect task information saved to config and, once updated via
checking a slayer gem or speaking with a slayer master, having a task
amount greater than the saved initial task length. This updates the
plugin to use the greater of these numbers so that case is no longer
possible.