Skip to content

Changelog ​

2026.09.22-r1 ​

Changed ​

  • CaveBot now reports when a hunt tick is taking too long and which stage was slow.
  • The in-game hunt route overlay now updates a few times per second instead of every frame, so the map stays smoother.

2026.09.09-r1 ​

Added ​

  • Added a dedicated safe-stop that walks home and only finishes in a protection zone, without shopping or depositing.

Changed ​

  • Combat now waits for the official attack lock before using spells or sending another attack.
  • Walking now routes around blocked tiles and can use a locker on another floor when nearby depot stands are occupied.
  • Shop and NPC talk wait for the game to confirm each step instead of repeating greet, trade, or buy.
  • Loot now opens immovable corpses and only counts progress when the corpse actually changes.

Fixed ​

  • Fixed CaveBot repeating the same shop purchase after an interrupted or failed action.
  • Fixed CaveBot treating an unopened corpse as already looted.
  • Fixed CaveBot trying to loot a corpse while a living monster still stands on that tile.
  • Fixed a town restock command running again after a script reload.
  • Fixed CaveBot keeping a walk when it needed to loot, and restarting shop work when it was still standing at the NPC.
  • Fixed CaveBot turning attack off or recasting when the game had not confirmed the action.
  • Fixed map and depot item lists going stale after a reload.

2026.09.04-r2 ​

Changed ​

  • CaveBot now runs one main hunt phase at a time (fight, loot, or travel).
  • CaveBot now checks supply return before looting another corpse.
  • Travel now resumes the same route step after combat instead of skipping ahead.
  • Unreachable corpses are dropped instead of blocking the hunt forever.
  • Improved loot after combat interruptions keeps the same corpse.

Fixed ​

  • Fixed monsters with a timed border being treated as dead or gone.
  • Fixed bank, shop, and travel talk open/close detection.
  • Fixed CaveBot treating the wrong NPC talk window as success.
  • Fixed NPC chat replies opening a talk session on their own.

2026.09.04-r1 ​

Added ​

  • Added tabbed Combat, Run Control, Overview, and Loot & Town planner sections.
  • Added Map Essentials view and route step search in the planner.
  • CaveBot now switches to a nearby monster that attacked you.

Changed ​

  • CaveBot keeps a locked target until it dies or becomes invalid, including brief scan gaps.
  • Town cycle and supply returns use the normal travel route and stay latched until supplies are verified.
  • Immediate combat now suspends nearby loot jobs.
  • Planner map workspace starts cleaner, with compact waypoints and live helpers in the world tree.
  • Improved the hunt session dock and Story history (load older, retry, milestones).

Fixed ​

  • Fixed attack target detection and rejected attacks counting as successful.
  • Fixed dead targets coming back from stale health memory.
  • Fixed cancel-attack from an old target wiping a new lock.
  • Fixed live Story events sorting wrongly after a game clock reset.
  • Fixed incomplete creature-mark packets producing fake mark data.

2026.09.03-r5 ​

Added ​

  • PvP rotation can auto-pick a legal target (targeting.auto, on by default) or only lock the client selection. Movement is manual or orbwalk (Space hold / Pause toggle; walking keys yield).

2026.09.03-r4 ​

Added ​

  • sdk.pvp walks a vocation combat rotation and casts the next ready legal slot instead of waiting on the first spell. pvp.lua is the live rotation script (combat/heal/lock; movement stays manual).

2026.09.03-r3 ​

Added ​

  • sdk.pvp Combat Director: snapshot world model, hand-mode legality gate, TTD survival, short-horizon orbwalker, cooldown-aware arbiter, vocation policies, and shadow/assist execution (no commands unless execute mode is set).

2026.09.03-r2 ​

Added ​

  • Added option to keep a spell in the rotation without using it.
  • Added option to keep haste up while walking.
  • Added Save and Open file dialogs for script data.

Changed ​

  • Attack spells now take turns in the rotation instead of repeating the first ready one.
  • CaveBot now buys supplies up to the refill amount and only leaves the hunt at the minimum.
  • CaveBot now pays shops from the bank balance instead of withdrawing coins first.
  • CaveBot now stores loot at the depot when it cannot carry more, then continues shopping.
  • CaveBot now finishes town restock after a capacity or supply stop instead of shutting down in the cave.

Fixed ​

  • Keep haste stays up on the walk back to town.
  • CaveBot no longer restarts while drinking potions.
  • Town return after a stall starts from the nearest path point instead of walking the long way.
  • Overlay windows no longer grow taller every time you scroll.
  • Bank and travel talks no longer restart when the NPC window was already open.
  • CaveBot no longer skips the shop after returning to town.
  • Supply-low alerts now show why the bot is returning.

2026.09.03-r1 ​

Added ​

  • Overlay item_tooltip keeps help text on the widget you hovered. item_hovered_for_tooltip reports that padded hover.
  • SDK API reference now documents every Lua function.

Changed ​

  • New hunts default leftover loot to stash. Potions, bags, and tools stay unless you change their rules.
  • Auto-login signs in with saved credentials after a Connection failed box or a timed-out reconnect, instead of clicking a stale character list.

Fixed ​

  • Overlay help tips stay visible when you move the mouse onto the tip itself.

2026.09.02-r12 ​

Changed ​

  • CaveBot shop buys count bank gold when deciding if you can afford the item, then only spend backpack coins. Banked gold skips the buy instead of failing the hunt.
  • Overlay windows with a title bar move only from the title bar. Body clicks reach buttons and checkboxes.
  • Route tests can include up to 80 stops.

Fixed ​

  • Overlay checkboxes work on the first click when Lua skips a render frame.
  • Overlay help tips no longer blink when Lua skips a render frame.
  • CaveBot Start and Test town cycle work after a stalled route test.
  • Planner Test town cycle uses the published hunt when the open plan is still a draft.
  • Buying or selling on a route-test stop now requires an NPC name.

2026.09.02-r11 ​

Added ​

  • Planner Supplies Use 10% writes the town-return floor from live max capacity (Skills ounces).
  • Planner Supplies shows live free / max ounces and the percent still free.

