Ketaros
Improved Costumers AI

Improved Costumers AI

Free

TCG: Card Shop Simulator · v1.2 · by Ketaros

About

BetterCustomersAI — Mod
BepInEx Plugin · TCG Card Shop Simulator

BetterCustomersAI

Smarter shoppers, livelier demand, and card offers that respect how far your shop has come.
📦 v1.1.0 ⚙️ 15 live settings 🔧 6 bugs fixed 💾 Save-safe

📖 About

Vanilla customers are strangely uninterested. Most walk in wanting nothing, the "in demand" list barely rotates, and no matter how big your shop gets, people still turn up trying to sell you 14-cent commons. BetterCustomersAI reworks the shopping and trading brain so customers actually want things, react to your pricing, and bring offers worth your time. Every value is exposed in the config and editable live in-game — no rebuilds, no save edits.

×2–3
More shoppers
2 days
Demand rotation
×4
Fire-sale buying
6
Bugs fixed

What It Improves

  • 🛍️ More customers actually shopThe chance a customer wants items at all is raised across every shop-level bracket.
  • 🔄 Demand that rotatesThe shop-wide "in demand" list refreshes every 2 days instead of 7, with far more item types.
  • 💰 Pricing that mattersA graded buy-chance curve makes your markup readable — and dampens absurd sensitivity on cheap items.
  • 🔥 Fire salesUnderpricing makes customers buy up to 4× the quantity. A real sale clears a shelf fast.
  • 🃏 Offers that scaleCards customers offer you have a minimum value that grows with your shop level.
  • 🤝 Fair, valid tradesThe card they ask for is guaranteed to be one you own, at a value matching what they give.

👤 More Customers Actually Shop

Vanilla gates whether a customer wants items behind a shop-level roll that starts brutally low. This raises it across the board, and grows each wishlist from 1–4 item types to 1–8 — now drawn without replacement, so they are always distinct.

Shop levelVanillaThis mod
Below 35%15%
Below 1015%35%
Below 3030%55%
Below 5045%70%
70 and above60%85%

💵 Pricing That Matters

A graded buy-chance curve replaces the vanilla check, so your markup has a real, readable effect. Cheap items are dampened — a big percentage swing on a $0.50 card counts far less than the same swing on a $50 one.

Your price vs marketBuy chance
50% below market100%
30% below market~90–95%
At market75%
20% above market~60–70%
40% above market~40–50%
More than 60% aboveThey refuse

🃏 Card Offers That Scale With Your Shop

Customers offering to sell or trade you cards now respect a minimum market value that grows with your shop level. If an offer falls below the floor, fresh candidates are drawn exactly the way vanilla draws them and the first qualifying card is used. If the floor cannot be met, the most valuable candidate found is used — so offers always improve rather than falling back to junk. Graded offers are covered too.

minimum = MinOfferValueBase + (MinOfferValuePerShopLevel × shopLevel)
          capped by MinOfferValueCap
Shop levelMinimum offer (defaults)
10$6
50$26
115$58
200$101

Fair, valid trades

In a card-for-card trade the requested card is guaranteed to be one you actually own, at a value inside a configurable ratio band of what they are handing over. Optionally, the mod will also avoid offering you cards you already own piles of.

🔧 Bugs Fixed

Three of these are genuine vanilla bugs, labelled below.

Trade requests for cards you do not ownVanilla bug

The wanted-card search ends in a fallback loop that assigns its candidate before validating it. When the price band cannot be satisfied it exhausts 10,000 attempts and leaves the last random, unvalidated card in the request slot — so a customer offers a $0.14 card and demands a $4,700 one you own zero of. Now detected and replaced with a card you own at fair value, with the trade screen re-synced.

Half-empty demand listVanilla bug

The target-buy-list loop removed an entry from its source list and advanced its counter each pass, so the two met in the middle and it stopped early — adding only about half the intended item types whenever shelf variety was limited.

Duplicate wishlist entriesVanilla bug

Wishlists were built by repeatedly rolling a random index, so the same item type could appear twice — but only one copy was ever cleared when bought, leaving customers stuck wanting something they had already picked up.

Divide-by-zero in the buy-chance check

A market price of zero produced an infinite ratio and a nondeterministic buy chance. Now falls back to a neutral 75%.

