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

# CustomCombo

Defines which skills count as valid combo starters (primary) and follow-ups (secondary) for the cross-class combo system. When `EnableComboToAllSwitch = 1` in Common.dat, every class can combo with these skill IDs regardless of the class's default combo support.

## File Location

```
Data/Plugins/Characters/CustomCombo.xml
```

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

## Schema

```xml
<CustomCombo>
    <PrimarySkills>
        <Skill Id="..."/>
    </PrimarySkills>
    <SecondarySkills>
        <Skill Id="..."/>
    </SecondarySkills>
</CustomCombo>
```

## Attributes

| Attribute | Type | Effect                                                                              |
| --------- | ---- | ----------------------------------------------------------------------------------- |
| `Id`      | int  | Skill index from [Skill.txt](/docs/data/skill.md). Must reference an existing skill |

## Lists

* **`<PrimarySkills>`** - the first hit in a combo chain must use a skill from this list
* **`<SecondarySkills>`** - the second and third hits must come from this list

A successful combo is Primary, then Secondary, then a different Secondary. Each follow-up hit must land within 3 seconds of the previous one or the chain resets. The third hit skill must differ from the second hit skill.

## Relationship to Common.dat

Common.dat `EnableComboToAllSwitch` selects which source feeds the combo checker:

* `EnableComboToAllSwitch = 1` - the lists in this file are used for every class that can combo
* `EnableComboToAllSwitch = 0` - this file is ignored and the hardcoded Dark Knight skill set is used instead (Falling Slash / Lunge / Uppercut / Cyclone / Slash as primary; Twisting Slash / Rageful Blow / Death Stab / Strike of Destruction / Blood Storm as secondary)

`ComboEnablePushEffect` in Common.dat controls whether combos push back monsters on hit.

## Cross-File Dependencies

| Attribute     | Related in                                                                                                                                         |
| ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Id`          | [Skill.txt](/docs/data/skill.md)                                                                                                                   |
| Master toggle | [Common.dat](/docs/gameserver/common-dat.md#combo-system) `EnableComboToAllSwitch`                                                                 |
| Anti-cheat    | Combo cast timing is enforced by the always-on skill timing validator (`[SkillTiming]` log lines); the legacy `CheckAutoComboHack` key was removed |

## Common Issues

* **Combos not working despite entries here** - `EnableComboToAllSwitch = 0` in Common.dat, so the plugin's lists are bypassed in favour of the hardcoded DK set
* **Third hit does not register** - the third skill is the same as the second, or the gap between hits exceeded 3 seconds
* **Combo fires without push** - `ComboEnablePushEffect = 0` in Common.dat
* **Some classes don't get combos even with the master switch on** - the skill IDs listed here aren't available to that class at the character's current level; check [Skill.txt](/docs/data/skill.md) for per-class availability
* **Negative or non-integer `Id`** - entries with `Id` below zero are skipped silently on load
