SkillSpeedScale

Per-skill attack speed scaling configuration for balancing multi-hit and channeled abilities

The SkillSpeedScale plugin allows fine-tuning how attack speed affects individual skills, enabling precise balance control for multi-hit abilities that become overpowered at high attack speeds.

File Location

GameServer/Data/Plugins/SkillSpeedScale.xml

Dependencies

Depends On
Purpose

GameServerInfo - Common.dat

Uses global timing values from [SkillTiming] section: MaxAttackSpeed, BaseSkillDelay, MinSkillDelay, SpeedDelayMultiplierX10

Skill.txt

References skill IDs (Index) from the skill database. Skills with Delay > 0 in Skill.txt use fixed cooldowns and ignore speed scaling.

Configuration Structure

<SkillSpeedScale>
    <Skill Index="238" Name="Chaotic Diseier" SpeedScale="0.55" MinDelay="200" />
    <Skill Index="9" Name="Evil Spirit" SpeedScale="1.0" MinDelay="50" />
</SkillSpeedScale>

Each <Skill> entry overrides the default speed scaling behavior for a specific skill.

Attributes

Attribute
Type
Default
Range
Description

Index

int

Required

0-299

Skill ID from Skill.txt

Name

string

Optional

-

Skill name for readability (not used by server, documentation only)

SpeedScale

float

1.0

0.0-3.0

How much attack speed affects this skill's delay (see below)

MinDelay

int

0

0+

Per-skill minimum delay in milliseconds (0 = use global MinSkillDelay)

MaxDelay

int

0

0+

Per-skill maximum delay cap in milliseconds (0 = no cap)

SpeedScale Values Explained

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

Value
Effect
Use Case

0.0

Speed has NO effect (fixed delay)

Utility skills like Teleport that shouldn't be spammable

0.5

Speed has HALF effect (nerfed)

Multi-hit skills that become overpowered at high speed

1.0

Normal speed scaling (default)

Balanced single-hit skills

1.5

Speed has 150% effect (buffed)

Underpowered skills that need speed scaling boost

2.0

Speed has DOUBLE effect (heavily buffed)

Skills that should benefit greatly from attack speed investment

circle-info

Skills NOT listed in this config file default to SpeedScale="1.0" (normal speed scaling).

Timing Formula

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

Step-by-Step Calculation

Default Global Values

These are configured in GameServerInfo - Common.dat under the [SkillTiming] section:

Global Setting
Hardcoded Default
Purpose

MaxAttackSpeed

270

Maximum effective speed before formula (0 = no cap)

BaseSkillDelay

1500 ms

Starting delay before speed reduction

SpeedDelayMultiplierX10

50 (= 5.0)

Delay reduction per speed point (stored as x10 for precision)

MinSkillDelay

50 ms

Absolute minimum delay floor

circle-info

The actual values in your server's config file may differ. These are the hardcoded defaults used when the config file doesn't specify values.

Formula Example

Chaotic Diseier with SpeedScale="0.55", MinDelay="200":

Low-speed character (speed = 200):

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

Compare to normal scaling (SpeedScale="1.0"):

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

Important Behavior

circle-info

Skills with Fixed Delay: If a skill has a non-zero Delay value in Skill.txt, that delay is used as a fixed cooldown and attack speed scaling is completely ignored. Only skills with Delay=0 in Skill.txt are affected by the speed scaling formula and this plugin.

circle-info

Per-Skill Overrides: The MinDelay attribute in this config overrides the global MinSkillDelay from GameServerInfo - Common.dat for the specified skill only.

circle-info

Clamping: Invalid SpeedScale values are automatically clamped:

  • Values below 0.0 → clamped to 0.0

  • Values above 3.0 → clamped to 3.0

circle-info

Physical vs Magic Skills: Physical skills (melee attacks, bow skills) use PhysiSpeed for timing calculations, while magic skills use MagicSpeed. This means the same character may have different casting speeds for different skill types based on their equipment and stats.

circle-info

Reload Support: Configuration can be reloaded at runtime using the /reload plugins GM command without restarting the server.

circle-exclamation

Common Use Cases

Multi-Hit Skills - Nerf Speed Scaling

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

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

Channeled Skills - Heavy Nerf

Skills with continuous or hold effects should be heavily rate-limited:

A very low SpeedScale (0.2) combined with high MinDelay (600ms) ensures this utility skill cannot be spammed.

Utility Skills - Fixed Delay

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

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

Single-Hit Burst Skills - Buff Speed Scaling

Underpowered single-hit skills can benefit MORE from attack speed:

A SpeedScale above 1.0 makes attack speed investment more rewarding for this skill.

Examples

Common Issues

triangle-exclamation
circle-exclamation
circle-exclamation
circle-info

Testing Changes: Use characters with different attack speed values to verify the scaling behaves as expected:

  • Low speed (~100): Tests base delay

  • Medium speed (~200): Tests scaling curve

  • High speed (~270): Tests minimum delay floor

Finding Skill IDs

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

Alternatively, check in-game or in the client's Skill.txt data file.

  • GameServerInfo - Common.dat ([SkillTiming] section): Global attack speed settings (MaxAttackSpeed, BaseSkillDelay, MinSkillDelay, SpeedDelayMultiplierX10)

  • Skill.txt: Base skill definitions, IDs, and fixed delays (Delay column)

  • SkillManager.cpp: Server-side skill validation and timing enforcement (implements the speed scaling formula)

Reload Command

This command reloads all plugin configurations including SkillSpeedScale.xml without restarting the server.

Last updated