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.
(cherry picked from commit 8d1f028758)
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.
Because itemManager#getItemPrice() canonicalizes the passed item ID, it
is no longer necessary to get noted items' base IDs or otherwise
canonicalize item IDs before interacting with the method.
Historically price lookup was done by sending a web request on price
lookups, which required calls to be done on an executor. As of
a1ae397e11, client prices are loaded periodically and cached, thus no
longer imposing any thread requirement on price lookup.
When playing using the resizable viewport and the transparent chatbox,
teleblock messages are sent using a different color than when using the
standard chatbox. This commit removes that color matching entirely from
messages indicating that a teleblock timer has been applied or removed.
Center some hot-cold locations as reported and verified from the mega
issue.
Note: Because this commit makes adjustments to some locations relied
upon in the hot-cold solver class test, some tests must be adjusted in
order to keep passing.
Ref: #9601
This commit adds a new clue type, NamedObjectClueScroll, which allows
highlighting of objects based on object name. (and optionally region
ID(s) where that object should reside)
This commit introduces two new fidlds to the ClueScrollPlugin class to
track player plane changes to address some unusual client behavior.
Namely, when a player travels up or down planes, multiloc objects only
have their varbit values updated on the tick after the plane change
occurs. Since these objects must be in their desired state before
checking their name, these fields are used to track both the player's
plane, and whether the plugin should wait an extra tick to process the
new plane's objects based on a plane change occurring.
Since the writing of this plugin, the wiki has changed the format for
weapon attack speeds[1] and now displays weapon attack speeds in length
of game ticks. Hence, since unarmed attacks are at the rate of once
every 4 game ticks, this commit updates our definition of the unarmed
attack accordingly.
[1] https://oldschool.runescape.wiki/w/Unarmed?diff=8467472&oldid=7810087
This fixes the bug introduced in commit af00494a which incorrectly
compared the attack speed field and labeled it "Stab" in the item stats
tooltip.
Fixesrunelite/runelite#10926
This commit adds an optional and nullable `subDir` string to the
`takeScreenshot()` function, allowing screenshots to be filed into a
subdirectory within the player's screenshots folder.
This replaces uses of `Duration#minusMillis()` and `TemporalUnit`
referencing units of time defined in RSTimeUnits with their definitions.
The Timers plugin constructors are changed to accept implementations of
the `TemporalUnit` interface as they do not require any
`ChronoUnit`-specific APIs. Furthermore, the timer lengths updated use
the game tick lengths described in the OSRS wiki, which generally
closely correspond to the previous length definitions we used.
Location clue scrolls added a hint arrow when the player was nearby one
of the clue's locations. It did not, however clear that arrow if the
locations were changed and the previously-set hint arrow location was no
longer marked. This commit updates this behavior to clear the active
hint arrow each game tick before re-adding any location hint arrows.
(and if no NPC hint arrows are set)
Fixesrunelite/runelite#10370
This commit allows the poison timer to be much more accurate as it
receives periodic updates from the server, and covers edge cases where
poison may be delayed or cured from sources besides potion clicks.
(banked potion drinks, HP orb "Cure" menu option, etc.)
This commit removes the `initialDelay` field from GameTimer as the field
was used only to chain antivenom timers into their follow-up antipoison
timers.
Fixesrunelite/runelite#1471Fixesrunelite/runelite#10724
Co-authored-by: Lucas <lws.ned1260@gmail.com>
Co-authored-by: Adam <Adam@sigterm.info>
As is the case with other graphics-based timers, the imbued heart timer
will not fire if enough 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
which is large enough that it can only be triggered by the heart.
Because the heart's boost scales with the player's level, it gives an
equal boost to the Magic essence and Magic potion boosts, depending on
the base magic level. To account for this, it will only be applied if
the user's base magic level is high enough to assuredly identify that a
potion was not used to trigger the boost.
Fixesrunelite/runelite#3516
Co-authored-by: Lucas <lws.ned1260@gmail.com>
This commit adds a number of related tags to the RuneLite configuration
in order to make it more easily discoverable as many users are not able
to find the settings it contains via search.
Closesrunelite/runelite#8491
The hot-cold solver previously was unable to perform narrowing if given
a temperature change of "SAME", leading to less-than-optimal results
when a number of otherwise-possible solutions could be removed from the
possible results by inferring that since they would have yielded a
"COLDER" or "WARMER" temperature change. This commit removes possible
solutions which are absolutely closer or farther from the previous
tested location.
One pre-exisitng test needed to be updated to pass with this change, as
it expected results to be narrowed more slowly than they now are. In
addition, a minimal test case with only two starting locations has been
added to demonstrate this change is working correctly.
This fixes a bug where the overlay would become hidden when chopping at
a tree without successfully chopping a log for longer than the
configured timeout, and would display "NOT woodcutting" if a log was
successfully chopped thereafter.
Fixesrunelite/runelite#7506
When receiving a new beginner or master clue step (which can be detected
by checking the item ID shown in the chat dialog), the clue ID does not
change, because all beginner and master clues share a single ID. Hence,
we can reset the current clue when the "You've found a new clue!" dialog
appears to prevent stale clue information from persisting between steps.
Closesrunelite/runelite#9830
Because a user can have 0 slayer experience on a new account, we cannot
rely on 0 as the pre-login value. Prior to this change, a player getting
their first slayer kill in the described scenario would cause it not to
be counted toward the tracked task.
This adds a field to Task which dictates the expected exp gain of the
task. When set to a non-zero value, it will prevent slayer exp gains
from registering as a kill unless they are of exactly that amount.
Closesrunelite/runelite#1865
This patch will cause menu entries to have their options and/or targets
recolored in the same way as "Take" menu entries are already recolored
when telegrab menu entries are added.
Closesrunelite/runelite#4930
This prevents loot entries for Chamber of Xeric and Theatre of Blood
chests from being duplicated when viewed multiple times.
Fixesrunelite/runelite#4754
This change causes the locations list to be narrowed on all locator orb
checks, having the consequence of narrowing the list to the visibly
shaking location (for better display via `makeOverlayHint()'). The call
to `reset()' must be removed as it would re-add all locations to the
instance's solver when finding the dig location, which effectively
reverses the apparent narrowing the overlay displayed until that point.
Because the word "cold" is used both as a temperature ("The device is
cold"), and in a temperature change ("but colder than last time."),
HotColdTemperature tried to interpret COLDER temperature changes as a
COLD temperature match. By matching only the section of the temperature
string preceding the optional comma, this bug is avoided.
By killing a monster which has a known respawn timer and leaving its
respawn area (by walking away or teleporting) and returning to it some
time after it has respawned, the plugin can erroneously overwrite its
respawn time with a much longer one. This commit fixes that issue by
assuming that the lower of the observed respawn time and the previously
recorded respawn time is the correct one.
Some clues may have item requirements, but no STASH unit, which would
cause NPEs during rendering. This commit also marks stashUnit as
nullable so this issue can hopefully be avoided in the future.
This fixes a bug where the special attack bar would not be redrawn if
the combat tab was opened with any weapon equipped which did not have a
special attack bar. The weapon text widget is used because it is always
rendered with the combat tab widgets, and does not already have any kind
of listeners attached.
Fixesrunelite/runelite#8946
This adds a hover color effect and a popup menu linking to the plugin's
wiki page to each plugin name label both in the plugin panel and
configuration panels. In the plugin panel, for plugins which have
configurable settings, it also adds a "Configure" menu item to the
added popup menu.
Fixesrunelite/runelite#1518