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.
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
The requirement for pickpocketing an elf is to have started Mourning's
End Part I for access to Lletya, not to have completed Mourning's End
Part II.
Fixesrunelite/runelite#8806
As described in 5bebd34bb, HIGH_RISK is not a PVP world type.
Note: this will not affect the world hopper plugin, as it both
explicitly references the high risk world type, and references the
http-api WorldType implementation, not the runelite-api WorldType which
is being modified in this commit.
Fixesrunelite/runelite#8605Fixesrunelite/runelite#8624
This world type is not specifically a PVP world type; at the time of
this commit, world 365 is a non-PVP high-risk world, where the world is
the same as a regular members' world, except that the Protect Item
prayer is disabled.
This commit adds a PVP-world-like combat level range text to the
wilderness level in non-PVP worlds, displaying the range of combats you
can attack at any given wilderness level.
Closesrunelite/runelite#3103Closesrunelite/runelite#3318
This adds a color indicator per marker, saved to config, allowing
multiple markers to be different colors. In addition, a configuration
option is added to switch between per-tile color display or current
configured color display. (that is, new or existing behavior)
This change will set a color in config for old markers with null colors
when those markers are loaded.
Fixesrunelite/runelite#3395