Skill Tweaks Configuration

The SkillTweaks plugin applies per-skill overrides on top of the engine defaults. It currently controls two things: how attack speed affects a skill's cast delay (multi-hit balance), and whether a skill can be cast while riding a mount. Skills not listed use engine defaults for every attribute.

File Location#

Data/Plugins/Characters/SkillTweaks.xml

Dependencies#

Depends OnPurpose
Common.datUses global timing values from the Skill Timing / Attack Speed block: MaxAttackSpeed, BaseSkillDelay, SpeedGrowthFactor, MinSkillDelay
Skill.txtReferences skill IDs (Index) from the skill database. Skills with Delay > 0 in Skill.txt use fixed cooldowns and ignore speed scaling.

Configuration Structure#

<SkillTweaks>
    <Skill Index="238" Name="Chaotic Diseier" SpeedScale="0.55" MinDelay="200" />
    <Skill Index="9" Name="Evil Spirit" SpeedScale="1.0" MinDelay="50" />
    <Skill Index="236" Name="Flame Strike" Mounted="allow" />
</SkillTweaks>

Each <Skill> entry overrides the default behavior for one skill. All attributes are optional — set only the ones you want to change.

Attributes#

AttributeTypeDefaultRangeDescription
IndexintRequired0-299Skill ID from Skill.txt. Use the base skill ID — master-tree upgrades inherit it automatically.
NamestringOptional-Skill name for readability (not used by server, documentation only)
SpeedScalefloat1.00.0-3.0How much attack speed affects this skill's delay (see below)
MinDelayint00+Per-skill minimum delay in milliseconds (0 = use global MinSkillDelay)
MaxDelayint00+Per-skill maximum delay cap in milliseconds (0 = no cap)
Mountedstring(unset)allow / denyOverride mounted-cast usability for ALL classes (see below). Unset = engine default rules.

SpeedScale Values Explained#

The SpeedScale attribute controls how much the character's attack speed stat affects the skill's casting delay:

ValueEffectUse Case
0.0Speed has NO effect (fixed delay)Utility skills like Teleport that shouldn't be spammable
0.5Speed has HALF effect (nerfed)Multi-hit skills that become overpowered at high speed
1.0Normal speed scaling (default)Balanced single-hit skills
1.5Speed has 150% effect (buffed)Underpowered skills that need speed scaling boost
2.0Speed has DOUBLE effect (heavily buffed)Skills that should benefit greatly from attack speed investment

Mounted Values Explained#

The Mounted attribute overrides whether a skill is castable while riding a mount (Uniria, Dinorant, Dark Horse, Fenrir, or a rideable custom pet). It wins over the engine's default rules for every class.

ValueEffect
(unset)Engine default rules apply (vanilla parity, see below)
allowSkill is always castable while mounted, for every class — overrides the weapon-skill block and the melee whitelist
denySkill is never castable while mounted, for every class

Engine default rules (used when Mounted is unset):

  • Any class: the plain weapon skills (Defense … Slash) and Power Slash are blocked while mounted.
  • Non-melee-cast classes (Wizard, Elf, Summoner): cast everything else freely while mounted.
  • Melee-cast classes (Dark Knight, Magic Gladiator, Dark Lord, Rage Fighter): only these skills are usable while mounted — Death Stab, Impale, Fire Breath, Fire Slash, Force, Fire Burst, Earthquake, Electric Spark, Fire Blast, Plasma Storm, Fire Scream, Chaotic Diseier.

Timing Formula#

The plugin modifies the skill delay calculation formula used by the server:

Step-by-Step Calculation#

1. If skill has Delay > 0 in Skill.txt -> return that delay (fixed cooldown, no speed scaling)
2. Get character's attack/magic speed (physical skills use PhysiSpeed, magic skills use MagicSpeed)
3. Cap speed: speed = min(speed, MaxAttackSpeed)
4. Apply per-skill scaling: effectiveSpeed = speed * SpeedScale
5. Calculate raw delay: rawDelay = BaseSkillDelay * 1000 / (1000 + effectiveSpeed * SpeedGrowthFactor)
6. Apply max cap: if MaxDelay > 0 then rawDelay = min(rawDelay, MaxDelay)
7. Apply min floor: finalDelay = max(rawDelay, MinDelay or global MinSkillDelay)

Default Global Values#

These live in the Skill Timing / Attack Speed block of Common.dat:

Global SettingDefaultPurpose
MaxAttackSpeed290Maximum effective speed before formula (0 = no cap)
BaseSkillDelay1000 msStarting delay at speed 0
SpeedGrowthFactor23APS gain per speed point (higher = faster scaling)
MinSkillDelay100 msAbsolute minimum delay floor

