All scripts

AIO Cooker

by ArcaneOxbow ·Cooking

Pick a food, hit start, it banks and cooks

3

Installed

1.0.2

Version

18 Aug 2026

Updated

About this script

AIO Cooker

Cooks any fish

Needs
  • A bank and fire close together
  • Raw food in the bank

Builds

VersionKindPublishedSizeWhat changed
1.0.2 current text script 18 Aug 2026 6 KB Make script public
1.0.1 text script 18 Aug 2026 6 KB First upload.

Source of 1.0.2

Published by the author. This is the current build, exactly as it will be delivered.

script "AIO Cooker"
author "Mark"
version "1.0.2"
every 600

# The selected raw food, and its cooked/burnt ids (set by lookupCook).
var rawId = 0
var curCooked = 0
var curBurnt = 0
var started = false

on start {
    if not bankAvailable() { print("Bank not available") }
    if not batchAvailable() { print("Batch not available") }
    if not minimapAvailable() { print("Warning: minimap hooks not ready - walkPath may misbehave") }

    pathStart("route", "bank", tile(216, 451))
    pathFinish("route", "fire", tile(214, 456))

    uiTab("Cooker")
    uiHeader("Pick a fish to cook")
    uiLabel("status", "Tick the food you want, then press Start.")
    showFish()
    uiButton("Start", "onStart")
}

# ---- the cooking table, straight from the game's ItemCookingDef list ----

fun fishId(int i) -> int {
    if i == 0 { return 349 }
    if i == 1 { return 137 }
    if i == 2 { return 354 }
    if i == 3 { return 361 }
    if i == 4 { return 256 }
    if i == 5 { return 351 }
    if i == 6 { return 552 }
    if i == 7 { return 717 }
    if i == 8 { return 358 }
    if i == 9 { return 550 }
    if i == 10 { return 255 }
    if i == 11 { return 363 }
    if i == 12 { return 345 }
    if i == 13 { return 356 }
    if i == 14 { return 254 }
    if i == 15 { return 366 }
    if i == 16 { return 324 }
    if i == 17 { return 339 }
    if i == 18 { return 372 }
    if i == 19 { return 369 }
    if i == 20 { return 554 }
    if i == 21 { return 1280 }
    if i == 22 { return 1101 }
    if i == 23 { return 1104 }
    if i == 24 { return 708 }
    if i == 25 { return 545 }
    if i == 26 { return 591 }
    if i == 27 { return 1192 }
    if i == 28 { return 1190 }
    return 0
}

fun lookupCook(int raw) {
    if raw == 349 { curCooked = 350  curBurnt = 353 }
    if raw == 137 { curCooked = 138  curBurnt = 139 }
    if raw == 354 { curCooked = 355  curBurnt = 360 }
    if raw == 361 { curCooked = 362  curBurnt = 365 }
    if raw == 256 { curCooked = 258  curBurnt = 260 }
    if raw == 351 { curCooked = 352  curBurnt = 353 }
    if raw == 552 { curCooked = 553  curBurnt = 365 }
    if raw == 717 { curCooked = 718  curBurnt = 365 }
    if raw == 358 { curCooked = 359  curBurnt = 360 }
    if raw == 550 { curCooked = 551  curBurnt = 365 }
    if raw == 255 { curCooked = 259  curBurnt = 260 }
    if raw == 363 { curCooked = 364  curBurnt = 365 }
    if raw == 345 { curCooked = 346  curBurnt = 347 }
    if raw == 356 { curCooked = 357  curBurnt = 360 }
    if raw == 254 { curCooked = 257  curBurnt = 260 }
    if raw == 366 { curCooked = 367  curBurnt = 368 }
    if raw == 324 { curCooked = 325  curBurnt = 322 }
    if raw == 339 { curCooked = 330  curBurnt = 331 }
    if raw == 372 { curCooked = 373  curBurnt = 374 }
    if raw == 369 { curCooked = 370  curBurnt = 371 }
    if raw == 554 { curCooked = 555  curBurnt = 368 }
    if raw == 1280 { curCooked = 1269  curBurnt = 1281 }
    if raw == 1101 { curCooked = 1103  curBurnt = 1103 }
    if raw == 1104 { curCooked = 1105  curBurnt = 1110 }
    if raw == 708 { curCooked = 709  curBurnt = 710 }
    if raw == 545 { curCooked = 546  curBurnt = 547 }
    if raw == 591 { curCooked = 590  curBurnt = 590 }
    if raw == 1192 { curCooked = 1193  curBurnt = 1248 }
    if raw == 1190 { curCooked = 1191  curBurnt = 1247 }
}

fun showFish() {
    let i = 0
    while i < 29 {
        let id = fishId(i)
        uiToggle("raw-" + str(id), itemDef(id).name + "  (" + str(id) + ")", false)
        i = i + 1
    }
}

fun pickedRaw() -> int {
    let i = 0
    while i < 29 {
        let id = fishId(i)
        if uiToggled("raw-" + str(id)) { return id }
        i = i + 1
    }
    return 0
}

fun onStart() {
    let raw = pickedRaw()
    if raw == 0 {
        uiLabel("status", "Tick a food first.")
        return
    }
    rawId = raw
    lookupCook(raw)
    started = true
    uiClear()
    uiHeader("Cooking " + itemDef(raw).name)
    uiLabel("status", "Heading to the bank...")
}

# ---- states ----

state setup {
    if started {
        become banking
    }
    return 400
}

state banking {
    let how = walkPath("route", "bank")

    if how == "ARRIVED" {
        let banker = nearestNpc(id: 95, within: 10)
        if banker == none {
            print("No Banker (95) found nearby")
            return 1000
        }
        if not bankIsOpen() {
            if reach(banker) == "DRAWN" {
                let fresh = nearestNpc(id: 95, within: 10)
                if fresh != none {
                    interact(fresh, "Bank")
                }
            }
            return 1000
        }
        if invContains(curCooked) {
            uiLabel("status", "Banking cooked food")
            bankDepositAll(curCooked)
            return 1000
        }
        if invContains(curBurnt) {
            uiLabel("status", "Banking burnt food")
            bankDepositAll(curBurnt)
            return 1000
        }
        if not invContains(rawId) {
            uiLabel("status", "Withdrawing raw food")
            bankWithdraw(rawId, 29)
            return 1000
        }
        bankClose()
        become cooking
    } else if how == "WALKING" {
        return 900
    } else if how == "CROSSING" {
        return 1500
    } else {
        print("bank walk status:", how)
        return 1000
    }
}

state cooking {
    let food = invItem(rawId)
    if food != none {
        let fire = nearestObject(id: 97, within: 8)
        if fire == none {
            print("No Fire (97) found nearby")
            return 1000
        }
        if reach(fire) == "DRAWN" {
            uiLabel("status", "Cooking " + itemDef(rawId).name)
            interact(food, "Use")
            let cooked = interact(fire, "Use")
            if cooked {
                wait until batchActive() timeout 4000 else { return 1000 }
                wait until not batchActive() timeout 90000 else { return 600 }
            }
        }
        return random(2000, 2500)
    }

    become banking
}