Swordfish only spot + bank
by SolemnVanguard ·Fishing
Fishes on Swordfish only spot and bank in chest
3
Installed
1.3
Version
24 Aug 2026
Updated
Screenshots
About this script
Fishes at the new only swordfish spot, banks and sleeps.
It also has mod protection built in.
It also has mod protection built in.
Builds
| Version | Kind | Published | Size | What changed |
|---|---|---|---|---|
| 1.3 current | text script | 24 Aug 2026 | 7 KB | Updated for the new fishing spot |
| 1.1 | text script | 20 Aug 2026 | 6 KB | First upload. |
Source of 1.3
Published by the author. This is the current build, exactly as it will be delivered.
script "Swordfish Guild" author "you" version "1.3" description "Fishes Swordfish at the guild spot and banks at the nearby Bank Chest" category "Fishing" every 600 # Harpoons Swordfish spot (object id 557). When the inventory is full, # reach()es toward the Bank Chest (id 942) directly (works from up to 30 # tiles away, walking closer one step per pass same as the fishing spot # below), opens it, deposits all Raw Swordfish (item id 369), then walks # back to the Swordfish spot the same way and resumes fishing. Uses # Sleeping Bag (id 1263) at 100% fatigue. # # Fishing spot and Bank Chest are ~19 tiles apart, which is why both legs # use reach() on the actual object (walks/turns one step per pass until # it's DRAWN, works at any distance) rather than walkTo(fixedTile) - # walkTo() only clicks what's on screen or the minimap, and the minimap # only reaches about 16 tiles, so a walkTo() call that far would just # silently do nothing every pass. # # Teleport protection: if the character's tile jumps more than 20 tiles # between passes, the script stops rather than continuing from an # unknown location. # # Fatigue failsafe: if fatigue hits 100 again within 2 minutes of the # last time, that is treated as suspicious (e.g. a mod testing you # repeatedly) and the script stops rather than sleeping over and over. var lastTile = tile(0, 0) var haveLastTile = false var teleported = false var pendingJump = false var lastFatigueMillis = -1 var fatigueSuspicious = false var FatigueSuspiciousWindowMs = 120000 # 2 minutes on start { if not bankAvailable() { print("Bank not available") } if not batchAvailable() { print("Batch hooks missing - clicks may double up") } } # Flags (rather than stops) the script if the position jumped further # than a normal pass of walking or fishing could explain. A single # stray reading (a momentary glitch) is not enough - the jump must # still be there on the NEXT check too before it is treated as real, # so lastTile is only advanced once a jump is confirmed or none is seen. fun teleportCheck() { let now = myTile() if haveLastTile { let jumped = distance(lastTile, now) if jumped > 20 { if pendingJump { print("Jumped", jumped, "tiles, confirmed on second check - stopping") teleported = true lastTile = now } else { print("Jumped", jumped, "tiles - unconfirmed, checking again next pass") pendingJump = true } } else { pendingJump = false lastTile = now } } else { lastTile = now haveLastTile = true } } # Flags the script if fatigue hits 100 again within the suspicious # window of the last time it happened - a real person rarely tires that # fast twice in a row, so this usually means something (or someone) is # forcing it, e.g. a mod testing for a bot. fun fatigueSuspiciousCheck() { if fatigue() >= 100 { let now = nowMillis() if lastFatigueMillis >= 0 and (now - lastFatigueMillis) < FatigueSuspiciousWindowMs { print("Fatigue hit 100 again within", FatigueSuspiciousWindowMs, "ms of last time - stopping") fatigueSuspicious = true } lastFatigueMillis = now } } state fishing { teleportCheck() if teleported { return 999999 } fatigueSuspiciousCheck() if fatigueSuspicious { return 999999 } if isSleeping() { print("Sleeping, fatigue left to sleep off:", sleepFatigue()) return 2000 } if fatigue() >= 100 { print("Fatigue is 100 - using Sleeping Bag") let bag = invItem(1263) if bag != none { interact(bag, "Sleep") } return random(600, 900) } if invIsFull() { become banking after 600 } if batchActive() { return 600 } let spot = nearestObject(id: 557, within: 8) if spot == none { print("No Swordfish spot (557) found nearby") return 1200 } if not interact(spot, "Harpoon") { return 600 } # interact narrates its own reason wait until batchActive() timeout 3000 else { } return 600 } state banking { teleportCheck() if teleported { return 999999 } fatigueSuspiciousCheck() if fatigueSuspicious { return 999999 } if isSleeping() { print("Sleeping, fatigue left to sleep off:", sleepFatigue()) return 2000 } if fatigue() >= 100 { if bankIsOpen() { bankClose() return 600 } print("Fatigue is 100 - using Sleeping Bag") let bag = invItem(1263) if bag != none { interact(bag, "Sleep") } return random(600, 900) } let chest = nearestObject(id: 942, within: 30) if chest == none { print("No Bank Chest (942) found within 30 tiles - waiting") return 1200 } if not bankIsOpen() { if reach(chest) == "DRAWN" { interact(chest, "open") wait until bankIsOpen() timeout 6000 else { return 600 } } return random(900, 1400) } bankDepositAll(369) bankClose() become returning after 600 } state returning { teleportCheck() if teleported { return 999999 } fatigueSuspiciousCheck() if fatigueSuspicious { return 999999 } if isSleeping() { print("Sleeping, fatigue left to sleep off:", sleepFatigue()) return 2000 } if fatigue() >= 100 { print("Fatigue is 100 - using Sleeping Bag") let bag = invItem(1263) if bag != none { interact(bag, "Sleep") } return random(600, 900) } let spot = nearestObject(id: 557, within: 30) if spot == none { print("No Swordfish spot (557) found within 30 tiles - waiting") return 1200 } if reach(spot) == "DRAWN" { become fishing after 600 } return random(900, 1400) } on render { if teleported { let flashOn = wrap(nowMillis(), 0, 999) < 500 let bg = "#cc0000ee" if not flashOn { bg = "#660000ee" } paintRoundFill(4, 300, 220, 60, 12, bg) paintTextCenteredSized(114, 322, "TELEPORTED", "white", 16) paintTextCenteredSized(114, 344, "SCRIPT STOPPED", "white", 12) } if fatigueSuspicious { let flashOn = wrap(nowMillis(), 0, 999) < 500 let bg = "#cc6600ee" if not flashOn { bg = "#663300ee" } paintRoundFill(4, 300, 220, 60, 12, bg) paintTextCenteredSized(114, 322, "FATIGUE LOOP", "white", 16) paintTextCenteredSized(114, 344, "SCRIPT STOPPED", "white", 12) } }