Lost item reference when a compartment drains

The final purchase that empties a compartment left a null reference, so the wishlist entry and its positive review were silently skipped.

Graded offers bypassing the value floor

Graded offers are built through a different code path than normal ones and escaped the minimum-value rule entirely. Both paths are now covered, and the re-roll preserves the card's grade.

⚙️ Configuration

All settings live in BepInEx/config/com.mod.bettercustomersai.cfg and can be edited live in-game with BepInEx Configuration Manager (F1).

SettingDefaultEffect
VerboseLoggingfalseDetailed per-customer trace logging
EnableSaleQuantityBonustrueUnderpricing increases quantity bought
MaxSaleQuantityMultiplier4Ceiling for that multiplier
RefreshIntervalDays2How often shop-wide demand rotates
BaseSlots6Item types in the demand list
MaxItems8Max distinct types one customer wants
ContinueChancePercent75Chance to keep shopping vs check out
MaxBagVolume80Bag volume that forces checkout
EnableMinOfferValuetrueMinimum value for offered cards
MinOfferValueBase1Floor at shop level 0
MinOfferValuePerShopLevel0.5Added per shop level — raise for pickier customers
MinOfferValueCap500Ceiling on the computed floor
MaxRerollAttempts40Candidates tried per offer
MaxOwnedCopiesPreferred0Above 0: avoid cards you own more than this many of
FixWantedCardtrueRepair invalid trade requests
WantedCardMinRatio0.5Request must be at least 50% of offer value
WantedCardMaxRatio2.0Request must be at most 200% — lower to ~1.2 for strict trades

💾 Installation

  1. Install BepInEx 5.x for TCG Card Shop Simulator.
  2. Extract the release zip into your BepInEx folder, so you get BepInEx\plugins\BetterCustomersAI\BetterCustomersAI.dll.
  3. Launch once — the config file is generated on that first run. The log shows:
BetterCustomersAI v1.1.0 loaded.

Requirements: BepInEx 5.x · Optional: BepInEx Configuration Manager, for the in-game F1 settings menu.

🧩 Compatibility

  • Save-safeNothing is written to your save. Every change is behavioural and applies only while the mod is loaded — remove it and vanilla behaviour returns.
  • Works with card & creature modsThe trade patches are ordered to run after NewCardTypes, so a custom-border card that already meets the value floor is kept as-is.
  • Fails loudly, not silentlyAll reflected game members are validated at load. A game update that renames one produces a clear startup error naming it, instead of a crash mid-game.
  • Built against v5.4.xSeveral patches fully reimplement their game method, mirrored from the Jan 2026 build. A major game update may require re-syncing.

🔍 Troubleshooting

Set VerboseLogging = true to trace decisions. You will see lines such as:

[Offer] upgraded $0.42 -> $87.30 (floor $58.50, 3 tries)
[Trade] wanted card fixed: $4723.46 (owned 0) -> $61.20 (owned)
[TakeItem] SALE BONUS: price=$1.20 market=$3.00 multiplier=x4.00 qty=2->8
SymptomSetting to change
Offers still feel cheapRaise MinOfferValuePerShopLevel
Customers ask for far pricier cards than they giveLower WantedCardMaxRatio
Shelves empty too fast on discountsLower MaxSaleQuantityMultiplier
Demand changes too oftenRaise RefreshIntervalDays
BetterCustomersAI v1.1.0 · BepInEx plugin for TCG Card Shop Simulator
15 configurable settings · 6 bugs fixed · save-safe and fully reversible

Requirements

BepInEx 5.4.23.x (Mono / x64) already installed in the game folder.

Installation

1. Copy the "BetterCustomersAI" folder into your existing:

...\TCG Card Shop Simulator\BepInEx\plugins\

2. The folder should contain BetterCustomersAI.dll (this Readme.txt is

optional and can stay or be deleted).

Then launch the game once. The config file is generated on first run.

VERIFY IT LOADED

Open BepInEx\LogOutput.log and look for:

Loading [BetterCustomersAI 1.0.0]

BetterCustomersAI v1.0.0 loaded. (verbose logging: False)

You should NOT see any "[Reflect] Missing ..." errors.

Comments (0)

Sign in to join the conversation.

No comments yet. Be the first.

Users of this Mod also Downloaded