Custom Skills
Custom Skills adds new player skills without code. One <Skill> row holds everything: the Skill.txt-style numbers, what the server does on cast (single target, area, cone, line, buff, heal), the item that teaches it, and the client look (cast animation, sounds, icon, tooltip text and visual layers).
The server adds each skill to its skill table, like a Skill.txt row, and sends the rest to the client at login (and to everyone online after /reload plugins) through Game Data Sync. No client or server rebuild: visuals are built from layers and a catalog of vanilla effects, and you can add your own textures, sounds and models as plain files in the client Data folder. The icon is client art too; a missing icon shows as a coloured tile with the skill's initials.
File Location#
Data/Plugins/Characters/CustomSkills.xml
Missing file = no custom skills. The file is read after Skill.txt at GameServer start.
Dependencies#
| Depends On | Purpose |
|---|---|
| Skill.txt | Skill ids used there cannot be reused. ReqWeapon / ReqAmmo use the same bitmask |
| Item.xml | The learn item must exist (Slot="-1", class columns) |
| CustomItemVisual.xml | Model for a new learn item |
| CustomCombo.xml | Attack skills must be listed under <SecondarySkills> to combo |
| SkillTweaks.xml | A Mounted override there wins over the one here |
| Effect.xml | Numeric effect ids for <OnHit> and <Buff> |
| Game Data Sync | Ships the skill table to the client (type 38) |
Reloading#
/reload plugins(or GameServer menu Reload → Plugins, or Server Manager) re-reads the file. Players already online receive the new skill table within a few seconds (20 players per second) - no relog. New sounds, textures and models load on their client right then./reload skillre-reads Skill.txt and this file and also pushes the new table to online players.- A
<Skill>removed from the file is removed from the server skill table on reload. Removing every skill (orEnabled="0") sends an empty table, so clients drop the old visuals.
Testing a Skill (GM)#
| Command | Effect |
|---|---|
/cskill list | Lists the loaded custom skills (id + name) |
/cskill learn <id> | Adds the skill to your skill list - no learn item needed. Class / evolution rules still apply |
/cskill forget <id> | Removes it again |
Needs a GameMaster.xml entry (level 1 or higher). Typical loop: edit the XML, /reload plugins, cast the skill, repeat.
Errors#
- Server: every problem in the XML is logged with the skill id, the layer number (counted from the top of
<Fx>, starting at 1) and what is wrong, for exampleError: skill 282 layer 4 Texture="..\x.jpg": path may not contain ".." - ignored.Errors show in red in the GameServer window and the Server Manager log. - Client: effect names, texture / sound / model names and files are checked by the client when the table arrives. A missing file or an unknown name is skipped (never a crash), logged to the debug console, and the count + first problem show once in the chat:
2 custom skill problem(s) - first: [CustomSkill] skill 281: Texture file 'Data\Effect\X\glow.OZJ' not found. Players with an outdated client see the same line.
Structure#
<CustomSkills Enabled="1">
<Skill Id="273" Name="Meteor Storm" Damage="110" Mana="105" AG="20" Range="6" DarkWizard="2" ...>
<Learn Item="15,39"/>
<Behaviour Type="AreaSelf" Radius="4" MaxTargets="10" Hits="3" HitDelay="440" HitInterval="220"/>
<OnHit Effect="stun" Duration="2" Chance="30"/>
<Cast Anim="gigantic_storm"/>
<Fx>
<Glow At="hand" Start="0" Length="400" Size="60" Size2="160" Color="255,120,40"/>
<Sound Name="meteorite" Start="0"/>
</Fx>
</Skill>
</CustomSkills>
CustomSkills#
| Attribute | Type | Default | Effect |
|---|---|---|---|
Enabled | 0/1 | 1 | 0 = no custom skills are loaded |
Max 64 skills. Extra rows are ignored with a log line.
Skill#
| Attribute | Type | Default | Effect |
|---|---|---|---|
Id | 80-299 | - | Skill id. Must not exist in Skill.txt. Free in a stock Skill.txt: 80-199 and 271-299. 300+ is the master skill range and is refused |
Name | string (31 chars) | Custom Skill | Skill name |
Damage | int | 0 | Base skill damage, like the Skill.txt Damage column (max = 1.5x) |
DamagePerEnergy | int | 0 | +1 skill damage per N energy. 0 = off |
DamagePerStrength | int | 0 | +1 skill damage per N strength. 0 = off |
DamagePerDexterity | int | 0 | +1 skill damage per N agility. 0 = off |
Mana | int | 0 | Mana per cast |
AG | int | 0 | AG per cast |
Range | int | 6 | Cast range in tiles. Targeted skills walk into range first |
Delay | ms | 0 | Fixed cooldown. 0 = attack / magic speed decides |
Element | name | none | ice / poison / lightning / fire / earth / wind / water |
ReqLevel | int | 0 | Level needed to learn and cast. Character level stops at 400: "level 470" = ReqLevel="400" + ReqMasterLevel="70" |
ReqStrength / ReqDexterity / ReqEnergy / ReqLeadership | int | 0 | Stats needed to learn and cast |
ReqMasterLevel | int | 0 | Master level needed to learn (learn time only) |
ReqSkill | skill id | none | Skill that must already be known to learn this one (learn time only) |
ReqWeapon | bitmask | 0 | Equipment needed to cast. Same bits as Skill.txt. 0 = none |
ReqAmmo | 0/1 | 0 | 1 = arrows / bolts with durability needed |
DarkWizard, DarkKnight, FairyElf, MagicGladiator, DarkLord, Summoner, RageFighter | 0-3 | 0 | 0 = cannot learn, 1 = any evolution, 2 = second class and up, 3 = third class. At least one class must be set |
Physical | 0/1 | 0 | 1 = attack speed sets the cast rate and the skill always deals weapon damage. 0 = magic speed |
MeleeMultiplier | 0/1 | 0 | 1 = the class skill multiplier applies: DK rate for Dark Knights, DL rate for Dark Lords (like Fire Burst), RF rate for Rage Fighters (like Phoenix Shot), 200% for others |
Mounted | allow / deny / default | allow | Cast while riding. default = vanilla mounted rules |
AutoRepeat | 0/1 | 1 | 1 = auto-attack keeps casting it. Buff and Heal skills never repeat |
Icon | string (31 chars) | - | Sprite in the client atlas Data/Interface/UI/atlas/customskill.xml, without the customskill/ prefix. New icons with Tools\AtlasPacker (see Tools): -unpack <client>\Data\Interface\UI\atlas\customskill.xml MyIcons, add your PNGs, then MyIcons customskill customskill -out <client>\Data\Interface\UI\atlas |
Desc | string (199 chars) | - | Tooltip text, wrapped over several lines |
Damage type follows the class: Dark Wizard, Magic Gladiator and Summoner deal magic damage, everyone else physical. Physical="1" always deals weapon damage (a Magic Gladiator casting a Physical="1" skill hits like a knight).
Learn#
<Learn Item="15,39"/>
| Attribute | Type | Effect |
|---|---|---|
Item | group,index | Item that teaches the skill (right-click). Missing or bad = no learn item, logged |
Learning checks, in order: the item's class columns in Item.xml, the skill's Req* stats and level, ReqMasterLevel, ReqSkill, then the skill's class columns. Each refusal tells the player why. The item's own Require* values in Item.xml are display-only.
Do not reuse an item that already teaches a vanilla skill: the vanilla skill wins.
Behaviour#
What the server does on cast.
| Type | Hits | Size attributes |
|---|---|---|
Single (default) | The target only | - |
AreaTarget | Circle around the target | Radius |
AreaGround | Circle around the aimed ground tile. With a monster under the cursor, centred on that monster | Radius |
AreaSelf | Circle around the caster | Radius |
Cone | Wedge in front of the caster, narrow at the caster | Length, Width (far end) |
Line | Straight band in front of the caster | Length, Width |
Buff | Effect on the caster (and party, see <Buff>) | Radius = party range |
Heal | The party member under the cursor (else the caster), then the nearest other members within Radius of them | Radius |
| Attribute | Type | Range | Default | Effect |
|---|---|---|---|---|
Type | name | - | Single | See above. Unknown type = skill skipped |
Radius | tiles | 0-255 | 0 | A radius of R reaches tile R |
Length | tiles | 0-255 | 4 | Cone / Line length |
Width | tiles | 0-255 | 3 | Cone far edge / Line width |
MaxTargets | int | 1-20 | 8 (Heal: 3) | Enemies hit. Heal: members healed, max 5 |
Hits | int | 1-10 | 1 | Hits per target |
HitDelay | ms | 0-3000 | 0 | Delay before the first hit. Match it to the visual impact. Heal: before the first heal |
HitInterval | ms | 50+ | 150 | Time between hits. Heal: between one member and the next |
ExtraHitChance | % | 0-100 | 0 | Chance per hit to land one more hit 80 ms later |
OnHit#
Optional status effect on hit. Any behaviour.
| Attribute | Type | Default | Effect |
|---|---|---|---|
Effect | name or id | none | stun / freeze (or ice) / poison / sleep / blind, or an Effect.xml id |
Duration | seconds | 2 | Effect time |
Chance | % | 100 | Rolled per hit |
Value1 / Value2 | int | 0 | Effect values. Ignored for poison (vanilla poison ticks) |
Normal immunity and element resistance still apply.
Buff#
Only read for Type="Buff". Required: a Buff skill with no valid Effect is skipped.
| Attribute | Type | Default | Effect |
|---|---|---|---|
Effect | name or id | - | damage / defense / life / critical (the Greater Damage / Defense / Life / Critical Damage buffs), or an Effect.xml id |
Duration | seconds | 60 | Buff time |
Value1 / Value2 | int | 0 | Buff values |
Party | 0/1 | 0 | 1 = also party members on the same map within Radius tiles (6 when Radius is 0) |
Heal#
Only read for Type="Heal". Vanilla Party Heal rules.
| Attribute | Type | Default | Effect |
|---|---|---|---|
Base | int | 5 | Flat life healed |
EnergyDiv | int | 5 | Adds Energy / EnergyDiv. 0 = Base only |
Falloff | % | 20 | Each next member gets this much less of the first heal (20 = 100%, 80%, 60%) |
No party = the caster only. A party member must be in cast range. In Chaos Castle and the Silent map (40) only the caster can be healed.
Cast#
<Cast Anim="gigantic_storm"/>
Anim = caster animation (23 chars). Default: attack when Physical="1", else magic.
Animation names
magic (random hand cast), attack (weapon swing), magic1, magic2, weapon1, weapon2, elf, teleport, flash, inferno, hellfire, lightning_orb, chain_lightning, drain_life, summon, sleep, gigantic_storm, flame_strike, lightning_shock, sword1..sword5, wheel, fury_strike, death_stab, spear, power_slash, rush, strike, death_cannon, blow_of_destruction, hell_begin, hell_start, one_flash, darkhorse, dl_teleport, removal, vitality, swell_of_mp, recover, fist, bow, crossbow, thrust, stamp, giantswing, darkside_ready, darkside_attack, dragonkick, dragonlore, phoenix_shot, att_up_ourforces, hp_up_ourforces.
A vanilla skill name also works and uses that skill's clip: decay, ice_storm, meteorite, evil_spirit, fire_ball, aqua_beam, hell_fire, twisting_slash, rageful_blow, impale, fire_scream, fire_burst, chaotic_diseier, electric_spark, earthquake, strike_of_destruction, mana_rays, swell_life, killing_blow, beast_uppercut, chain_drive, dragon_slasher, dragon_roar.
Riding: spells with a seated version switch to it. Most clips speed up with attack / magic speed. Fixed speed: blow_of_destruction, recover, swell_of_mp, vitality, hell_start, dl_teleport, darkhorse, att_up_ourforces, hp_up_ourforces, removal.
Fx#
Up to 16 timed visual layers per skill (extra layers ignored with a log line). Each child element is one layer; the element name is the layer kind. Visuals only: they never deal damage.
| Layer | Draws | Main attributes |
|---|---|---|
<Ring> | Ground circle | radius Size → Size2, band Width |
<Beam> | Ribbon At → To (To="targets" = one per enemy) | width Size |
<Arc> | Blade sweep in front of the caster | radius Size, angle Size2 (degrees), band Width, Height |
<Burst> | Spark burst | Count sparks |
<Flash> | Explosion flash | scale Size (100 = normal) |
<Bolt> | Lightning At → To (To must be target / targets) | - |
<Pillar> | Light column | width Size, height Size2 |
<Glow> | Glow sprite | size Size → Size2, Texture |
<Missile> | Orb flying At → To over Length | see Missile below |
<Shake> | Screen shake near the caster | strength Size (100 = quake) |
<Sound> | Sound | Name (see Sound names) or File (your own .wav) |
<Model> | A vanilla effect from the catalog | Name (see Effect catalog) |
Unknown layer names are skipped with a log line.
Common attributes
| Attribute | Default | Effect |
|---|---|---|
At | caster | Anchor: caster, caster_feet, hand, target, target_feet, point, targets |
To | target | End anchor (Beam / Bolt / Missile / Model) |
Start | 0 | ms after the cast |
Length | 400 | ms the layer lasts |
Size / Size2 | 100 / = Size | World units, 100 = 1 tile |
Width | 30 | Band width / side weave |
Height | 0 | Raise off the anchor / missile arc |
Count | 12 | Sparks / rocks |
Color / Core | 255,255,255 | r,g,b. Core = hot centre / edge colour |
Texture | light | A preset: light, flare, shiny, spark, magic, lightmarks, spirit, energy, thunder, flame, splash, mist - or your own file, e.g. Effect\MySpell\glow.jpg (see Your own files) |
Repeat | 1 | Copies of the layer, 1-16 |
Interval | 0 | ms between copies |
Spread | 0 | Each copy moves to a random spot within this distance of its anchor (not caster / hand) |
Orbit | 0 | Copies sit evenly on a ring this wide around the anchor, turned at random each cast (all layers of a cast turn together). Missile and <Model Name="arrow"> use Orbit their own way |
Seed | 0 | Layers with the same Seed (above 0) use the same random spots copy by copy. Give a meteor, its flash and its ring the same Seed / Repeat / Interval / Spread |
Rise | 0 | Start height above At (missile / model) |
FadeIn | 0 | 1 = fade in instead of starting at full strength |
Reverse | 0 | 1 = arc sweeps the other way / ring shrinks |
Ground | 0 | 1 = lay a glow / flash flat on the ground |
Release | 0 | 1 = skipped if the caster casts the same skill again before it starts (vanilla "on release" sound) |
Once | 0 | 1 = (Sound) not restarted while the caster's previous copy still plays |
Anchors: point is a fixed spot taken at cast time - the aimed tile (AreaGround), the target tile (targeted skills) or the caster tile (others). targets = every enemy inside the hit area (one copy each); for Heal it is the healed members.
Missile
| Attribute | Default | Effect |
|---|---|---|
Size | 100 | Orb size. 0 = no glow head |
Size2 | = Size | Trail width |
Trail | 0 | Trail samples (0 = none) |
Slant | 0 | 1 = comes in at an angle from behind the caster |
Dark | 0 | 1 = dark (subtractive) trail |
Stream | none | spirit / skull = vanilla Evil Spirit (or skull) stamped at the head, weapon = the caster's own weapon flies it, model = your own model (set by Model) |
Model | - | Your own model file flies the missile, e.g. Effect\MySpell\orb.bmd. Size is then the model scale % (100 = as modelled) and there is no glow head |
Pose | spin | Weapon / model stream: spin, stab (hilt first), stab_flip (tip first, the right one for weapons) |
Orbit | 0 | Copies start evenly on a ring this wide around At |
Hold | 0 | ms the missile hovers at its start before flying |
Stay | 0 | ms it stays where it landed, fading |
Homing | 0 | 1 = vanilla Fire Burst flight: copies fan out over Width degrees, turn toward To, stop on arrival (Length = max flight time) |
Straight flight: leave Width and Height at 0. Repeat = number of missiles.
Effect catalog (<Model Name="...">)
Each name is a real vanilla effect, tested in game and wrapped so it never deals damage on its own (the server deals the skill's damage). Unknown names are skipped and reported (see Errors). New effects are added to the catalog with client releases.
Color recolours most of them: the effect and everything it spawns are multiplied by the colour (255,255,255 = vanilla). Multiplying works best on white / pale effects - turning orange fire blue gives a dark result; use a pale or grey texture for strong recolours.
| Name | Effect |
|---|---|
meteor | Burning rock dropped from Rise onto At, bursts into rocks |
meteorite | Vanilla Meteorite drop |
hellfire | Vanilla Hell Fire ground circle |
debris | Count rocks thrown up (max 12) |
evil_spirit / skull_spirit | Vanilla Evil Spirit joints that wander to the To enemies. Count per copy (max 8) |
death_stab | The full vanilla Death Stab in Color. Use Length="520" |
heal | Vanilla Heal streaks on each At character |
arrow | The caster's real bow / crossbow arrow shot at To. Repeat = arrows, Width = fan in degrees, Orbit = start ring |
ghost | One Evil Spirit ghost per copy flying At → To along the ground. Width = side swing, Height = above ground, Size = ribbon width, Dark="1" = vanilla shadow look |
flame | The vanilla Flame column: particles rising out of the ground at At for Length ms. Count = particles per tick (vanilla 6, max 12), Width = column radius, Size = particle size %, Texture = sprite (default vanilla fire; splash / mist = water), Color = tint |
phoenix | The whole vanilla Rage Fighter Phoenix Shot (swing blur, spinning projectile, trail, sparks, impact light) from the caster at the To character. Needs a target. Color tints all of it; 255,255,255 = vanilla. Size = projectile size % |
phoenix_orb | The Phoenix Shot projectile alone, from the caster at each To character. Count = projectiles per character (max 5), Width = how far apart they start beside the caster (they converge on the target), Size = size %, Color = tint. Start="280" launches them with the main Phoenix shot |
ice_storm | Vanilla Ice Storm: ice shards fall onto At and burst. Count = shards (vanilla 10, max 20). Silent: add the ice sounds as <Sound> layers (first burst about 700 ms) |
inferno | Vanilla Inferno fire ring (220 radius) around At (caster_feet = vanilla) |
twister | Vanilla Twister tornado walking from At toward To (about 590 units in 2.4 s) |
aqua_beam | Vanilla Aqua Beam from the caster's hand toward To |
nova | Vanilla Nova burst of spirits around At. Count = charge 0-12 (12 = full). Stays where it was cast |
decay | Vanilla Decay: poison meteors fall onto At and leave a poison cloud. Count = meteors (vanilla 2, max 6). Plays its own landing sound - add only the cast sound |
chain_lightning | Vanilla Chain Lightning hopping through To (targets = the target first, then the nearest next). Count = max links (vanilla 3). Needs a target |
lightning_shock | Vanilla Lightning Shock ball dropping onto At (targets = one per enemy hit). Needs the caster on screen |
drain_life | Vanilla Drain Life ghosts from the To character back to the caster (about 2.9 s). Needs a target; one drain per caster at a time |
sahamutt | Vanilla Sahamutt: casting circle at At, the tiger pounces on To and explodes. Count 1-3 = size tier (else the caster's book level), Size = tiger scale %, Width="0" = no casting circle. Plays its own explosion sound |
fire_burst | Vanilla Fire Burst: 3 homing fire missiles from the caster at each To character. Plays its own explosion sound. Needs a target |
fire_scream | Vanilla Fire Scream flame waves from At along the caster's facing (the flames; the dark ground mesh is left out) |
earthquake | Vanilla Dark Horse Earthquake: shock waves, stone rings and the final crater at At (crater at 1440 ms). Size = ring radius %. Add <Shake Start="1080" Length="360" Size="700"/> for the vanilla quake. Not on a Dark Horse rider with the darkhorse animation (it would play twice) |
chaotic_diseier | Vanilla Chaotic Diseier: dark ghosts streaming into the caster + body sparks |
flame_strike | Vanilla Flame Strike burning blade in the caster's hand; the sweep only shows with <Cast Anim="flame_strike"/> (put this layer at Start="40") |
gigantic_storm | Vanilla Gigantic Storm: 5 lightning strikes on a ring around At. Size = ring radius % (100 = 200 units) |
twisting_slash | Vanilla Twisting Slash: the caster's own weapon spinning around them. Needs a weapon in hand. One copy only |
rageful_blow | Vanilla Rageful Blow: the weapon slams at At and cracks the ground. Without a weapon: cracks only. Plays its own impact sounds - add only the cast sound |
impale | Vanilla Impale lance thrust in front of the caster |
dragon_roar | Vanilla Dragon Roar: lava + dragon ground crack on the caster (lava needs <Cast Anim="dragon_roar"/>), volcano + burn on each To (max 3 volcanoes) |
Needs a target effects skip ground casts with no target. Needs the caster on screen effects skip copies where the caster is out of view.
Sounds: max 4 different sounds per skill (names or files; more are skipped with a log line).
Your own files#
Textures, sounds and models can be your own files, shipped in the client's Data folder (add them to your client update). Write the path relative to Data:
| Kind | Attribute | Format | Example |
|---|---|---|---|
| Texture | Texture="..." on any layer | .jpg (client file .OZJ) or 32-bit .tga (client file .OZT), max 1024 x 1024 | Texture="Effect\MySpell\glow.jpg" → Data\Effect\MySpell\glow.OZJ |
| Sound | <Sound File="..."/> | .wav (PCM) | <Sound File="Sound\MySpell\boom.wav" Start="300"/> |
| Model | <Missile Model="..."/> | .bmd; its textures in the same folder | <Missile Model="Effect\MySpell\orb.bmd" .../> |
Rules: no leading Data\, no .., no drive letters, at most 58 characters. Limits per table: 256 texture files, 64 sound files, 32 model files, 1024 different names / paths in total. A missing or broken file is skipped and reported (see Errors) - the game never closes because of it. Files load when the table arrives (login or /reload plugins).
Sound names
swing (random swoosh), swing1, swing2, swing_light, knight1..knight4, storm, evil, magic, hellfire, ice, flame, flash, explosion, meteorite, thunder, nuke1, nuke2, combo, blood, piercing, ice_arrow, telekinesis, soul_barrier, swell_life, riding_spear, raid_shoot, chain_lightning, lightning_shock, flame_strike, gigantic_storm, blow_of_destruction, rageful_blow, rageful_blow_swing, rageful_blow_impact, chaotic, swell_magic, drain_life, berserker, summon_explosion, requiem, sudden_ice, hit_melee, hit_missile, heal, bow, crossbow, fire_burst, fire_burst_impact, dark_side, dark_side_impact, dragon_slasher.
Shipped Skills#
| Id | Name | Class | Behaviour | Learn item |
|---|---|---|---|---|
| 273 | Meteor Storm | Soul Master, MG | AreaSelf, 3 hits | Scroll of Meteor Storm (15,39) |
| 274 | Soul Seeker | Soul Master | AreaGround, 4 hits | Scroll of Soul Seeker (15,40) |
| 275 | Blood Storm | Blade Knight, MG | AreaGround, 3 hits | Scroll of Blood Storm (15,41) |
| 276 | Fire Blow | Blade Knight | AreaTarget, 4 hits | Orb of Fire Blow (12,25) |
| 277 | Focus Shot | Elf | AreaGround, 4 hits, needs bow / crossbow + ammo | Orb of Focus Shot (12,29) |
| 278 | Party Healing | Elf | Heal, 3 members | Orb of Party Healing (12,51) |
| 279 | Havok Spear | MG | AreaGround | Scroll of Havok Spear (15,42) |
| 280 | Wind Soul | DL | AreaTarget, 3 hits | Scroll of Wind Soul (15,43) |
| 281 | Aqua Beast | Summoner | AreaGround, 4 hits | Scroll of Aqua Beast (15,44) |
| 282 | Dark Phoenix Shot | Rage Fighter | AreaTarget, 4 hits | Dark Phoenix Shot Parchment (15,45) |
The learn items are in Item.xml with Drop="0": they never drop from monsters. Hand them out through shops, item bags, quests or rewards.
Important Behavior#
- Bad rows are skipped, the rest load: Id out of range, Id already in Skill.txt, duplicate Id, unknown
Behaviour Type, or a Buff skill without an effect. Each is logged under[CustomSkills]. - Combo: attack skills combo only when listed under
<SecondarySkills>in CustomCombo.xml (the shipped file lists 273-277, 279, 280). The combo bonus applies to the first hit on each target. - MuHelper: the MuHelper and the offline helper can use custom skills like vanilla ones. Buff skills show in the buff list.
- Mounted: a
Mountedvalue in SkillTweaks.xml for the same skill id wins over the one here. - Area hits use the same circle the client draws: radius R reaches tile R. Area skills stop after
MaxTargetsenemies. - Delayed hits: with
HitDelaythe damage number appears when the visual lands, not on the cast. - AreaGround on a moving monster: the hit circle is centred on the monster's server tile, so hits do not land on empty ground while it walks.
- Visuals are client-only: changing
<Fx>,<Cast>,IconorDescneeds/reload pluginsand a relog. Numbers (damage, mana, range, behaviour) change for everyone on reload. Enabled="0"removes every custom skill from the server table and sends nothing to clients.
Examples#
Blade Knight melee skill: one target, 2 hits, 30% stun.
<Skill Id="281" Name="Crushing Blow" Damage="90" DamagePerStrength="25" Mana="20" AG="10" Range="2"
ReqLevel="250" ReqStrength="800" DarkKnight="2"
Physical="1" MeleeMultiplier="1" Icon="crushing_blow"
Desc="Two heavy blows on one target. 30% chance to stun.">
<Learn Item="15,44"/>
<Behaviour Type="Single" Hits="2" HitDelay="200" HitInterval="150"/>
<OnHit Effect="stun" Duration="2" Chance="30"/>
<Cast Anim="sword3"/>
<Fx>
<Sound Name="knight1" Start="0"/>
<Flash At="target" Start="200" Size="90" Color="255,200,120"/>
<Burst At="target" Start="200" Count="10" Color="255,180,90"/>
</Fx>
</Skill>
Dark Wizard cone, 5 tiles long, 4 wide at the end.
<Skill Id="282" Name="Dragon Breath" Damage="140" DamagePerEnergy="18" Mana="60" AG="12" Range="5"
Element="fire" ReqLevel="300" ReqEnergy="900" DarkWizard="1"
Icon="dragon_breath" Desc="Breathes fire in front of you.">
<Learn Item="15,45"/>
<Behaviour Type="Cone" Length="5" Width="4" MaxTargets="8" Hits="2" HitDelay="250" HitInterval="200"/>
<Cast Anim="flame_strike"/>
<Fx>
<Sound Name="flame" Start="0"/>
<Arc Start="0" Length="450" Size="500" Size2="70" Width="120" Color="255,90,20" Core="255,220,150"/>
<Burst At="targets" Start="250" Repeat="2" Interval="200" Count="8" Color="255,120,40"/>
</Fx>
</Skill>
Dark Lord party damage buff, 120 seconds, party within 8 tiles.
<Skill Id="283" Name="War Cry" Mana="40" AG="20" Range="1" Delay="2000"
ReqLevel="200" DarkLord="1" AutoRepeat="0"
Icon="war_cry" Desc="Raises the damage of you and your party.">
<Learn Item="15,46"/>
<Behaviour Type="Buff" Radius="8"/>
<Buff Effect="damage" Duration="120" Value1="40" Party="1"/>
<Cast Anim="att_up_ourforces"/>
<Fx>
<Sound Name="heal" Start="0"/>
<Pillar At="caster_feet" Start="0" Length="600" Size="80" Size2="250" Color="255,170,60"/>
</Fx>
</Skill>
For each new learn item, also add the item to Item.xml and give it a model in CustomItemVisual.xml.