ID items in map when full

Feature Request: In-Map Inventory Triage — Identify with Scrolls of Wisdom & Drop Unwanted Items Mid-Map

Category: Feature Request
Version tested against: v0.9.4f (Premium)
Submitted by: Forum post — prepared with full technical context


Summary

Request: When the bot’s inventory reaches a configurable threshold (e.g. 80% full) while inside a map, it should pause looting, open its inventory, use Scrolls of Wisdom to identify all unidentified items, evaluate each one against pickit rules, and drop (press Alt + click to drop) items that do not match any [StashItem] or [Salvage] rule — freeing up slots to continue farming without an early portal exit.


Problem Description

Currently, in ExiledBot2, the inventory management lifecycle is entirely town/hideout-only:

  1. Bot enters map → picks up items → inventory fills → stops looting → finishes clearing → portals to hideout

  2. In hideout: identifies at Hooded One (free, CTRL+click) → stashes matches → sells/salvages non-matches → re-enters map

This flow has a real, measurable cost:

  • Missed loot: Once inventory is full, the bot ignores item labels. On maps with heavy loot density (essence, delirium, ritual, breach), the inventory can fill by the 50-60% exploration mark, leaving significant value on the floor.

  • No mid-run recovery: There is no mechanism to free inventory space and continue the run at full efficiency.

  • Scroll of Wisdom underutilisation: keep_id_scroll_number in pickit.ini is set to maintain a stack (default 40), but those scrolls are never consumed mid-map — they sit idle while the bot stops picking things up.


Technical Context (Based on Source Investigation)

I’ve done a deep dive into the bot’s architecture to make this request as implementable as possible. Here is what’s relevant:

State Machine Architecture

The bot runs on a priority-based state machine, as evidenced in lastrun.log:

Running StateStashing with priority: STASHING (10)

Running StateIdling with priority: IDLING (0)

Running StateClicking with priority: STASHING (10)

The lastrun.log also reveals that StateStashing already handles:

  • Identifying items (via Hooded One / Doryani NPC interaction)

  • Applying IPD pickit rules post-identification

  • Routing items to stash tabs, salvage, or vendor

The groundwork for identification and rule evaluation already exists — it just runs exclusively in the hideout/town context.

Identification Precedent

The patch notes confirm identification infrastructure has been progressively built:

  • v0.3.0: “Bot identifies items at Doryani if he is nearby”

  • v0.5.0: “Bot closes all panels while identifying items at Doryani to avoid getting stuck”

  • v0.5.1b: “Bot looks for Hooded One to identify items in town else it uses id scrolls”

  • v0.9.4b: “Bot now identifies unidentified waystones before applying crafting currency”

This shows the bot already has:

  1. The ability to use Scrolls of Wisdom on individual items (right-click scroll → left-click item interaction)

  2. The ability to detect identified vs unidentified items in inventory ([Identified] flag exists, confirmed by v0.1.0f: “Fixed identified item detection”)

  3. The ability to re-evaluate inventory items post-identification against pickit rules

Scroll of Wisdom Retrieval

The bot can already pull Scrolls of Wisdom from stash when depleted:

  • v0.2.1: “Fixed Scroll of Wisdom retrieval from currency stash tab when depleted”

So even if the in-inventory scroll stack runs low mid-map, the infrastructure for managing scroll supply already exists.

keep_id_scroll_number in pickit.ini

ini

; Number of id scroll you want to keep in inventory

keep_id_scroll_number=40

This setting already controls how many scrolls the bot maintains. The proposed feature would simply use these scrolls during map runs rather than keeping them idle.

IPD Rule System — Before/After # Evaluation

The IPD pickit syntax is central to this feature. Rules use the # separator to split pre-identification from post-identification checks:

// Before #: Checked BEFORE identifying the item

// After #: Checked AFTER identifying the item

[Rarity] == “Rare” # [TotalResistances] > “50” && [StashItem] == “true”