Changed ​

  • CaveBot returns to town when every nested backpack is slot-full, even if weight is still fine.
  • CaveBot loot fills nested bags first and opens the next bag when the child is full.

Fixed ​

  • Depot withdrawals stay in the main backpack. Quiver windows are not treated as loot bags.

2026.09.02-r10 ​

Fixed ​

  • CaveBot resumes the hunt path after loot when the next corpse has no safe walk-up tile, instead of standing still until another monster appears.
  • CaveBot drops a finished fight when the client is no longer targeting that creature, so it walks the hunt again instead of waiting for a new monster.

2026.09.02-r9 ​

Changed ​

  • CaveBot starts looting as soon as it is next to the corpse. It no longer waits a couple of seconds after arriving before the first take.

Fixed ​

  • CaveBot keeps attacking a living target instead of standing in front of it and walking the hunt route.

2026.09.02-r8 ​

Fixed ​

  • CaveBot treats the official "No loot. (N corpse)" status as an empty body and stops UseObject-selecting it.

2026.09.02-r7 ​

Changed ​

  • Kite prefers north, south, east, and west steps while already in weapon range. A diagonal is used only when every cardinal neighbor is blocked.

Fixed ​

  • CaveBot no longer sends a second Attack on the same creature when the client red-box read is empty. That extra click turns auto-attack off.
  • CaveBot stops retrying a corpse that accepts UseObject but never opens a window (already looted).

2026.09.02-r6 ​

Fixed ​

  • CaveBot now greets a shop NPC who is already in talk range even when isOnScreen is false. Counter clerks were found, then the buy action waited forever without sending hi or opening trade.

2026.09.02-r5 ​

Fixed ​

  • CaveBot no longer greets an NPC again every few seconds while already talking at a shop. Standing still to trade now counts as travel progress, so the outbound route does not reset and close the conversation.

2026.09.02-r4 ​

Fixed ​

  • CaveBot loot no longer sits on a corpse when the backpack is full of items (slots, not weight). It uses another open bag that still has free slots, or opens a backpack stored inside the full bag.
  • CaveBot stops the loot job immediately when every bag is slot-full and there is no extra backpack to open, instead of waiting until the corpse ages out.
  • CaveBot keeps the attack lock on a living target. Clicking Attack again on the same creature turns auto-attack off.

2026.09.02-r3 ​

Fixed ​

  • NPC shop buy/sell now sends the remaining item count in one trade. Catalog weights are hundredths of an ounce; treating them as ounces had clamped every potion purchase to 1.

2026.09.02-r2 ​

Fixed ​

  • CaveBot now loots every corpse from a pull, not only the last monster with the same name.
  • CaveBot now picks up leftover corpses still on the floor nearby after a loot job was dropped.
  • CaveBot now opens a corpse that landed one tile away from where the monster died.
  • CaveBot no longer reopens an empty corpse that is still on the floor.
  • CaveBot no longer tries to loot a living monster that stood still, or a body it already finished.
  • CaveBot no longer walks away from a corpse while still walking up to it.

2026.09.02-r1 ​

Fixed ​

  • CaveBot warms the item and monster catalogs during script start instead of the first 1500 ms tick, so loading _client_items.lua no longer quarantines cavebot.lua with execution timed out.
  • Planner item search no longer waits for /api/catalog/snapshot. Official-pack machines that omit sdk/data/client/*.json now load potions and areas from _client_*.lua.

2026.09.01-r4 ​

Removed ​

  • CaveBot no longer treats a leftover farm module as a second hunter. Start is not refused for a parallel farm, status always publishes, and the planner no longer shows an "09_farm is still active" helper.

Fixed ​

  • Map tab Test town cycle now enables an idle CaveBot session before latching recover. The previous latch-only path logged recovery started (reason=town-cycle) and never ticked the tree, so the character stood still and the HUD stayed on "No hunting session yet".
  • Town streets no longer open combat on dogs, cats, or other nearby animals. Fight still continues if the character is already under attack.
  • Attack-spell ranking skips native canCast while the attack group is on cooldown, so the rotation does not re-scan every CaveBot tick.

2026.09.01-r3 ​

Changed ​

  • navigation.worldRoute.mode = automatic now compiles to native AutomaticOutbound and AutomaticReturn Behavior Tree phases. Static multi-floor paths run on the map worker, NPC travel legs are catalog-resolved and brokered, and every target/landing is revalidated against the active plan and tree generation.
  • Hybrid mode executes authored World actions first and uses the same generator only for the remaining exact leg. Manual mode remains authored-only, while automatic-only ignores authored World actions but retains their explicit shared endpoint as the schema-v1 town anchor.
  • Automatic paths fail closed on missing anchors, forbidden/avoid zones, map-worker errors, wrong NPC/landing, stale callbacks, cancellation leaks, or changed plans. Runtime status revision 30 and the in-game tree panel expose journey kind, phase, target, NPC-leg progress, navigation errors, and unsafe cleanup.
  • Outbound packet helpers now point to the exact unpacked-client function entries and are revalidated against the live x64 unwind table before every indirect call. Repeated movement stops coalesce until real bot or confirmed local-player movement rearms them, preventing stack-corrupting stale calls and stop/log floods.
  • Combat spell tickets use the broker's fire-and-forget acknowledgement contract, inject live sdk.skills cooldown evidence, and retain secondary/basic fallbacks. Threat and engagement now share one freshness-checked creature snapshot instead of repeating the native scan.
  • Step-budget warnings identify the behavior/node and elapsed/budget milliseconds, and ack=false is normalized centrally as the legacy fire-and-forget spelling while malformed acknowledgements still fail closed.
  • AutomaticOutbound being inactive is now ordinary phase-selector fallthrough; authored outbound and HuntCircuit phases can run without falsely quarantining Travel.
  • An unreachable one-shot corpse sweep now spends its sweep and yields movement back to Hunt Travel while retaining the job for a later nearby pass, preventing Travel/Loot walking oscillation.
  • New and omitted plans default combat.attackOnlyOnScreen on. Cavebot only attacks monsters in the world viewport unless the plan sets it false.
  • New and omitted plans default combat.keepDistance off. Kiting is opt-in.

Breaking ​

  • (none; schema v1 remains compatible)

2026.09.01-r2 ​

Changed ​

  • CaveBot's active decision core is now a validated Behavior Tree with modular Survival, Emergency, Combat, Loot, and Navigation subtrees. Authored tree order replaces numeric priority bands while atomic resource claims preserve safe parallel work.
  • sdk.cavebot.bt exposes condition/action leaves, reactive and memory sequences/selectors, ordered parallel execution, decorators, recursive halt/reset, stable node IDs, active-path diagnostics, and contained tracebacks.
  • Route tests are an exclusive runtime mode, and disable/shutdown recursively halt every running node before later work can execute.
  • The in-game CaveBot tab now includes a live Behavior Tree hierarchy, active paths, decision/resource explanations, node timings, quarantine, cleanup faults, and recent errors. sdk.cavebot.debug and MCP inspect_cavebot_tree expose the same state for automation.
  • Plan intake deduplicates rejected revisions, graph compilation retains only the current live graph set, and schema-v1 target selection, loot enablement, inventory automation, and potion targets now reach runtime config.
  • Runtime status revision 28 adds bounded Behavior Tree diagnostics and applied/seen/rejected plan provenance. Navigation policy, zone-safe checked paths, lure behavior, and valid area/self spell target modes now compile from schema v1.
  • CaveBot-owned asynchronous actions carry tree-generation and plan-hash guards, so late sends, acknowledgements, retries, and completion callbacks cannot mutate a replacement tree. Trace history and the in-game panel expose the matching generation and plan identity.
  • Runtime status revision 29 adds immutable CompiledPlanV1 provenance, lifecycle resume diagnostics, structured contention, per-node halt reasons, and quarantine fault signatures. Remaining Survival/Emergency/Recovery decisions are native BT nodes; food, combat zones/screen admission, NPC filters, and configured alert policies now have explicit runtime owners.
  • Directional attack spells now choose and revalidate an exact cardinal combat shape from fresh live creatures while atomically owning movement and communication; stale targets, insufficient hits, or changed range fail into the next spell/basic-attack fallback. Durable Travel/Recovery state now accepts only action-free, branch-free checkpoints, and the compact in-game tree view carries up to 256 nodes so the complete default topology remains visible.

Deprecated ​

  • sdk.cavebot.scheduler remains for one compatibility window but no longer drives the CaveBot controller.

Breaking ​

  • (none; planner schema v1 and runtime status fields remain compatible)

Notes ​

  • Web plans remain semantic configuration rather than serialized BT topology. Game actions still require sdk.action_broker acknowledgement and cancellation.

2026.08.31-r12 ​

Changed ​

  • Inventory open / move / equip / close and me:loot prefer official handlers (TGameActionUse / MoveObject / TryToEquip, sendCloseContainer, sendQuickLootAreaAtPlayer) via game.dbg.call_gui. Packet enqueue stays the fallback.

Deprecated ​

  • (none)

Breaking ​

  • (none)

Notes ​

  • World drops use TLocationWorldMapCoordinateContext (type 10). Stacked world tiles stay on Use / from-location. Close, container-move, and equip resolve through scanned Qt slots (dbg.action_close / action_move / action_equip).

2026.08.31-r11 ​

Changed ​

  • Cavebot raises combat.lookRange below 12 (or attack reach + 8) and warns. Farm 8 can no longer stay locked.
  • Spell-reach caps that shrink maximumRange now warn. Intake logs corrections and exposes them on fact().warnings.
  • New plans default lookRange to 12 (builtin preset, planner, engagement fallbacks).
  • GetCreatures prefers on_map rows so store ghosts cannot fill the 256-row cap and hide live monsters.

Deprecated ​

  • (none)

Breaking ​

  • (none)

Notes ​

  • Values above the floor still override. The client console prints each correction in orange.

2026.08.31-r10 ​

Changed ​

  • Cavebot runtime_config emits combat.look_range (default at least 12) so hunt-circuit monsters at 9-12 tiles are collected and fought.
  • Under fire, leftover keep uses hurt_admission_range so a caster being hit from 7 tiles still fights.

Deprecated ​

  • (none)

Breaking ​

  • (none)

Notes ​

  • Farm still defaults look_range to 8. Cavebot now raises plan values below the hunt-circuit floor and warns.

2026.08.31-r9 ​

Changed ​

  • mem.walk_map / mem.appearance / mem.appearance_id own the std::map walk and live appearance pointer reads; inventory, tools, NPC, and Engine use them.
  • Combat rotation sends creature runes through LocalPlayer.useOnCreature (injected packet still wins in tests).

Deprecated ​

  • (none)

Breaking ​

  • (none)

Notes ​

  • World-map field trees in tools stay local; those nodes are not StdMapNode.

2026.08.31-r8 ​

Changed ​

  • Path live NPC/monster kind uses Creatures.kind_of instead of a local id-band helper.

Deprecated ​

  • (none)

Breaking ​

  • (none)

Notes ​

  • Creatures.kind_of classifies a Player or {id,name,kind} table with the same labels as classify.

2026.08.31-r7 ​

Changed ​

  • NPC buy/sell/trade skips greet (and trade when the shop is already open) so a failed buy does not spam hi.
  • Cavebot commerce calls sdk.npc as a module (greet(id)), not with a colon.

Deprecated ​

  • (none)

Breaking ​

  • (none)

Notes ​

  • A required buy with a known catalog price and too little gold fails closed instead of restarting the greeting.

2026.08.31-r6 ​

Changed ​

  • sdk.packet is the catalog / nested-object builder only (get, new, send, positions, identifiers).

Deprecated ​

  • (none)

Breaking ​

  • Unique outbound sends moved to the owning module: Talk.talk, Npc.greet / buy / sell, Inventory.moveObject / stash / useObject, Market.browse, LocalPlayer.attack / setTactics, Movement.rotate, Tiles.browseField.

Notes ​

  • Packet.send("JoinChannel", { channel = 5 }) is still the generic scalar path.

2026.08.31-r5 ​

Changed ​

  • Cavebot fight skips town streets and protection zones (Destinations.in_settlement) so waypoint walks do not attack temple dogs and cats.
  • Settlement combat still runs on the hunt circuit, and while under fire on a return walk.

Deprecated ​

  • (none)

Breaking ​

  • (none)

Notes ​

  • Town streets are not PZ. The no-combat envelope is the official temple plus Chebyshev 80 on the same floor.

2026.08.31-r4 ​

Changed ​

  • World-object classify calls Data.interaction (official TAppearanceType lens-help / unpass) instead of matching door names.
  • Door interact treats a live door as already open when official unpass is clear, not when the display name contains "open door".

Deprecated ​

  • (none)

Breaking ​

  • (none)

Notes ​

  • Closed #1632 and open #1633 both carry lens-help 1104. Open vs closed is the unpass flag on the appearance type.

2026.08.31-r3 ​

Changed ​

  • Collect-all loot opens the corpse and moves stacks instead of one area QuickLoot send.
  • Fight re-admits leftover / kited attackers while under fire (farm live_hurt_attacker) and no longer adjacent-skips a full-HP hitter that is damaging the player.
  • Town restock yields movement while under fire on to_town / to_exit, and fight stands-and-shoots so recover cannot starve combat on the walk to town.
  • Town walk probes one Path.to per tick; the NPC-counter ring resumes on later pumps instead of 49 searches that time out the tick.

Deprecated ​

  • (none)

Breaking ​

  • (none)

Notes ​

  • QuickLoot AREA_AT_PLAYER can return success while the client's loot list takes nothing; standing on the corpse then walked away.
  • Stationary bugs at dist 2-4 were marked leftover and then ignored forever; those followers kept hitting while the bot attacked everyone else.
  • Supplies with no return graph starts to_town inside the cave; recover used to keep movement and fight lost every channel.
  • Reaching Thais and pathing to a shop counter (dest miss + Chebyshev 1..3 ring) blew the 1500ms tick and quarantined cavebot.lua.

2026.08.31-r2 ​

Changed ​

  • Travel skips the town outbound wait when the player is already on a hunt tile, so a reload or plan-hash reset does not freeze the circuit.
  • Talk NPC detection uses the catalog only; the packet callback no longer scans the creature store.

Deprecated ​

  • (none)

Breaking ​

  • (none)

Notes ​

  • Standing on a hunt node after timeout/reload used to sit in await_outbound forever because the nearest town gate is more than 48 tiles away.

2026.08.31-r1 ​

Changed ​

  • Boat travel treats an official NPC Talk reply or an open keyword window as the greeting ack, so the city line is sent without waiting for a second hi.
  • Travel already in an NPC window skips greet; a failed greet says bye and retries the conversation a few times.
  • Talk events expose is_npc_reply and creature_id so player chat is not treated as the clerk.

Deprecated ​

  • (none)

Breaking ​

  • (none)

Notes ​

  • Player Talk always includes is_npc_reply=0. Official NPC Talk usually omits that field.

2026.08.29-r10 ​

Changed ​

  • A refreshed exact expected corpse at the candidate's recorded tile is authoritative even when a retained creature wrapper still reports stale positive HP.

Deprecated ​

  • (none)

Breaking ​

  • (none)

Notes ​

  • Positive HP still blocks zero/off-map-only KillTracking proof; no-corpse events expire without creating loot.

2026.08.29-r9 ​

Changed ​

  • KillTracking keeps recently positive candidates pending long enough for the exact corpse to appear; only corpse-at-recorded-tile evidence may override historical positive HP.
  • Trusted low supplies detected during an outbound departure trigger town recovery before the route enters the cave.

Deprecated ​

  • (none)

Breaking ​

  • (none)

Notes ​

  • Pending name-only kill evidence expires after a bounded 3.6-second window when no exact corpse appears.

2026.08.29-r8 ​

Changed ​

  • Name-only KillTracking recovery waits for stable death/corpse evidence and rejects recently positive living candidates, preventing false corpse jobs for another same-name monster.
  • A recently attributed attacker normally configured as avoid immediately preempts loot and sticky combat with defensive recovery; ordinary non-attacking avoid creatures remain ignored.
  • Death recovery accepts respawn only from positive live health and a valid position, while stopped telemetry reports the fresh temple state without executing gameplay work.

Deprecated ​

  • (none)

Breaking ​

  • (none)

Notes ​

  • The authored one-death stop remains authoritative; no unsupported respawn packet or UI action is fabricated.

2026.08.29-r7 ​

Changed ​

  • Exact corpse looting reserves and revalidates an explicit free client container slot, so opening and closing a corpse cannot replace the main bag window.
  • Closed carrying bags are reopened through the action broker; inventory remains untrusted until the equipped bag is positively acknowledged, while a genuinely open empty bag requires two stable reads.
  • Unresolved generic KillTracking envelopes no longer create duplicate Unknown monster analytics entries beside the authoritative named kill.
  • NPC restock acknowledgement loss is reconciled against trusted inventory and retried with bounded backoff before a finite safe stop.

Deprecated ​

  • (none)

Breaking ​

  • (none)

Notes ​

  • Restock retries are capped at three sends and never resend before checking whether the previous purchase was already applied.

2026.08.29-r6 ​

Changed ​

  • Crowded-depot self-loops may defer explicit deposit-only work only when an open carrying container is confirmed not full, capacity is above its configured floor, and no critical depot withdrawal is required.
  • Planner depot policies preserve supply criticality and capacity-floor data, while successful actions with only an on_failure branch now advance through their normal successor.

Deprecated ​

  • (none)

Breaking ​

  • (none)

Notes ​

  • Missing inventory evidence, full or closed carrying containers, low capacity, generic depot actions, operation failures, and critical withdrawals remain fail-closed.

2026.08.29-r5 ​

Changed ​

  • Depot occupancy ignores explicitly off-map retained creature wrappers and applies one overall timeout across approach changes, preventing permanent crowded-depot loops.
  • Successful actions that define only on_failure now advance normally instead of falling through to the failure label and repeating a completed depot forever.
  • Depot approach failures rotate stand tiles with a bounded native-move deadline, preserve partial progress, and never blacklist a speculative native path step.
  • Verified-all corpse looting re-resolves the exact expected corpse before each open attempt, treats the short TTL as a liveness checkpoint, and completes asynchronous container closure without reopening stale containers.

Deprecated ​

  • (none)

Breaking ​

  • (none)

Notes ​

  • Corpse interaction never falls back to an unrelated tile-top item; the existing 20-failure and 45-second safety bounds remain authoritative.

2026.08.29-r4 ​

Added ​

  • KillTracking events recover uniquely correlated recent kills when the creature-health stream misses the final zero-HP update, queuing verified corpse loot exactly once.

Changed ​

  • Supply checks retain the last trusted inventory snapshot across unavailable or transiently empty backpack scans and defer recovery until a confirming scan is available.

Deprecated ​

  • (none)

Breaking ​

  • (none)

Notes ​

  • Ambiguous or uncorrelated kill events are diagnostic only; they never guess a corpse or create a loot job.

2026.08.29-r3 ​

Changed ​

  • Supply and capacity branches continue through the selected service node to its authored successor instead of completing the world route at the service.
  • Hot reload rebuilds retained route graphs from runtime revision 26, clearing stale completed-outbound state so the next Start resumes at the nearest outbound node.

Deprecated ​

  • (none)

Breaking ​

  • (none)

Notes ​

  • A paused farmer at a town service remains paused after reload; the next explicit Start resumes from that nearby service rather than restarting the first town checkpoint.

2026.08.29-r2 ​

Added ​

  • Native auto-relogin and a low-frequency Farmer fallback continue when Present is minimized or occluded.
  • Collect-all looting now verifies every corpse stack and preserves queued corpse jobs across hot reloads.

Changed ​

  • Auto-login waits for the character list after LoginSuccess instead of restarting authentication with a second reconnect.
  • Recently damaging positive-HP monsters can be re-admitted when the retained creature wrapper incorrectly reports off-map.
  • Return routes only accept town/PZ completion near their authored terminal; intermediate cities and safe zones no longer restart outbound travel.
  • Native MoveTo is capped at 128 tiles, with farther checkpoints using bounded partial path steps.
  • Stair transitions accept bounded implicit landing offsets while preserving explicit radius-zero checks.
  • The Farmer HUD clears stale analytics-listener errors after a successful bind.
  • Empty change-gold scans no longer submit failing inventory actions that compete with corpse looting.

Deprecated ​

  • (none)

Breaking ​

  • (none)

Notes ​

  • A genuine unknown-attacker recovery stops safely in town instead of immediately re-arming the outbound route.

2026.08.29-r1 ​

Added ​

  • Overlay Config and planner Run control can save one automatic login/relogin profile. Credentials stay in a Windows-protected local blob and never enter Lua, hunt plans, or browser storage.
  • Failed logins retry every 60 seconds. If Farmer 09 was running at disconnect, it is started once after the character is back in the world.

Changed ​

  • Cave Bot stands exactly on a stair/ladder departure tile instead of advancing from a diagonal neighbor.
  • Cave Bot fails a plain checkpoint that sits on water, lava, or blocked terrain instead of looping MoveTo.
  • Farmer 09 keeps combat and healing while walking a return route, and only stops after town is reached. Low-health flee still walks and heals only.
  • Unreachable same-floor checkpoints can be skipped. Different-floor successors are never jumped.
  • Hunt analytics keep loot/supply gold and session counters updating during town recovery, and rebind telemetry after a script reload.
  • Healing cancels a queued cast when the condition already ended or the farmer was reloaded.
  • Player and target status ignore invalid 64-bit envelope values so stale paralyze or target bits cannot stick.

Deprecated ​

  • (none)

Breaking ​

  • (none)

Notes ​

  • Overlay CONFIG → Automatic login works even when the web planner is closed.
  • Overlay password fields mask the typed password and block clipboard copy/cut. The overlay recovers from a DirectX 11 device reset without stopping scripts.

2026.08.28-r8 ​

Added ​

  • (none)

Changed ​

  • Cave actions now absorb bounded transient live-state gaps before sending: NPC conversation/bank/travel, tile interactions, tools/transitions, inventory/equipment, and stash enqueue failures no longer abort on a single empty snapshot.
  • Depot inventory, chest/box discovery, and storage moves retry from freshly recomputed live state; a lost storage acknowledgement cannot blindly duplicate the previous move.

Deprecated ​

  • (none)

Breaking ​

  • (none)

Notes ​

  • Retries remain fail-closed and bounded: 20 seconds for NPC discovery, the configured depot wait timeout for storage, and 5 seconds for other live-state preflight checks. Post-send non-idempotent NPC/shop actions are never replayed blindly.

2026.08.28-r7 ​

Added ​

  • (none)

Changed ​

  • Depot checkpoints skip after the wait timeout when every locker stand tile stays occupied, instead of failing the outbound route and retrying in town.
  • Locker approach selection uses occupancy and Chebyshev distance only. It no longer runs Path.to for every neighbor of every locker in one tick.
  • Farmer 09 fight-back uses attack/kite range when HP actually drops, so leftover-marked creatures a few tiles away are fought instead of treated as an unseen attacker.
  • Unknown-attacker recovery continues the town service flow instead of stopping the farm on arrival.
  • Low-health flee no longer stops to clear a nearby blocker.

Deprecated ​

  • (none)

Breaking ​

  • (none)

Notes ​

  • A crowded Thais depot was aborting 09_farm with execution timed out on the 1500 ms tick budget. After the skip the farmer continues the outbound walk to hunt.
  • The give-up tick used to rescan every locker (Tiles.around refresh) and stay on the depot node, which aborted the callback after the skip log and left Farmer 09 flashing in place. Wait ticks now reuse the first locker list and jump to the next outbound node immediately.
  • Paladin kiting at 2-4 tiles was fleeing to town after a leftover tombstone hid a live attacker. Nearby monsters no longer count as "under fire" unless HP dropped.

2026.08.28-r6 ​

Added ​

  • Official overlay and docs zips now ship the full live scripts tree: every numbered module, farm extras, and default alert sounds.

Changed ​

  • SDK updater still skips user-edited examples, but offers an update when official files are missing even if the version string already matches.

Deprecated ​

  • (none)

Breaking ​

  • (none)

Notes ​

2026.08.28-r5 ​

Added ​

  • Cave action graphs support play_sound with a bundled WAV filename and optional background-only playback.
  • Sharp Planner can list, preview, and upload custom WAV alert sounds into Documents\\SharpTib\\scripts\\sounds.
  • Cave Bot sound rules cover character death, rare loot, nearby players, GM/staff detection, low supplies, and repeated route failures.
  • Seven CC0 default alert sounds are installed under the standard scripts sound folder.

Changed ​

  • Planner safety settings now include optional player auto-hide and per-event sound selection.
  • Managed SDK releases include the default sounds/*.wav assets and their CC0 notice.

Deprecated ​

  • (none)

Breaking ​

  • (none)

Notes ​

  • Planner-authored sound actions accept simple bundled .wav filenames only. Lua scripts may still call game.alert.play with an absolute path when explicitly needed.

2026.08.28-r4 ​

Added ​

  • Checkpoint actions for casting spells, using inventory items, equipping gear, and unequipping a selected slot.
  • Official market packets and typed events: statistics, browse, create, accept, and cancel.
  • Instant Reward Access and daily-reward joker resource types.
  • AppearanceTypeUpgradeable and MarketOfferID builders for catalog market sends.

Changed ​

  • Waypoint-referenced consumables and equipment are protected from default town sell/stash rules.

Deprecated ​

  • (none)

Breaking ​

  • (none)

Notes ​

  • Live order book and create/accept need MarketEnter from a depot locker. Averages work from anywhere via Packet.marketStatistics.

2026.08.28-r3 ​

Added ​

  • Hunt resume from the nearest patrol mark after reload or login, instead of walking outbound from O1.
  • Checkpoint navigation retries twice, then pauses the plan instead of looping a failed walk.

Changed ​

  • Plain patrol marks accept an adjacent tile (radius 1) so a creature standing on the SQM does not fail the walk.
  • MoveTo with a radius picks the nearest unoccupied walkable tile in that range.
  • After a hunt resume, supply checks wait until the circuit advances once.
  • Route tests no longer leave a stale world-route snapshot when they finish or cancel.

Deprecated ​

  • (none)

Breaking ​

  • (none)

Notes ​

  • Action and branch checkpoints keep their configured radius. Only empty patrol marks widen to 1.

2026.08.28-r2 ​

Added ​

  • Depot actions pick depot box I–XX and use container transfers into that box.
  • Inventory amount modes for stash and withdraw: reach target, exact count, or all.

Changed ​

  • Depot deposits and withdraws from depot boxes instead of the supply stash.
  • Occupied approaches and failed locker opens retry until the free-spot wait expires.
  • If the chosen box is full or missing items, depot scans the remaining boxes.
  • Withdrawals stop when remaining capacity is too low.
  • Depot stands next to the locker instead of on it, and hunt snap-back waits while depot is in progress.

Deprecated ​

  • (none)

Breaking ​

  • (none)

Notes ​

  • Choose the depot box on the town Depot action. Amount rules live on the Loot & town item rows.

2026.08.28-r1 ​

Added ​

  • sdk.storage finds a live depot locker from the current viewport and prepares stash/withdraw operations.
  • Cave-graph depot now searches, approaches a free tile, opens storage, and can run Loot & town rules.
  • Depot lockers classify as world objects (lens 1108 / locker names).

Changed ​

  • Stash or withdraw rules require a Depot action on a town waypoint, not a travel depot-only NPC service.
  • Farm planner passes storage_policy into hunt, outbound, return, and route-test graphs.

Deprecated ​

  • (none)

Breaking ​

  • (none)

Notes ​

  • Place Depot on a town mark. The locker is chosen live, so the plan does not store one city's appearance id.

2026.08.27-r16 ​

Added ​

  • Farm planner walks worldRoute.outbound as its own start/prep journey. O1 is the starting location.
  • Hunt can stop on target level, experience gained, loot value, profit, or kill count.

Changed ​

  • Town departure no longer reuses the return route. After restock the character waits on the outbound start, then walks outbound to the hunt.
  • Completing the return route no longer marks town departure done.

Deprecated ​

  • (none)

Breaking ​

  • (none)

Notes ​

  • Record three lists: Start / to hunt (O1), Hunt loop, and Back to town. Return marks are only the way back.

2026.08.27-r15 ​

Added ​

  • Official native helpers for attack, cancel attack, follow, cancel follow, directional steps, and rotation.
  • Packet.stopAttack, Packet.stopFollow, LocalPlayer:stopFollow, Player:followTargetId, and Status.follow_id.
  • Player:attackTargetId, Player:isAttacking, and Player:isAttackTarget read the exact client target-state object that drives the red world/battle-list target box.
  • Action Broker on_cancel cleanup, used by cave-graph MoveTo so cancel, preemption, failure, timeout, pause, and reset physically stop the client.
  • Target actions accept { cancel_move = boolean }; { kiting = true } explicitly preserves combat movement.

Changed ​

  • Attack/follow cancel movement only when acquiring a different target by default. Refreshing the same target no longer interrupts kiting.
  • Movement.walk, Packet.rotate, and LocalPlayer:logout now prefer official client actions with compatibility packet fallbacks.
  • SetTactics now uses the recovered payload (chase, secure, pvp) and updates client state before sending.
  • LocalPlayer:stopAttack now publishes official creature action 36 instead of the unrelated generic Cancel packet.
  • Sending an attack no longer writes an optimistic target cache; the red-box native getter is authoritative, with GameserverMessageUpdateTarget as fallback.

Deprecated ​

  • Fight-mode constants remain for source compatibility, but current Tibia does not expose a fight_mode field in SetTactics; passing one now returns an explicit error.

Breaking ​

  • PlayerTactics.fight, GameclientMessageSetTactics.fight_mode, and GameserverMessageSetTactics.fight_mode were removed because offset 20 is protobuf padding, not a field.

Notes ​

  • Official creature action types are 35 attack, 36 cancel attack, 37 follow, and 38 cancel follow.

2026.08.27-r14 ​

Added ​

  • Town checkpoints accept terminal (Stop here). Sequential list order does not fill next on that mark, so the grate-up return can sit after the hole-down mark without walking it on the outbound trip.

Changed ​

  • Recovery starts the town graph from the nearest same-floor town mark at any distance. Missing a town mark on the hunt floor is an error, not a silent wait.
  • After restock the town graph restarts from the first town mark (T1) so Check supplies can send the character back to the hunt entrance.

Deprecated ​

  • (none)

Breaking ​

  • (none)

Notes ​

  • Record the way up from the hunt as Town waypoints on the hunt floor. Hunt last → first is only the cave loop.
  • Packet.follow / Packet.attack tolerate a status module that has no follow_id / target_id getter.

2026.08.27-r13 ​

Added ​

  • Packet.attack / LocalPlayer:attack now use Tibia's official TGameActionCreature target action when the runtime supports it.

Changed ​

  • Acquiring an attack target cancels an in-flight moveTo first, including the stored client waypoint, instead of sending only GameclientMessageAttack and walking to the old destination.

Deprecated ​

  • (none)

Breaking ​

  • (none)

Notes ​

  • The raw attack packet remains an automatic compatibility fallback for older runtimes without game.attack.

2026.08.27-r12 ​

Added ​

  • Check supplies accepts items (item_id + minimum rows). Every row must be at the minimum (AND). Empty When true continues to the next action on the same mark.

Changed ​

  • (none)

Deprecated ​

  • (none)

Breaking ​

  • (none)

Notes ​

  • Outcome targets (on_success / on_failure) still jump first if set. Leave them empty when stacking two Check supplies on T1. A second shop is a second Check supplies with its own When false.

2026.08.27-r11 ​

Added ​

  • Planner:town_start_step runs the town circuit on Start when you are already on that route, so T1 Check supplies can jump to the hunt entrance or the shop.

Changed ​

  • Check supplies / Check capacity jumps finish on the target mark after its own actions. They do not keep walking the rest of the linear town list.
  • Recovery skips the shop state machine when potions are already at the configured minimum after the town walk.

Deprecated ​

  • (none)

Breaking ​

  • (none)

Notes ​

  • Rename the hunt-entrance town mark and the shop mark, then set T1 Check supplies When true / When false to those labels. Stand on T1 and Start.

2026.08.27-r10 ​

Added ​

  • Hunt and town circuits compile from authored waypoints. Hunt loops last.next to the first label. Snap range is 8 tiles on the same floor.

Changed ​

  • Sharp Planner hunt validation needs at least two waypoints on any floor. Allowed / entry are optional. Town walking stays on navigation.worldRoute.return.

Deprecated ​

  • (none)

Breaking ​

  • Automatic world navigation from the live character no longer runs. Polygon auto-patrol (generated_patrol) no longer invents hunt waypoints. Empty town lists do not path to the nearest temple.

Notes ​

  • Stand on the hunt route before Start. Recovery walks only the town waypoint list; shop talk is unchanged once an NPC is in range.

2026.08.27-r9 ​

Added ​

  • sdk.lure decides pack-pull phases (idle, pulling, fighting, leaving, safety) without walking or attacking.
  • Farm plans accept hunt.lure and hunt.noCombatZones. Farmer 09 walks the circuit until the pack is large enough, then fights, and will not open attack inside a no-combat corridor.

Changed ​

  • (none)

Deprecated ​

  • (none)

Breaking ​

  • (none)

Notes ​

  • Lure stays off unless a published plan sets hunt.lure.enabled. One monster still fights immediately; two or more start a pull until creaturesToStop.

2026.08.27-r8 ​

Added ​

  • Packet.useObject(id, loc, index?) / Inventory:open(from, index?) / Inventory:use(from, index?) write official UseObject.index when set. Omitted keeps has_bits=3.
  • ContainerService:open / scan take opts.window (UseObject.index). Default remains omit.
  • Packet.browseField(x, y, z) enqueues Browse Field with a nested Coordinate.
  • Engine.GetCameraPosition() is the live camera tile from viewport sub_x / sub_y / sub_z.
  • Tiles.visible lists occupied tiles in the current viewport. Tiles.positionsWithTopItem filters those by top appearance.
  • Tile:walkable options ignore_magic_field, ignore_monsters, and ignore_npcs (defaults false).
  • Engine.FindOnScreen / GetPlayerOnScreen find an on-screen creature by id or name.

Changed ​

  • (none)

Deprecated ​

  • (none)

Breaking ​

  • (none)

Notes ​

  • Live TGenericGameActionHandler UseObject builder: TGameActionUse writes index 255 with hasbit 2; TGameActionOpen (28) writes the source container id (ObjectPosition case 3) or 0; TGameActionOpenInNewWindow (29) writes a live free-window id, not a constant. No USE_OBJECT_NEW_WINDOW shipped. SDK default still omits the field (has_bits=3).

2026.08.27-r7 ​

Added ​

  • game.paths.scripts / sounds / module wrap the host scripts root and the running file's parent. sounds() is scripts() .. "\\sounds" and does not create the directory.
  • game.alert.play(path, opts?) plays an async .wav. { bundled = true } resolves a single filename under sounds(). { background_only = true } is silent while the Tibia window is foreground.
  • alert_service optional config.sound and profile.alarm optional opts.sound call play next to beep.
  • ShowModalDialog decoder + Engine.GetEventState("ShowModalDialog"). Answer with Packet.send("AnswerModalDialog", { window_id, button, choice }).
  • LocalPlayer:unjustified() returns the existing UnjustifiedPoints snapshot.
  • CreatureMarks decoder: oneof mark @32 / mark_case @40 (CreatureMarkBorder = 2, CreatureMarkIsAttacked = 3). Creatures.note / enrich expose icons and marks.

Changed ​

  • (none)

Deprecated ​

  • (none)

Breaking ​

  • (none)

Notes ​

  • Scalar outbound already sendable: ApplyImbuement, GetQuestLog, GetQuestLine, EditText, PreyAction, ExaltationAction, BuyStoreOffer, CloseImbuingDialog, TaskboardCommand. Do not Packet.send("Taskboard") — that name is inbound.
  • CollectDailyReward.items and RequestStoreOffers.category still need a nested rep/msg writer. No helper until that write is recovered.
  • Monk harmony/serene/stances, chat toggle, world name, client version, and UI ping/FPS stay unimplemented: no named live layout field recovered.
  • No ClearImbuement RTTI. ExaltationAction scalars stay on Packet.send; action enums are not guessed.

2026.08.27-r6 ​

Added ​

  • sdk.keys parses "Ctrl+Shift+K" into a Win32 VK plus Ctrl/Alt/Shift mask (parse, code, matches, isPressed).
  • game.input_snapshot reports ctrl_down, alt_down, shift_down, and modifiers (CTRL=1, ALT=2, SHIFT=4).
  • game.on("key_down") passes a second modifiers argument. One-argument handlers still work.

Changed ​

  • Engine.on passes tick, key_down, and render through to game.on without RawEvent.decode. Packet names still decode.

Deprecated ​

  • (none)

Breaking ​

  • (none)

2026.08.27-r5 ​

Added ​

  • Inventory:stow / stowContainer / stowStack / retrieve wrap Packet.stash. Inventory:look, use (alias of open), and pickToImbue.
  • Packet.look and Packet.pickObjectToImbue enqueue Look / Pick Item with layout-driven fields.
  • LocalPlayer party sends: inviteParty / joinParty / passLeadership (creature enqueue), leaveParty, shareExperience.
  • LocalPlayer:hasReceivedBasicData, isPremium, premiumUntil, blessings from PlayerDataBasic / Blessings.
  • sdk.resources type-keyed ResourceBalance cache; LocalPlayer bankGold, goldBalance, dusts, dustsMaximum, huntingPoints, preyWildcards, requestResource.
  • Skills.all() / LocalPlayer:skills() read live combat skills plus crit/leech scalars from the merged PlayerSkills layout.

Changed ​

  • Status.reset() still clears only combat/vitals. Premium, blessings, and resource balances survive WorldEntered and clear on SessionEnd / SessionEndInformation.
  • gold() remains backpack coins. goldBalance() is bank + inventory-gold resources.
  • dustsMaximum() is the dust row companion amount, not a confirmed cap.

Deprecated ​

  • (none)

Breaking ​

  • (none)

2026.08.27-r4 ​

Added ​

  • sdk.input publishes official tibia::input::TGameAction rows by name (ToggleMounted, AttackFirstTarget, SetTactics).
  • game.dbg.action / game.dbg.actions list the recovered 205-class catalog. game.action publishes simple rows.

Changed ​

  • (none)

Deprecated ​

  • (none)

Breaking ​

  • (none)

2026.08.27-r3 ​

Added ​

  • Inventory:changeGold converts a 100 gold or platinum backpack stack.
  • Path.plan / Path.planned submit FindPath on the map worker and pack the result.
  • Cave conditions stamina_below and stamina_at_least.
  • Ack.reject fails a ticket when the server says the action is not possible.

Changed ​

  • Path.to avoid_unpass uses native find_path first, then Lua A* only if the route hits live unpass.
  • Use-down transitions (sewer grates) stand on the tile before Use.
  • Hybrid world routes skip a distant canned grate graph and retry a failed worker job.
  • Engine.GetPlayers uses the player id band; Player:kind is cached.

Deprecated ​

  • (none)

Breaking ​

  • (none)

2026.08.27-r2 ​

Added ​

  • Movement.stop / LocalPlayer:stopWalk cancel click-to-walk by publishing TMovementIntentStop (not only GameclientMessageStop).

Changed ​

  • Kiting prefers native pathing at kite range and only uses Lua A* when the native route cuts a blocked tile.

Deprecated ​

  • (none)

Breaking ​

  • (none)

2026.08.27-r1 ​

Added ​

  • Path.to option avoid_unpass to skip live unpass tiles such as shop windows and closed doors.

Changed ​

  • Planner travel and world-route walking use avoid_unpass.
  • Same-floor corridor gaps up to 12 tiles stay ordinary walks; only floor changes and larger jumps become transitions.
  • Transition checkpoints sit on or next to the stair or portal.
  • Starting a hunt resets leftover world-route navigation so it cannot fight the recorded path.
  • World-route graphs use the hunt path range and retry a step when the client is already walking.
  • Transition tiles refresh from the live map when the cached stack is empty.
  • Kiting caches line-of-sight tiles, tries each stand once, and holds still without a new path.

Deprecated ​

  • (none)

Breaking ​

  • (none)

2026.08.26-r30 ​

Added ​

  • Portal snapshot. Public API is the generated catalog from this tree.

Changed ​

  • (none)

Deprecated ​

  • (none)

Breaking ​

  • (none)

Earlier: 2026.08.21-r2 (incomplete) ​

Notes copied from the old starter kit. They are not a complete history of later revisions.

Added ​

  • High-level Lua SDK: engine, player/local player, inventory, NPC, movement, skills, math, packet, memory, data, path, kite, and navigator.
  • Static catalogs, walk grid, typed inbound decoders, and attack/follow/loot/trade helpers.

Arcane SDK catalog generated from scripts/sdk