aslain.dev
0%
01 Hizmetler 02 Hakkımda 03 Projeler 04 Stack 05 Blog 06 İletişim
← Tüm makaleler Metin2

Metin2 Skill Editing: Damage and Duration Tuning

Metin2 skill editing is one of the tasks that most directly defines how a server feels in terms of balance: how much damage an ability deals, how many seconds its effect lasts, and how long you wait before using it again. None of this lives in a magic editor — it is governed by polynomial (formula) expressions stored in the server-side skill_proto table and the client-side skill_table data. In this guide I'll walk through both structures, the variables inside them, and how to tune damage and duration without breaking the curve.

The difference between skill_proto and skill_table

Confusing the two sources is the most common mistake, so let's separate their roles first:

  • skill_proto: a MySQL table in the player database. It holds the ability's actual behavior — damage formula, duration, SP cost, cooldown, prerequisite skill, maximum level. The calculation happens server-side based on this table.
  • skill_table (client): the ability definition file inside the client. It carries visual/behavioral metadata such as icon, name, animation and targeting type. It does not determine damage; it only tells the player what to display.

The rule is simple: balance (damage, duration, cooldown) lives in skill_proto; appearance lives in skill_table. If the two are inconsistent, the client shows one thing while the server calculates another, and players complain that "the damage is wrong."

Getting to know the skill_proto columns

The table is wide, but you keep touching the same handful of columns when tuning. The most critical ones:

  • dwVnum — the ability's unique number (e.g. Three-Way Cut, Spirit Arrow, etc.).
  • bMaxLevel and bLevelStep — how many steps the skill takes and the ceiling it reaches.
  • szPointOn + szPointPoly — what the effect applies to (e.g. HP) and the main damage/effect formula.
  • szSPCostPoly — the mana cost per use.
  • szDurationPoly — for timed effects (poison, stun, buff), the duration in seconds.
  • szCooldownPoly — the cooldown in seconds.
  • szMasterBonusPolyPoint — the bonus added at Master / Grand Master ranks.

Most abilities also have szPointOn2/szPointPoly2 and szPointOn3/szPointPoly3 columns for a second and third effect — for example an attack that applies both damage and a slow.

Polynomial variables: what makes the formulas scale?

The values in these columns are not plain numbers but short math expressions the server resolves at runtime. Changing a value without knowing the variables defined inside is flying blind. The most used ones:

  • k — the skill's level coefficient; a ratio that grows as the skill levels up. The main multiplier that lets damage scale with rank.
  • lv — the level of the character casting the spell.
  • iq, str, dex, con — the character's core stats; which stat dominates per class is decided here.
  • atk — the attack value (weapon + bonuses).

A sample damage formula looks like this:

szPointPoly = 1.5 * k + 2.0 * atk + 0.5 * str

Here, raising k strengthens the ability as it levels up; raising the atk multiplier increases gear-dependent burst; and the str multiplier rewards stat distribution. If you want to roughly halve a value, halve the multiplier — don't add a fixed cap, since caps break the game at high level.

Balancing damage, duration and cooldown

In practice the three axes interact. Instead of raising damage alone, think of the trio together:

  • Damage (szPointPoly): on PvP-focused servers even small multiplier changes make a big difference. Nudge the k multiplier by 10% and test; don't simply double it.
  • Duration (szDurationPoly): for control effects like stun/sleep, extending duration is stronger than damage. In PvP a 3-second stun heavily outweighs 20% more damage.
  • Cooldown (szCooldownPoly): if an ability is too strong, lengthening the cooldown is often a cleaner fix than cutting damage; it preserves the burst while preventing spam.

A sample formula for a timed effect:

szDurationPoly = 2.0 + 1.0 * k     -- seconds
szCooldownPoly = 16.0 - 4.0 * k    -- shorter wait at higher rank

Using an expression that decreases with level on cooldown (a negative coefficient) makes the ability feel smoother at high rank; just make sure the value never drops below zero.

Applying and testing changes safely

skill_proto is loaded into memory by the game core at server startup. So even if you edit the table live, the change won't take effect immediately. A safe workflow:

  • Always back up first: mysqldump player skill_proto > skill_proto_backup.sql
  • Make the change with an UPDATE, making clear which ability you're touching:
UPDATE skill_proto
SET szPointPoly = '1.3 * k + 2.0 * atk + 0.5 * str'
WHERE dwVnum = 1;
  • Restart the core (or use your server's skill reload mechanism) so the new values are loaded into memory.
  • On a test character, measure damage and duration at every rank (1, M1, P, G); working at one rank does not mean the whole curve is balanced.

If an icon or name changed on the client side, remember to update skill_table too and repack the client; otherwise players see the old info. Trying a single ability change on a closed test server before going live avoids the "everyone cried after the balance patch" scenario.

Common mistakes

  • Replacing the formula with a flat number: write 500 and the ability hits the same at every rank; the level curve disappears.
  • Misspelling a variable name: an undefined variable zeroes out the formula; the ability deals "0 damage".
  • Forgetting skill_proto and only editing the client: the visual changes, the damage doesn't.
  • Working without a backup: a single wrong UPDATE can render an entire class unusable.

Frequently Asked Questions

Do I have to restart the server for a damage change?

Usually yes. Because skill_proto is loaded into memory at startup, UPDATEs won't show in-game without restarting the core (or using a skill reload command, if your build has one).

What exactly does the k variable represent?

k is a coefficient tied to the ability's current level; it grows as the skill levels up and lets damage/duration scale with rank. Tune stats for fixed power, and the k multiplier for power that grows with level.

I want to weaken an ability in PvP — what should I change?

First try lengthening the cooldown (szCooldownPoly); this preserves burst while cutting spam. If that isn't enough, lower the k multiplier in small steps and measure after each change.

Skill balance can both make and break your server. If you want a setup that edits skill_proto formulas safely, tests PvP balance and tracks changes across versions, get in touch with me — let's build a clean balance plan tailored to your server.

Bu kategorideki tüm yazılar →

Devamı için