Skip to content

Development#394

Merged
chsami merged 11 commits intomainfrom
development
Apr 16, 2026
Merged

Development#394
chsami merged 11 commits intomainfrom
development

Conversation

@chsami
Copy link
Copy Markdown
Owner

@chsami chsami commented Apr 16, 2026

No description provided.

chsami and others added 11 commits April 12, 2026 21:57
… cape teleport (#386)

- Add Prifddinas Crystal tree patch (requires 74 Farming + Song of the Elves)
  handled after Kastori and before Avium Savannah in the run order
- Startup validation aborts with a dialog if the player lacks the Farming
  level or quest completion when the Prifddinas patch is enabled
- Withdraw the Construction cape from the bank when the player has 99
  Construction, to support POH/teleport options
- Bump plugin version to 1.1.2

Co-authored-by: dev <dev@riskless.id>
Mahogany tree protection was a copy-paste of Teak's limpwurt root payment.
The actual protection cost is 25 Yanillian hops, so update the MAHOGANY
enum to match. Bumps plugin version to 1.1.3.

Co-authored-by: dev <dev@riskless.id>
* Reduce code smell, implement sawmill vouchers and Lazy Mode

* Change profit calculation to be more accurate, extended Logs enum to prevent weird bank withdrawal shenanigans (tried withdrawing yew logs)

* undo main runner change

* re-add microbot.java. whoops.

* Karam fix (#351)

* fix: karambwan fairy ring return

Made-with: Cursor

* plugin now clicks on fairy ring to get back to karams

* commit

* fix(barrows): POH banking, Ferox escape, and tablet timing

- POH: require instanced world view, use nearestOnClientThread, cap portal retries, only nexus-shutdown when no normal portal
- outOfSupplies: Ferox via ring of dueling (equipped name check, inventory rings, rub/dialogue); treat POH as needing Ferox hop when walker cannot
- Close bank before Teleport-to-house tablet (travel and chest leave) so the tablet is not used while the bank is still open

---------

Co-authored-by: chsami <sami.chkhachkhi@gmail.com>
Co-authored-by: stonksCode <99895926+stonksCode@users.noreply.github.com>
Co-authored-by: irkedMATT <59846844+irkedMATT@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ing (#393)

Standalone firemaking plugin that scans surrounding tiles to find the
best east-west line of open ground, lights fires walking west, banks,
and adapts around existing fires and obstacles on return. Supports Bank
Heist briefcase for instant banking.

Adds [DV] prefix to PluginConstants for plugin branding.

Co-authored-by: dev <dev@riskless.id>
Adds an optional "League mode (anti-AFK)" toggle that presses a random
arrow key whenever the client's idle ticks approach its idle-timeout
threshold. This keeps the session alive on Leagues where the auto-bank
relic lets you mine indefinitely without any interaction that would
otherwise reset the idle timer.

Co-authored-by: dev <dev@riskless.id>
…bility (#391)

* fix(BirdHunter): trap ownership, safer drops, area bugs (v1.0.2)

- Track own traps by spatial proximity at GameObjectSpawned (RuneLite
  Hunter pattern) so the bot ignores other players' bird snares and
  only interacts with its own. Seed lastTickLocalPlayerLocation on the
  client thread at startUp to close a race where the first laid snare
  was never recorded and the bot got stuck in an infinite
  movePlayerOffObject loop on its own untracked trap.
- Strict drop whitelist: only raw bird meat, plus bones when bury-bones
  is off. Replaces dropAllExcept(keepList) which could wipe the entire
  inventory if the keep list was misconfigured.
- walkBackToArea picks the nearest tile in the hunting area instead of
  a random one.
- Hunting area centered correctly via (2*radius+1)^2 instead of the
  off-center (radius^2+1)^2 that biased NE.

* fix(BirdHunter): proper error stop, click retry, loot-agnostic placement

- Missing-snares precondition now uses the canonical Microbot pattern
  (showMessage + stopPlugin from inside the scheduled loop) so the
  plugin actually stops instead of silently idling with the toggle on.
- Remove keepItemNames config — unused after the strict drop whitelist
  (raw bird meat + bones when bury-bones is off).
- interactWithTrap retries the click up to 3x and exits as soon as the
  inventory changes. Prior single-click + 7s inventory-changes wait +
  2×2s gaussian sleeps stalled ~13s per missed click; now ~1-2s on hit,
  ~8s worst case.
- setTrap uses isGameObjectAt instead of Rs2Player.isStandingOnGameObject
  because the latter also returns true for ground items. Dropped loot
  doesn't actually block snare placement, so the bot was needlessly
  walking off loot tiles.
* feat(PluginConstants): add PERT prefix for LeftClickCastPlugin

Yellow [P] prefix in the #FFFF00 color family, matching the
existing HTML-wrapped prefix convention.

* feat(leftclickcast): add PertTargetSpell enum

Wraps every target-castable MagicAction (autocast Strike->Surge,
ancient Rush/Burst/Blitz/Barrage, non-autocast combat, Arceuus
offensives, utility target spells) behind a minimal display-name
shape for the plugin config dropdown.

* feat(leftclickcast): add LeftClickCastConfig

Three items: enabled (master switch), spell (PertTargetSpell
dropdown, default Fire Strike), requireMagicWeapon (staff gate).

* feat(leftclickcast): add LeftClickCastPlugin

onMenuEntryAdded inserts a Cast entry above the Attack entry for
attackable NPCs, gated by the enabled flag, a non-null configured
spell, and (optionally) a magic-weapon equip check via varbit 357.

Cast is dispatched through Rs2Magic.castOn off-thread via
CompletableFuture because Global.sleepUntil is a no-op on the
client thread and would otherwise silently drop the cast.

* docs(leftclickcast): add plugin README

Covers purpose, config reference, limitations (no rune or
spellbook auto-management, staff-only default, PvP out of scope),
and the full supported-spells list.

* chore(debug): register LeftClickCastPlugin in debugPlugins

* fix(leftclickcast): use VarbitID.COMBAT_WEAPON_CATEGORY

net.runelite.api.Varbits is @deprecated in favor of gameval
identifier classes. Same varbit (357), no behavior change.

* fix(leftclickcast): move to PostMenuSort + runtime magic-weapon check

Two bugs found during manual verification:

1. The static weapon-type set (22/23/26/27) from the design doc was
   wrong — real STAFF value (at least on this client) is 18. Replaced
   with a runtime check that reads the weapon's attack-style struct
   via EnumID.WEAPON_STYLES + ParamID.ATTACK_STYLE_NAME and flags the
   weapon as magic if any style is Casting or Defensive Casting.
   Mirrors core AttackStylesPlugin and auto-covers future weapons.

2. Mutating the Attack entry inside onMenuEntryAdded did not survive
   the game's menu sort pass — entries of type RUNELITE get sorted
   below NPC_* entries, so left-click kept firing Attack/Walk-Here.
   Moved the mutation to onPostMenuSort (fires after the sort) and
   swap the entry to the tail of the array — tail slot is the
   left-click action in RuneLite's menu model.

* feat(leftclickcast): support Players (wilderness / PvP)

Scan loop now accepts Attack entries on either NPCs or Players.
Dispatch wraps NPCs in Rs2NpcModel; raw Player is passed through,
which Rs2Magic.castOn handles via its instanceof Player branch.

* feat(leftclickcast): five spell slots with hotkey-driven active slot

Adds five `@ConfigItem` spell slots, each with a corresponding Keybind,
grouped under "Spell Slots" and "Hotkeys" config sections. A
`HotkeyListener` per slot is registered on startUp and unregistered on
shutDown; pressing a bound hotkey sets the in-memory active slot and
(optionally) posts a chat message with the new spell's display name.
The menu-sort hot path now reads the active slot's spell instead of the
legacy single `spell` key.

The legacy `spell` key remains defined so existing configs aren't
invalidated, and is migrated into `slot1Spell` on startUp when slot 1
is still at its default — existing users keep their choice without
manual action. Active slot is session-local and resets to slot 1 on
every startUp.

Bumps plugin version to 1.1.0.

* feat(leftclickcast): fast-path cast dispatch via dual menuAction

Replaces the async Rs2Magic.castOn pipeline (tab switch + 150-300ms
sleep + sleepUntil(isWidgetSelected) + NPC interact) with two
synchronous client.menuAction calls fired back-to-back: one
WIDGET_TARGET to select the spell client-side, one
WIDGET_TARGET_ON_NPC / WIDGET_TARGET_ON_PLAYER to dispatch it on the
hovered target. Both packets queue on the same event-loop tick, so the
server processes selection and cast on the same game tick — indistinguishable
from "I pre-selected the spell and clicked the target".

Falls back to Rs2Magic.castOn when the spellbook widget (group 218) isn't
loaded yet (first cast after login without opening Magic tab), nudging
Rs2Tab.switchTo(InterfaceTab.MAGIC) so subsequent clicks take the fast
path. Also falls back when the selected spell isn't on the active
spellbook (modern vs. ancients mismatch).

Bumps plugin version to 1.2.0.

* feat(leftclickcast): enable-toggle hotkey + unified chat feedback

Adds an `Enable/Disable Hotkey` config item at the top of the Hotkeys
section. Pressing the hotkey flips `config.enabled()` and posts an
`ExternalPluginsChanged` event so the open MicrobotConfigPanel rebuilds
and the inner Enabled checkbox visually flips in sync — the panel
otherwise doesn't subscribe to ConfigChanged for individual checkbox
refresh.

Renames `activeSlotChatMessage` → `chatFeedback` and uses it as a
single gate for all plugin chat output. Both checkbox clicks and the
toggle hotkey route through a shared `@Subscribe onConfigChanged`
handler, so they emit the same chat message via one code path.

Materializes `@ConfigItem` defaults to storage on `startUp` via
`configManager.setDefaultConfiguration(config, false)`. Without this,
MicrobotConfigPanel's checkbox lookup returns null for newly added
keys (`parseBoolean(null) → false`) while the proxy returns the
@configitem default, leaving the UI and runtime out of sync.

Bumps plugin version to 1.3.0.

---------

Co-authored-by: chsami <sami.chkhachkhi@gmail.com>
#390)

* Reduce code smell, implement sawmill vouchers and Lazy Mode

* Change profit calculation to be more accurate, extended Logs enum to prevent weird bank withdrawal shenanigans (tried withdrawing yew logs)

* undo main runner change

* re-add microbot.java. whoops.

* Karam fix (#351)

* fix: karambwan fairy ring return

Made-with: Cursor

* plugin now clicks on fairy ring to get back to karams

* commit

* fix(AutoMiningPlugin): fix return-to-location after break and log spam

- Fix initialPlayerLocation being overwritten when player is at bank,
  which broke return-to-location functionality after breaks
- Add distance check in handleMining() to walk back if too far from spot
- Add null guard for initialPlayerLocation to prevent NPE
- Reduce log spam from LocationOption by changing missing item logs
  from warn to debug level
- Version bump to 1.0.12

Fixes: users reporting plugin not returning to mining location after breaks

---------

Co-authored-by: chsami <sami.chkhachkhi@gmail.com>
Co-authored-by: Jonathan Thomas <95548936+JThomasDevs@users.noreply.github.com>
Co-authored-by: stonksCode <99895926+stonksCode@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@chsami chsami merged commit b0d4085 into main Apr 16, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants