CustomCombo.xml
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.
Also sets how much damage the combo finisher does for each class (<ClassScaling>).
File Location#
Data/Plugins/Characters/CustomCombo.xml
Loaded once at GameServer startup. Supports hot reload via plugin admin command.
Schema#
<CustomCombo Debug="0">
<PrimarySkills>
<Skill Id="..."/>
</PrimarySkills>
<SecondarySkills>
<Skill Id="..."/>
</SecondarySkills>
<ClassScaling>
<Class Id="..." Str="..." Agi="..." Vit="..." Ene="..." Cmd="..." Divisor="..." DamageMul="..."/>
</ClassScaling>
</CustomCombo>
Attributes#
| Attribute | Type | Effect |
|---|---|---|
Debug (on <CustomCombo>) | int | 1 = write [ComboDebug] lines to the GameServer log for every combo step, hit and finisher. Default 0 |
Id | int | Skill index from Skill.txt. 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.
Class Rules#
Sets how each class builds a combo. A class with no <Class> row uses Mode 0.
<ClassRules>
<Class Id="2" Mode="1"/>
</ClassRules>
| Mode | Combo chain |
|---|---|
0 | Primary, then Secondary, then a different Secondary (the skill lists above) |
1 | Weapon skill, then any different attack skill. The skill lists are ignored for this class |
- Weapon skill = a skill granted by an equipped item's Skill option (bow/crossbow → Triple Shot, sword → its sword skill). A learned copy of the skill does not count without the weapon
- Attack skill = Skill.txt damage above 0. Buffs and heals break the chain
- The 2nd hit must land within 3 seconds
EnableComboToAllSwitchin Common.dat still has to be on (or the class quest done)- The client skill tooltip still shows the list-based combo type
Class Scaling#
Controls the damage of the combo finisher hit, per class. Works with EnableComboToAllSwitch on or off.
Final = damage * DamageMul / 100 + (Str*STR + Agi*AGI + Vit*VIT + Ene*ENE + Cmd*CMD) / 100 / Divisor
damage is the finisher hit after the class's normal skill damage, crit/excellent, double and triple damage. Stats include item and buff bonuses. The master skill "Add Combo Damage" % is added after this.
| Attribute | Type | Default | Effect |
|---|---|---|---|
Id | int | - | Class: 0=DW 1=DK 2=ELF 3=MG 4=DL 5=SUM 6=RF. Out of range = skipped with a log warning |
Str / Agi / Vit / Ene / Cmd | int | 0 | % weight of each stat in the flat bonus. 100 = full stat |
Divisor | int | 1 | Flat bonus is divided by this. 0 or less = 1 |
DamageMul | int | 200 | % of the hit damage kept. 200 = x2 (vanilla), 150 = x1.5. Below 0 = 0 |
A class with no <Class> row uses the old formula: damage x2 + (STR+AGI+ENE) / ComboDamageConstA * ComboDamageConstB from Character.dat.
Shipped defaults use each class's main stat:
| Class | Weights |
|---|---|
| DW, Summoner | ENE 100 |
| DK | STR 100 |
| Elf | AGI 100 |
| MG | STR 50, ENE 50 |
| DL | STR 50, CMD 50 |
| RF | STR 50, VIT 50 |
Relationship to Common.dat#
Common.dat EnableComboToAllSwitch decides who can combo and which skill lists are used:
EnableComboToAllSwitch = 1- every character can combo, and the<PrimarySkills>/<SecondarySkills>lists in this file are usedEnableComboToAllSwitch = 0- only characters who finished class quest 3 can combo, and the two lists in this file are ignored. 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)
<ClassRules> and <ClassScaling> work in both cases. A class set to Mode 1 still uses the weapon-skill chain, and the finisher damage still uses this file's scaling.
ComboEnablePushEffect in Common.dat controls whether combos push back monsters on hit.
Cross-File Dependencies#
| Attribute | Related in |
|---|---|
Id | Skill.txt |
| Master toggle | Common.dat 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 = 0in Common.dat, so the skill lists are bypassed in favour of the hardcoded DK set (and only characters past class quest 3 can combo) - GameServer log flooded with
[ComboDebug]lines -Debug="1"on the root node. Set it to0 - 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 = 0in 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 for per-class availability
- Negative or non-integer
Id- entries withIdbelow zero are skipped silently on load