Formula Example#

Chaotic Diseier with SpeedScale="0.55", MinDelay="200" (using defaults BaseSkillDelay=1000, SpeedGrowthFactor=23, MaxAttackSpeed=290):

Low-speed character (speed = 200):

effectiveSpeed = 200 * 0.55 = 110
rawDelay = 1000 * 1000 / (1000 + 110 * 23) = 1000000 / 3530 = 283 ms
finalDelay = max(283, 200) = 283 ms

High-speed character (speed = 290, capped):

effectiveSpeed = 290 * 0.55 = 159
rawDelay = 1000 * 1000 / (1000 + 159 * 23) = 1000000 / 4657 = 214 ms
finalDelay = max(214, 200) = 214 ms

Compare to normal scaling (SpeedScale="1.0") at speed 290:

effectiveSpeed = 290 * 1.0 = 290
rawDelay = 1000 * 1000 / (1000 + 290 * 23) = 1000000 / 7670 = 130 ms
finalDelay = max(130, 100) = 130 ms

By reducing SpeedScale to 0.55, the skill casts at 214 ms instead of 130 ms at max speed, preventing spam of this powerful multi-hit AoE.

Important Behavior#

Common Use Cases#

Multi-Hit Skills - Nerf Speed Scaling#

Multi-target or multi-hit skills become overpowered when spammed at high attack speed:

<!-- Evil Spirit: 10-target AoE -->
<Skill Index="9" Name="Evil Spirit" SpeedScale="0.5" MinDelay="350" />

<!-- Chaotic Diseier: 2-hit directional AoE -->
<Skill Index="238" Name="Chaotic Diseier" SpeedScale="0.55" MinDelay="200" />

<!-- Chain Lightning: Multi-target chain -->
<Skill Index="215" Name="Chain Lightning" SpeedScale="0.5" MinDelay="400" />

By reducing SpeedScale below 1.0, these skills remain powerful but can't be spammed continuously.

Mounted-Cast Overrides#

Allow a skill the default rules would block, or deny one they would allow:

<!-- Let a normally-blocked skill be cast from the saddle -->
<Skill Index="236" Name="Flame Strike" Mounted="allow" />

<!-- Stop a normally-allowed skill from being cast while mounted -->
<Skill Index="230" Name="Lightning Shock" Mounted="deny" />

<!-- Attributes stack: tune speed AND mounted usability at once -->
<Skill Index="60" Name="Force" SpeedScale="0.2" MinDelay="600" Mounted="deny" />

Utility Skills - Fixed Delay#

Teleport and buff skills should have fixed delays regardless of attack speed:

<!-- Teleport: Should not be spammable -->
<Skill Index="6" Name="Teleport" SpeedScale="0.0" MinDelay="1000" />

<!-- Soul Barrier: Defensive buff -->
<Skill Index="16" Name="Soul Barrier" SpeedScale="0.0" MinDelay="500" />

Setting SpeedScale="0.0" makes attack speed completely ineffective, using only the MinDelay value.

Examples#

<SkillTweaks>
    <!-- Multi-hit skills nerfed to 50-60% speed scaling -->
    <Skill Index="78" Name="Fire Scream" SpeedScale="0.5" MinDelay="350" />
    <Skill Index="237" Name="Gigantic Storm" SpeedScale="0.5" MinDelay="400" />
    <Skill Index="238" Name="Chaotic Diseier" SpeedScale="0.55" MinDelay="200" />
    <Skill Index="215" Name="Chain Lightning" SpeedScale="0.5" MinDelay="400" />
    <Skill Index="230" Name="Lightning Shock" SpeedScale="0.5" MinDelay="350" />
</SkillTweaks>

Common Issues#

Finding Skill IDs#

Skill IDs (Index attribute) come from Skill.txt. Each line represents a skill:

// Format: Index   Name   ...other attributes...
0    Energy Ball
1    Poison
...
238  Chaotic Diseier

Alternatively, check in-game or in the client's skill data.

  • Common.dat: Global attack speed settings (MaxAttackSpeed, BaseSkillDelay, SpeedGrowthFactor, MinSkillDelay)
  • Skill.txt: Base skill definitions, IDs, and fixed delays (Delay column)
  • Game Data Sync: delivers the per-skill speed and mounted-override data to clients at login

Reload Command#

/reload plugins

This command reloads all plugin configurations including SkillTweaks.xml without restarting the server. Mounted-cast changes take effect for each player on their next login.

Last updated August 20, 2026