fix(ValeTotem): correct bow selection and withdraw race#400
Merged
chsami merged 1 commit intochsami:developmentfrom Apr 18, 2026
Merged
fix(ValeTotem): correct bow selection and withdraw race#400chsami merged 1 commit intochsami:developmentfrom
chsami merged 1 commit intochsami:developmentfrom
Conversation
- Select the configured bow option by name via Rs2Widget.handleProcessingInterface so the hotkey is resolved from the live fletching interface rather than a hardcoded child ID. The previous scheme mapped SHORTBOW → child 15 with hotkey-index 1, but widget 270,13's sparse dynamic children could produce "3" at that slot for some log types, causing shortbow selection to press the longbow key. - Bank withdraws now sleepUntil on the concrete predicate (hasKnife, hasLogBasket, log count reaches requested target) instead of the generic waitForInventoryChanges + re-check. Rs2Bank.withdrawOne/withdrawX return immediately after queueing the menu click, so under server lag the follow-up check would read stale state and spuriously report "no knife available" right after the knife was withdrawn. Bumps plugin to 1.0.10.
chsami
added a commit
that referenced
this pull request
Apr 18, 2026
- Select the configured bow option by name via Rs2Widget.handleProcessingInterface so the hotkey is resolved from the live fletching interface rather than a hardcoded child ID. The previous scheme mapped SHORTBOW → child 15 with hotkey-index 1, but widget 270,13's sparse dynamic children could produce "3" at that slot for some log types, causing shortbow selection to press the longbow key. - Bank withdraws now sleepUntil on the concrete predicate (hasKnife, hasLogBasket, log count reaches requested target) instead of the generic waitForInventoryChanges + re-check. Rs2Bank.withdrawOne/withdrawX return immediately after queueing the menu click, so under server lag the follow-up check would read stale state and spuriously report "no knife available" right after the knife was withdrawn. Bumps plugin to 1.0.10. Co-authored-by: runsonmypc <45095641+runsonmypc@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Two independent bug fixes in the Vale Totems plugin.
1. Bow selection presses wrong hotkey
FletchingHandler.selectBowresolved the bow option through hardcoded child IDs (15for shortbow,16for longbow), then read a hotkey from widget270,13.getChild(1)/getChild(2).Widget.getChild(int)returns a sparse dynamic child, so for some log-type layouts the child at that index carried text"3"even when the plugin intended shortbow — pressing3selects longbow, which fails for players without the fletching level. Fixed by selecting the option by name viaRs2Widget.handleProcessingInterface("shortbow" | "longbow"), which walks the static children to find the matching option and uses the paired dynamic-child hotkey.2. Withdraw race reports false "no knife" right after withdraw
Rs2Bank.withdrawOne/withdrawXreturntrueas soon as the menu click is queued — not when the item lands in the inventory.BankingHandlerwas usingRs2Inventory.waitForInventoryChanges(3000)followed byInventoryUtils.hasKnife(), which races: under server lag, the generic wait times out or fires on some other change, the subsequenthasKnife()reads stale state, and the code falls through to a second withdraw path, declaring a "no knife available" critical shortage on a knife that was in flight.Each withdraw path now
sleepUntils on the concrete predicate (hasKnife,hasLogBasket,getLogCount() ≥ before + requested) and no longer falls through to an alternate withdraw once the first was fired.Applied in
ensureKnifeInInventory,ensureKnifeAndLogBasketInInventory,ensureLogBasketAvailable,withdrawRequiredItems, and both log withdrawals inperformLogBasketFillingOperation.Bumps plugin to 1.0.10.
Test plan
./gradlew runDebuglocally and ran Vale Totems start-to-finish with yew logs + shortbow config; previously pressed3(longbow), now correctly fletches yew shortbows.development— banking race fix follows the same pattern as the standard route and matches existing logic shape.