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#

AttributeTypeEffect
Debug (on <CustomCombo>)int1 = write [ComboDebug] lines to the GameServer log for every combo step, hit and finisher. Default 0
IdintSkill 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>
ModeCombo chain
0Primary, then Secondary, then a different Secondary (the skill lists above)
1Weapon 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
  • EnableComboToAllSwitch in 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.

AttributeTypeDefaultEffect
Idint-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 / Cmdint0% weight of each stat in the flat bonus. 100 = full stat
Divisorint1Flat bonus is divided by this. 0 or less = 1
DamageMulint200% 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:

ClassWeights
DW, SummonerENE 100
DKSTR 100
ElfAGI 100
MGSTR 50, ENE 50
DLSTR 50, CMD 50
RFSTR 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 used
  • EnableComboToAllSwitch = 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#

AttributeRelated in
IdSkill.txt
Master toggleCommon.dat EnableComboToAllSwitch
Anti-cheatCombo 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 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 to 0
  • 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 for per-class availability
  • Negative or non-integer Id - entries with Id below zero are skipped silently on load

Last updated October 1, 2026