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.
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
When logging in to the game with the plugin disabled, enabling it will
not cause points to be filled, as the game state trigger will not be
reached. This commit properly loads points on plugin startup and clears
them on shutdown.
This includes various code quality improvements such as stronger access
control, enforcing newlines at EOF, naming magic numbers and strings,
and utilizing higher efficiency methods and class constructors.
This fixes the bug introduced in runelite/runelite#5890 where attempting
to mark a non-marked tile while having the "Remember color per tile"
config disabled would prevent new tiles from being marked. Instead, it
properly ensures that unmarking tiles with that config disabled will not
re-mark it with an updated color, causing a second unmark to be needed.
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
When logging in to the game with the plugin disabled, enabling it will
not cause points to be filled, as the game state trigger will not be
reached. This commit properly loads points on plugin startup and clears
them on shutdown.
This includes various code quality improvements such as stronger access
control, enforcing newlines at EOF, naming magic numbers and strings,
and utilizing higher efficiency methods and class constructors.
Particularly since exposing StatBoosts and StatChanges through the item
stats service, it has become evident that storing stat change data as a
human-readable string is not especially useful for consumers of the
service as they must handle string processing, particularly for special
cases such as range stat boosts or spicy stews. This patch changes
StatChanges to expose their relative, theoretical, and absolute change
values as ints instead for ease of consumption, and adds methods to get
human-readable versions of these relative and theoretical values for
display purposes.
Fixesrunelite/runelite#6594