This means the engine already knows the difference between:

  • Items that haven’t been identified yet (before # evaluates)

  • Items that have been identified and can be fully checked (after # evaluates)

The same rule evaluation pipeline used in StateStashing could be applied mid-map, post-identification, to determine what to drop.

Existing [DropItem] Analogue — Item Dropping Already Understood

The bot already handles dropping items in specific contexts (e.g. moving currency to NPC trays, ctrl-clicking items between inventory and stash). The mechanic of dropping an item to the ground (Alt + click in PoE2) needs to be added as an explicit action, but it’s mechanically simple — it’s a two-step input the bot already handles analogues of.


Proposed Implementation

New config.ini Setting (general section)

ini

; Enable in-map inventory triage when inventory is X% full

enable_inmap_triage=false

; Trigger triage when inventory slots filled exceeds this percentage (0-100)

inmap_triage_threshold=80

; Only triage if at least this many Scrolls of Wisdom are in inventory

inmap_triage_min_scrolls=5

; After triage, only continue if at least this many free slots are recovered

inmap_triage_min_free_slots=4

New IPD Action Flag

[DropItem] == "true"

This flag, placed in the after # section of a pickit rule, tells the bot to drop the item to the ground (Alt + click) rather than stash/salvage/sell it:

// Example: Drop rare items after ID if they don't have useful mods

[Rarity] == “Rare” && [Category] == “Boots” # [base_movement_velocity_+%] < “25” && [DropItem] == “true”

If no rule matches the identified item at all (i.e. it would normally be vendored), the bot should also drop it rather than carry dead weight.

Proposed State: StateInMapTriage

Priority: INVENTORY_FULL (suggested: priority 8, below STASHING at 10 but above LOOT_PICKUP)

Trigger condition:

  • Bot is currently inside a map (not in hideout/town)

  • Inventory slot count >= inmap_triage_threshold%

  • Scrolls of Wisdom in inventory >= inmap_triage_min_scrolls

Flow:

1. Bot pauses movement/looting (existing pause mechanic)

2. Opens inventory panel (existing keybind detection: auto-detects from game.ini)

3. For each unidentified item in inventory:

 a. Right-click Scroll of Wisdom

 b. Left-click unidentified item

 c. Re-evaluate item against after-# pickit rules

 d. If item matches \[DropItem\] == "true" OR no rule matches → Alt+click item to drop

4. Close inventory panel

5. Resume looting/exploring

6. If free slots < inmap_triage_min_free_slots → trigger early portal (existing StatePortal)

Scroll Stack Handling

The existing keep_id_scroll_number setting should act as a floor — triage will not consume scrolls below this reserve. A separate inmap_triage_min_scrolls setting (default: 5) controls the minimum required to trigger triage at all, preventing triage from leaving the bot with zero scrolls.


Why This Fits the Existing Architecture

Existing System How It Maps to This Feature
StateStashing (identify + evaluate at NPC) StateInMapTriage reuses same identify + IPD evaluate logic, different trigger context
keep_id_scroll_number in pickit.ini Already controls scroll supply — triage consumes from this pool above the reserve floor
[StashItem], [Salvage] IPD flags [DropItem] is the natural third action flag alongside these
Before/After # IPD rule evaluation Already handles the identified/unidentified distinction required
Scroll of Wisdom retrieval from stash Existing infrastructure ensures scroll supply is maintained
Priority-based state machine New state slots naturally between LOOT_PICKUP and STASHING priorities
Inventory slot detection Already used to detect when inventory is “full” (stops picking up)
Alt+click / item drop input Mechanically similar to existing NPC tray interactions

Real-World Use Case

Running T14–T16 maps (ExcelTest profile) with a broad rare gear pickit (ilvl 75+ boots, rings, amulets, gloves, body armours, helmets, quarterstaves — all unidentified). With ritual, essence, and breach active, the inventory can fill within 2–3 minutes of map entry, leaving 40–50% of the map’s loot uncollected.

With this feature:

  • Bot hits 80% inventory → pauses → IDs everything in ~15–20 seconds (10 clicks at AI_clicks_per_second=10 from system.ini)

  • Drops garbage rares (wrong base, wrong mods)

  • Recovers 6–12 slots

  • Continues farming the remaining 40–50% of the map at full efficiency

  • Exits the map with a full, pre-filtered inventory instead of a full inventory of mixed trash


Related/Prior Requests


Configuration I’m Working With

  • Bot: ExiledBot2 v0.9.4f Premium

  • Pickit: Custom optimised_martial_artist.ipd (409 rules loaded per lastrun.log)

  • Map profile: ExcelTest.ipd (T14–T16 Rare maps)

  • keep_id_scroll_number=40 (full stack maintained)

  • Scroll pickup range: 60 units

Happy to test any implementation of this feature and report results. Thanks for the consideration — this bot is already incredibly capable and this would push map-farming efficiency significantly further.