CustomArena.xml

Scheduled PvP tournament arenas. Each arena defines its own schedule, entry gates (level / reset / master reset), class whitelist, point scoring, and teleport targets. Up to 30 independent arenas can be scheduled on one server.

File Location#

Data/Plugins/Events/CustomArena.xml

Loaded once at GameServer startup. Supports hot reload via plugin admin command.

Root Attributes#

<CustomArena Enabled="..." VictimScoreDecrease="..." KillerScoreIncrease="...">
AttributeTypeEffect
Enabled0 or 1Master toggle
VictimScoreDecreaseintPoints deducted per death. Clamped so score never drops below 0
KillerScoreIncreaseintPoints awarded per kill

Messages#

19 customizable message strings inside a <Messages> block. Each <Text Id="N" Value="..."/> replaces the default broadcast for that event type.

<Messages>
    <Text Id="1" Value="[%s] will close in %d minute(s)"/>
    ...
</Messages>
IdMeaningFormat args
1Alarm countdown%s=ArenaName, %d=MinutesLeft
2Arena closed%s=ArenaName
3Standby notice%s=ArenaName, %d=StandTime
4Arena started%s=ArenaName
5Arena finished%s=ArenaName
6Winner announce%s=ArenaName, %s=PlayerName
7Rank result%s=ArenaName, %d=Rank, %d=Score
8Cannot enter (generic restriction: party, guild war, duel, personal shop, already inside, map server down)
9Arena not currently open
10Max players reached
11Min level required (%d=MinLevel)
12Max level exceeded (%d=MaxLevel)
13Min master level (%d=MinMasterLevel)
14Max master level (%d=MaxMasterLevel)
15Min resets (%d=MinReset)
16Max resets (%d=MaxReset)
17Min master resets (%d=MinMasterReset)
18Max master resets (%d=MaxMasterReset)
19Class not allowed

Keep the format specifiers or replacement text will be garbled.

Arenas#

Each arena is wrapped in its own <Arena Index="0-29"> block and contains its own <Schedule> and <Rules> elements. The schedule is per-arena, not global.

<Arena Index="0">
    <Schedule>
        <Time Year="-1" Month="-1" Day="-1" DayOfWeek="-1" Hour="20" Minute="0" Second="0"/>
    </Schedule>
    <Rules Name="..." AlarmTime="..." StandTime="..." EventTime="..." CloseTime="..."
           StartGate="..." FinalGate="..."
           MinUser="..." MaxUser="..." MaxDeath="..."
           MinLevel="..." MaxLevel="..."
           MinMasterLevel="..." MaxMasterLevel="..."
           MinReset="..." MaxReset="..."
           MinMasterReset="..." MaxMasterReset="..."
           DW="..." DK="..." FE="..." MG="..." DL="..." SU="..." RF="..." />
</Arena>

Schedule#

<Time Year="-1" Month="-1" Day="-1" DayOfWeek="-1" Hour="20" Minute="0" Second="0"/>

-1 = wildcard. DayOfWeek: 1 = Sunday through 7 = Saturday. Multiple <Time> entries can be added to schedule the same arena at several instants.

Rules#

AttributeEffect
NameArena display name (max 31 characters)
AlarmTimeMinutes before start to announce and open entry. Default 5
StandTimeMinutes in standby after entry closes. 0 skips
EventTimeMain PvP duration in minutes. Default 5
CloseTimeMinutes for results display. 0 skips
StartGateGate ID for teleporting players in. Must target map 40 (Silent Map)
FinalGateGate ID for teleporting players out after the event
MinUserMinimum participants to advance from Stand to Start. -1 defaults to 1
MaxUserMaximum participants. Hard-capped at 100
MaxDeathDeaths before the player is kicked to FinalGate. -1 = unlimited
MinLevel / MaxLevelCharacter level range. -1 = no limit
MinMasterLevel / MaxMasterLevelMaster level range. -1 = no limit
MinReset / MaxResetReset count range. -1 = no limit
MinMasterReset / MaxMasterResetMaster reset range. -1 = no limit
DWDark Wizard gate (tri-state, see below)
DKDark Knight gate
FEFairy Elf gate
MGMagic Gladiator gate
DLDark Lord gate
SUSummoner gate
RFRage Fighter gate

Class gate values#

Each class attribute accepts a small integer that sets the maximum tier allowed for that class. The value is compared against the character's class-change tier plus one.

ValueMeaning
0Class blocked outright
11st class only (base class, e.g. Dark Wizard)
21st or 2nd class allowed (e.g. Dark Wizard or Soul Master)
31st, 2nd or 3rd class allowed (e.g. Dark Wizard, Soul Master, or Grand Master)

Default when the attribute is omitted is 1.

Match Lifecycle#

Each arena cycles through these states:

  1. Empty - Counting down to the next scheduled start. AlarmTime minutes before start, entry opens and countdown announcements begin.
  2. Stand - Entry closed. Waits StandTime minutes for participants to gather. Drops back to Empty if participant count falls under MinUser.
  3. Start - Combat phase, lasts EventTime minutes. Ends early if only one player remains.
  4. Clean - Ranks are calculated and saved to the ranking database. Winner announcement broadcast server-wide. CloseTime minutes before the arena returns to Empty and players are teleported out via FinalGate.

Players exceeding MaxDeath are teleported to FinalGate mid-match and their rank is locked at 0.

How players join#

Players join from the Move window (M). Each arena needs a Move.txt row whose gate is that arena's StartGate. The shipped file has "Arena Survivor" and the seven class arenas (Move indices 70-77 → gates 750-757). A move to an arena outside its entry window is refused with message 9 ("This arena is not currently open"); class, level and reset rules are checked at that moment.

Kill Scoring#

On each kill inside an active arena:

  • Victim loses VictimScoreDecrease points (floored at 0), kill streak resets, death count and death streak increment.
  • Killer gains KillerScoreIncrease points, kill count and kill streak increment, death streak resets.

Cross-File Dependencies#

AttributeRelated in
StartGate, FinalGateGate.txt
Arena map (Silent Map)MapManager.xml
Ranking storageEvent overview
Damage scalingCharacter.dat CustomArenaDamageRate
Elemental scalingCharacter.dat CustomArenaElementalDamageRate

Common Issues#

  • Arena never starts, nobody can join - no Move.txt row points at its StartGate, so MinUser is never reached
  • Arena starts but players teleport to wrong map - StartGate points at a gate that is not on the Silent Map
  • No one can enter at level 400 - MaxLevel set below 400 for a high-level server; raise it
  • Winner announce shows literal %s %s - message text missing a format specifier; the engine uses positional parameters
  • Class filter rejects everyone - every per-class flag (DW/DK/FE/MG/DL/SU/RF) is 0; at least one must be nonzero for anyone to enter
  • Points go negative - cannot happen; victim score is floored at 0. If you see negative on-screen values, it is a display bug, not a score bug
  • Arena never triggers - missing <Schedule> block inside the <Arena> node, or all <Time> entries have already passed with no recurring wildcard

Last updated October 5, 2026