> 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/plugins/custommonster.md).

# CustomMonster

Per-monster overrides on top of `Monster.xml`. Apply stat multipliers to specific monsters (optionally scoped to one map), customize kill broadcasts, grant DataServer rewards on kill, and chain on-death summons.

## File Location

```
Data/Plugins/World/CustomMonster.xml
```

Loaded once at GameServer startup. Supports hot reload via plugin admin command.

## Schema

```xml
<CustomMonsters>
    <Monster Index="..." MapNumber="..."
             MaxLife="..." DamageMin="..." DamageMax="..."
             Defense="..." AttackRate="..." DefenseRate="..."
             ExperienceRate="..."
             KillMessage="..." InfoMessage="..."
             RewardValue1="..." RewardValue2="..."
             SummonMonster="..." SummonMonsterCount="..." SummonMonsterRate="..." />
</CustomMonsters>
```

## Identity

| Attribute   | Type        | Effect                                                             |
| ----------- | ----------- | ------------------------------------------------------------------ |
| `Index`     | int         | Monster class ID from [Monster.xml](/docs/data/monster/monster.md) |
| `MapNumber` | int or `-1` | Map to scope this override to. `-1` = every map                    |

## Stat Multipliers

All multipliers are percent. `100` = unchanged, `200` = 2x, `-1` = skip (use the base Monster.xml value).

| Attribute        | Effect                                                                                          |
| ---------------- | ----------------------------------------------------------------------------------------------- |
| `MaxLife`        | HP multiplier                                                                                   |
| `DamageMin`      | Minimum physical damage multiplier. In Season 7+ builds also scales elemental minimum damage    |
| `DamageMax`      | Maximum physical damage multiplier. In Season 7+ builds also scales elemental maximum damage    |
| `Defense`        | Physical defense multiplier. In Season 7+ builds also scales elemental defense                  |
| `AttackRate`     | Attack success rate multiplier. In Season 7+ builds also scales elemental attack success rate   |
| `DefenseRate`    | Defense success rate multiplier. In Season 7+ builds also scales elemental defense success rate |
| `ExperienceRate` | XP reward multiplier                                                                            |

## Broadcast Messages

| Attribute     | Effect                                                                                                                                                        |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `KillMessage` | Message ID from [Message.xml](/docs/data/message.md) broadcast to all players on kill. `-1` disables. The killer's name is passed as the first `%s` parameter |
| `InfoMessage` | Message ID sent only to the killer. `-1` disables. Receives `RewardValue1` and `RewardValue2` as `%d` parameters                                              |

## DataServer Rewards

Optional kill reward forwarded to DataServer. Both values must be non-`-1` to trigger.

| Attribute      | Effect                  |
| -------------- | ----------------------- |
| `RewardValue1` | First reward parameter  |
| `RewardValue2` | Second reward parameter |

The DataServer handler decides what those parameters mean (coin amount, event point, etc.); check your server's reward routing.

## On-Death Summon

| Attribute            | Effect                                                                                                    |
| -------------------- | --------------------------------------------------------------------------------------------------------- |
| `SummonMonster`      | Monster class to spawn on this monster's death. Must be greater than `0` to trigger; `0` or `-1` disables |
| `SummonMonsterCount` | Number to spawn. Any value `<= 0` defaults to 1                                                           |
| `SummonMonsterRate`  | Chance to summon, percent (0-100). Default `100`                                                          |

Summoned monsters spawn within 3 tiles of the death location and auto-despawn after 30 minutes. If no free spawn tile is found within 50 attempts, the summon is skipped.

## Cross-File Dependencies

| Attribute                      | Related in                                   |
| ------------------------------ | -------------------------------------------- |
| `Index`, `SummonMonster`       | [Monster.xml](/docs/data/monster/monster.md) |
| `MapNumber`                    | [MapManager.xml](/docs/data/mapmanager.md)   |
| `KillMessage` / `InfoMessage`  | [Message.xml](/docs/data/message.md)         |
| Base stats that get multiplied | [Monster.xml](/docs/data/monster/monster.md) |

## Common Issues

* **Override not applied** - `Index` or `MapNumber` mismatch with Monster.xml; `MapNumber=-1` lets it apply everywhere
* **Stats unchanged despite entry** - every multiplier is `-1` (skip). Set at least one to a real value
* **`RewardValue1=0, RewardValue2=0`** - both are set (non-`-1`), so a reward of zero is sent to DataServer. If no reward intended, set both to `-1`
* **Summon chain loops forever** - `SummonMonster` points at a monster that also has a CustomMonster entry summoning the first. Chains respect the 30-minute despawn, but can still overwhelm the map
* **Broadcast message shows `%s` literal** - `KillMessage` ID missing from Message.xml; engine prints the format string unchanged
