> For the complete documentation index, see [llms.txt](https://axiomemu.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://axiomemu.gitbook.io/docs/gameserver/custom-dat.md).

# Custom.dat

Settings for AXIOM-EMU custom features layered on top of vanilla gameplay: chaos mix announcements, MuHelper tuning, death announcements, guild warehouse permissions, and shop confirmation dialogs.

## File Location

```
GameServer/Data/GameServerInfo - Custom.dat
```

All keys under `[GameServerInfo]`. Changes require a GameServer restart.

## Announce Chaos Mix

Broadcasts a message to the entire server when a big chaos mix succeeds (typically +15 items).

| Key                    | Type   | Default                  | Effect                                                             |
| ---------------------- | ------ | ------------------------ | ------------------------------------------------------------------ |
| `AnnounceChaosMix`     | 0 or 1 | `0`                      | Master toggle                                                      |
| `AnnounceChaosMixText` | string | `%s put the item %s +15` | Broadcast template. First `%s` is player name, second is item name |

{% hint style="info" %}
Broadcast rows land in the chaos mix log regardless of this flag. This setting only controls whether the broadcast is visible to other players.
{% endhint %}

## Custom Attack (MuHelper tuning)

Extra MuHelper behaviors on top of the Common.dat Helper Settings.

| Key                            | Type    | Default  | Effect                                                                                                              |
| ------------------------------ | ------- | -------- | ------------------------------------------------------------------------------------------------------------------- |
| `CustomAttackTime_AL0-3`       | seconds | `0` each | Max continuous MuHelper runtime per tier. `0` = unlimited                                                           |
| `CustomAttackDelay`            | ms      | `0`      | Extra delay between MuHelper attacks. `0` uses base attack speed                                                    |
| `CustomAttackAutoPotionDelay`  | ms      | `0`      | Minimum gap between auto-potion uses. `0` uses the Common.dat anti-hack value                                       |
| `CustomAttackAutoBuff_AL0-3`   | 0 or 1  | `0` each | `1` allows MuHelper to auto-cast buffs                                                                              |
| `CustomAttackAutoBuffDelay`    | ms      | `0`      | Minimum time between auto-buff casts. `0` reuses the previous timestamp and effectively allows back-to-back rebuffs |
| `CustomAttackAutoResume_AL0-3` | 0 or 1  | `0` each | `1` resumes MuHelper automatically after character is revived or repositioned                                       |

## Custom Death Message

| Key                        | Default | Effect                                                                                                      |
| -------------------------- | ------- | ----------------------------------------------------------------------------------------------------------- |
| `CustomDeathMessageSwitch` | `0`     | `1` shows themed custom death messages. Message strings live in shared `Data/Custom/CustomDeathMessage.txt` |

## Custom Event Time

| Key                     | Default | Effect                                             |
| ----------------------- | ------- | -------------------------------------------------- |
| `CustomEventTimeSwitch` | `0`     | Master toggle for the legacy event-time chat reply |

{% hint style="warning" %}
The packet handler that consumed this switch is currently disabled in GameServer, so the value has no runtime effect. Live event countdowns are now driven by the [EventTimerInfo plugin](/docs/data/plugins/eventtimerinfo.md). Leave at `0` unless the legacy handler is restored.
{% endhint %}

## Custom Guild Warehouse

Shared storage accessible to guild members.

| Key                    | Type   | Default | Effect                                                 |
| ---------------------- | ------ | ------- | ------------------------------------------------------ |
| `GuildWarehouseEnable` | 0 or 1 | `0`     | Master toggle                                          |
| `GuildWarehouseStatus` | enum   | `0`     | Minimum guild rank required to access. See table below |

Access rank values:

| Value | Minimum rank              |
| ----- | ------------------------- |
| `0`   | All members               |
| `32`  | Battle Master or higher   |
| `64`  | Guild Assistant or higher |
| `128` | Guild Master only         |

Ranks stack: `32` includes Battle Master, Guild Assistant, Guild Master; `64` includes Guild Assistant and Guild Master; `128` is Guild Master only.

## Custom Shop Message Box

| Key                    | Type       | Default | Effect                              |
| ---------------------- | ---------- | ------- | ----------------------------------- |
| `CustomShopMessageBox` | 0, 1, or 2 | `0`     | Reserved purchase-confirmation mode |

Intended mode values (kept for forward compatibility):

| Value | Intended behavior                                    |
| ----- | ---------------------------------------------------- |
| `0`   | Disabled                                             |
| `1`   | Confirm only for coin-priced items (WCoin, GoldCoin) |
| `2`   | Confirm for all purchases                            |

{% hint style="warning" %}
The shop-purchase confirmation logic is currently disabled in GameServer, so this key is read but does not change behavior. Leave it at `0`.
{% endhint %}

## Cross-File Dependencies

| Setting here                  | Related in                                                                                                                                                                                 |
| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `AnnounceChaosMix`            | Chaos mix outcomes driven by the [ChaosMix plugin](/docs/data/plugins/chaosmix.md); log rows gated by Common.dat `WriteChaosMixLog`                                                        |
| `CustomAttack*`               | Layered on top of Common.dat Helper Settings (`HelperSwitch`, `HelperActive*`) and anti-hack tolerances. Pickup whitelist in [MuHelperPickup plugin](/docs/data/plugins/muhelperpickup.md) |
| `CustomAttackAutoPotionDelay` | Must stay >= Common.dat `CheckAutoPotionHackTolerance` or legitimate MuHelper use will trigger hack logs                                                                                   |
| `CustomDeathMessageSwitch`    | Message strings in [CustomDeathMessage](/docs/data/customdeathmessage.md)                                                                                                                  |
| `CustomEventTimeSwitch`       | Live countdowns now sourced from [EventTimerInfo plugin](/docs/data/plugins/eventtimerinfo.md)                                                                                             |
| `GuildWarehouseStatus`        | Guild rank flags defined by the DataServer guild schema                                                                                                                                    |

## Common Issues

* **Chaos mix not announcing despite success** - `AnnounceChaosMix = 0`
* **MuHelper triggers anti-hack kicks** - `CustomAttackAutoPotionDelay` is set lower than Common.dat `CheckAutoPotionHackTolerance`
* **Death message is the vanilla one** - `CustomDeathMessageSwitch = 0` or the `CustomDeathMessage.txt` file is empty
* **Every guild member can see warehouse even though restricted** - `GuildWarehouseStatus = 0` means all members; values `32/64/128` are the restricted modes
* **Players complain about confirmation spam** - set `CustomShopMessageBox = 1` to only confirm coin purchases, or `0` to disable
