> 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/data/event/bonusmanager.md).

# BonusManager.dat

Scheduled server-wide bonus windows. Defines when a bonus is active, which rate it modifies, and the bonus value per VIP tier. Up to 30 independent bonus slots can run in parallel.

## File Location

```
Data/Event/BonusManager.dat
```

Loaded once at GameServer startup. Gated by [Event.dat](/docs/gameserver/event-dat.md#bonus-manager) `BonusManagerSwitch`. Changes require a restart.

## Sections

### Section 0 - Schedule

```
0
//Index   Year   Month   Day   DoW   Hour   Minute   Second
0         *      1       *     *     0      0        0
1         *      4       *     *     0      0        0
2         *      5       *     *     0      0        0
end
```

Each row ties a bonus slot (`Index`, 0-29) to a calendar start. Multiple rows with the same `Index` stack as alternate start times.

### Section 1 - Window Metadata

```
1
//Index   StartMessage   FinalMessage   BonusTime
0         *              *              86400
...
end
```

| Column         | Type              | Effect                                                                                |
| -------------- | ----------------- | ------------------------------------------------------------------------------------- |
| `Index`        | int               | Bonus slot ID (0-29)                                                                  |
| `StartMessage` | message ID or `*` | [Message.xml](/docs/data/message.md) ID broadcast when the window opens. `*` = silent |
| `FinalMessage` | message ID or `*` | Message ID broadcast when the window ends. `*` = silent                               |
| `BonusTime`    | seconds           | Window duration. `86400` = 24 hours                                                   |

### Section 2 - Bonus Rules

```
2
//Index  BonusIndex  BonusValue_AL0  BonusValue_AL1  BonusValue_AL2  BonusValue_AL3  ItemIndex  ItemLevel  MapNumber  MonsterClass  MonsterLevelMin  MonsterLevelMax
0        3           1000            1000            1000            1000            *          *          *          *             12               69
...
end
```

Multiple rows per `Index` are allowed; each row applies a separate rule while the window is active. All filter columns must match for the rule to fire.

| Column             | Type       | Effect                                                                |
| ------------------ | ---------- | --------------------------------------------------------------------- |
| `Index`            | int        | Bonus slot ID (matches sections 0 and 1)                              |
| `BonusIndex`       | enum       | Bonus type. See [BonusIndex values](#bonusindex-values)               |
| `BonusValue_AL0-3` | int        | Per-VIP-tier bonus amount. Unit depends on `BonusIndex`               |
| `ItemIndex`        | int or `*` | Restrict bonus to this item index (for drop-based bonuses). `*` = any |
| `ItemLevel`        | int or `*` | Restrict to this item level. `*` = any                                |
| `MapNumber`        | int or `*` | Restrict to this map. `*` = any                                       |
| `MonsterClass`     | int or `*` | Restrict to this monster class. `*` = any                             |
| `MonsterLevelMin`  | int or `*` | Minimum monster level. `*` = no floor                                 |
| `MonsterLevelMax`  | int or `*` | Maximum monster level. `*` = no ceiling                               |

### BonusIndex Values

| Value | Bonus                        | Unit                                                           |
| ----- | ---------------------------- | -------------------------------------------------------------- |
| `0`   | Experience rate              | Percent added to baseline (e.g. `100` = +100%)                 |
| `1`   | Master experience rate       | Percent added to baseline                                      |
| `2`   | Item drop rate               | Percent added to baseline                                      |
| `3`   | Common item drop rate        | Per-million; added against remaining headroom (1000000 - base) |
| `4`   | Excellent item drop rate     | Per-million; against remaining headroom                        |
| `5`   | Set (Ancient) item drop rate | Per-million; against remaining headroom                        |
| `6`   | Goblin Point                 | Flat amount added to reward                                    |
| `7`   | Reset amount                 | Flat amount added per reset command                            |
| `8`   | Master reset amount          | Flat amount added per master reset command                     |

## Cross-File Dependencies

| Value                                 | Related in                                                                                      |
| ------------------------------------- | ----------------------------------------------------------------------------------------------- |
| Enable flag                           | [Event.dat](/docs/gameserver/event-dat.md#bonus-manager) `BonusManagerSwitch`                   |
| Per-tier values (`_AL0-3`)            | Same Account Level scheme as [Common.dat](/docs/gameserver/common-dat.md#account-level-al0-al3) |
| `StartMessage`, `FinalMessage`        | [Message.xml](/docs/data/message.md)                                                            |
| `ItemIndex`                           | [Item.xml](/docs/data/item/item.md)                                                             |
| `MonsterClass`, `MonsterLevelMin/Max` | [Monster.xml](/docs/data/monster/monster.md)                                                    |
| `MapNumber`                           | [MapManager.xml](/docs/data/mapmanager.md)                                                      |

## Common Issues

* **Bonus never triggers** - current time does not fall inside any window; check section 0 + `BonusTime` in section 1
* **Bonus applies outside event map** - `MapNumber = *`; set a specific map to restrict
* **VIP tiers all get the same bonus** - all four `_AL0-3` columns have the same value
* **Multiple bonuses stack unexpectedly** - multiple rows in section 2 share the same `Index`; each applies independently, and separate `Index` slots also layer
* **Common/Excellent/Set drop bonus seems weaker than expected** - indices 3-5 scale against remaining probability (1000000 - base), not as a flat percent; adjust `_AL0-3` upward if the baseline drop rate is already high
