VIP System Configuration

The VIP System provides a premium membership purchasing interface with configurable tiers, pricing options, and bonus systems. Players can purchase VIP status using WCoins, WPCoins, or Goblin Points.

File Location#

Data/Plugins/Characters/VIP/VIPSystem.xml

VIP Tiers#

TierDescriptionTypical Use
0Free PlayerDefault non-VIP status (not purchasable)
1-3VIP TiersPurchasable premium tiers with increasing benefits

Configuration Structure#

<VIPSystem Enabled="true" MaxTiers="4">
    <Tiers>
        <!-- Tier definitions with descriptions and bonuses -->
    </Tiers>
    <Pricing>
        <!-- Price options for each tier -->
    </Pricing>
    <UpgradeRules>
        <!-- How upgrades and time conversion work -->
    </UpgradeRules>
    <Display>
        <!-- UI text customization -->
    </Display>
</VIPSystem>

Sections#

Root Element#

<VIPSystem Enabled="true" MaxTiers="4">
AttributeTypeDefaultDescription
EnabledboolfalseEnable/disable the entire VIP system
MaxTiersint4Total number of tiers (including tier 0 free tier)

Tiers#

Each tier defines a membership level with its display properties, description, and bonuses.

<Tier Index="1" Name="Bronze VIP" Color="CD7F32" IconIndex="1">
    <Description>
        <Line>+20% Experience Rate</Line>
        <Line>+10% Item Drop Rate</Line>
    </Description>
    <Bonuses>
        <Bonus Type="EXP" Value="20" Display="+20% Experience" />
        <Bonus Type="DROP" Value="10" Display="+10% Item Drop" />
    </Bonuses>
</Tier>

Tier Attributes#

AttributeTypeDescription
IndexintTier level (0=Free, 1-3=VIP tiers)
NamestringDisplay name (max 32 characters)
ColorhexRGB color code without # prefix (e.g., "FFD700" for gold)
IconIndexintIcon reference for client UI

Description Lines#

Add multiple <Line> elements to describe the tier benefits. Maximum 8 lines, 64 characters each. The limit is compiled into the server; additional lines are ignored during load.

<Description>
    <Line>+50% Experience Rate</Line>
    <Line>+25% Item Drop Rate</Line>
    <Line>Access to VIP Maps</Line>
</Description>

Bonuses#

Bonuses are displayed to the player in the UI. The bonus values shown here are for display only - actual gameplay bonuses must be configured in ServerInfo.txt under the VIP rate multipliers.

Maximum 12 bonuses per tier. The limit is compiled into the server; additional entries are ignored during load.

<Bonus Type="EXP" Value="50" Display="+50% Experience" />
<Bonus Type="FEATURE" Display="VIP Maps Access" />
AttributeTypeDescription
TypeenumBonus category: EXP, DROP, ZEN, FEATURE, COSMETIC
ValueintNumeric value (used for rate bonuses, optional for features)
DisplaystringText shown to player (max 48 characters)

Bonus Types:

TypePurposeExample
EXPExperience rate bonus"Value=50" = 50% bonus
DROPItem drop rate bonus"Value=25" = 25% bonus
ZENZen drop rate bonus"Value=25" = 25% bonus
FEATUREGameplay feature"VIP Maps Access"
COSMETICVisual effect"Gold Name Color"

Pricing#

Define pricing options for each purchasable tier. Multiple duration options can be offered per tier.

<TierPricing TierIndex="1">
    <Option Days="7" WCoins="100" WPCoins="0" GoblinPoints="500" />
    <Option Days="30" WCoins="350" WPCoins="0" GoblinPoints="1800" />
    <Option Days="90" WCoins="900" WPCoins="0" GoblinPoints="4500" />
</TierPricing>

TierPricing Attributes#

AttributeTypeDescription
TierIndexintWhich tier this pricing applies to (1-3)

Option Attributes#

AttributeTypeValid RangeDescription
Daysint1-255Duration of VIP membership in days (sent as BYTE, max 255)
WCoinsint0+Cost in WCoins (set to 0 to disable this currency)
WPCoinsint0+Cost in WPCoins (set to 0 to disable this currency)
GoblinPointsint0+Cost in Goblin Points (set to 0 to disable this currency)

Currency Selection Logic:

  • Any currency with a value > 0 is available for payment
  • The player chooses which currency to use during purchase
  • At least one currency must be > 0 for a valid option

Example Configurations:

<Option Days="30" WCoins="500" WPCoins="0" GoblinPoints="0" />

Players can only pay with WCoins for this option.

Upgrade Rules#

Controls how VIP tier upgrades and time conversion work.

<UpgradeRules>
    <Rule ConvertRemainingTime="true" ConversionRate="50" AllowDowngrade="false" />
</UpgradeRules>
AttributeTypeDefaultDescription
ConvertRemainingTimebooltrueConvert remaining lower-tier time when upgrading to higher tier
ConversionRateint50Percentage of time that carries over (0-100)
AllowDowngradeboolfalseAllow purchasing lower tier when player has higher tier

Time Conversion Behavior#

When a player upgrades from a lower tier to a higher tier, the system can convert their remaining time on the old tier.

Formula:

ConvertedTime = RemainingSeconds × (CurrentTier / NewTier) × (ConversionRate / 100)

Example:

Player has 15 days remaining on VIP1 (Bronze) and upgrades to VIP3 (Gold) with ConversionRate="50":

ConvertedTime = 15 days × (1/3) × 0.5 = 2.5 days

The player gets 2.5 days bonus added to their VIP3 purchase.

Display Settings#

Customize the UI text shown in the VIP purchase window.

<Display>
    <WindowTitle>VIP Membership</WindowTitle>
    <PurchaseButtonText>Purchase</PurchaseButtonText>
    <ExtendButtonText>Extend</ExtendButtonText>
    <UpgradeButtonText>Upgrade</UpgradeButtonText>
    <CurrentTierLabel>Current Tier:</CurrentTierLabel>
    <ExpiresLabel>Expires:</ExpiresLabel>
    <SelectDurationLabel>Select Duration:</SelectDurationLabel>
</Display>
ElementMax LengthDescription
WindowTitle64 charsWindow title bar text
PurchaseButtonText32 charsButton text for new VIP purchase
ExtendButtonText32 charsButton text for extending current tier
UpgradeButtonText32 charsButton text for upgrading to higher tier
CurrentTierLabel32 charsLabel for current VIP status
ExpiresLabel32 charsLabel for expiration date
SelectDurationLabel32 charsLabel for duration selection dropdown

Important Behavior#

The VIP menu opened from the (U) interface builds one tab per configured tier. The number of tabs comes from MaxTiers and each tab label comes from that tier's Name; neither is fixed on the client. Add, remove, or rename tiers here and the menu tabs follow on the next login (or plugin reload) with no client change.

  • A tier with a blank Name produces no tab, so leave every purchasable tier named.
  • MaxTiers counts the free tier (Index 0). For 3 purchasable tabs plus the free reference tier, set MaxTiers="4".

Purchase Types#

The system automatically determines the purchase type:

TypeConditionBehavior
NEWPlayer has no VIP (tier 0)Grants VIP starting now
EXTENDPlayer purchases same tierAdds duration to existing expiration
UPGRADEPlayer purchases higher tierConverts remaining time + adds new duration

Currency Deduction#

When a purchase succeeds:

  1. Currency is deducted from the player's account via a DataServer currency write to DataServer
  2. Player's balance updates immediately in the client UI (via a client balance update notification)
  3. Account level and expiration are updated via a JoinServer account-level write to JoinServer

Account Level Storage#

VIP tier is stored in the AccountLevel field:

  • Tier 0 = Free player
  • Tier 1-3 = VIP tiers
  • Expiration date stored in AccountExpireDate field

Time Handling#

The system handles time zones and expiration as follows:

  • All times use server local time
  • Expiration format: YYYY-MM-DD HH:MM:SS
  • Grace period: Players retain benefits until the exact expiration second
  • Extensions: GameServer calculates new expiration locally AND sends duration to JoinServer for database persistence

Examples#

<VIPSystem Enabled="true" MaxTiers="4">
    <Tiers>
        <Tier Index="0" Name="Free Player" Color="808080" IconIndex="0">
            <Description>
                <Line>Standard gameplay</Line>
            </Description>
            <Bonuses />
        </Tier>

        <Tier Index="1" Name="Bronze VIP" Color="CD7F32" IconIndex="1">
            <Description>
                <Line>+20% Experience</Line>
                <Line>+10% Drop Rate</Line>
            </Description>
            <Bonuses>
                <Bonus Type="EXP" Value="20" Display="+20% Experience" />
                <Bonus Type="DROP" Value="10" Display="+10% Drop Rate" />
            </Bonuses>
        </Tier>

        <Tier Index="2" Name="Silver VIP" Color="C0C0C0" IconIndex="2">
            <Description>
                <Line>+50% Experience</Line>
                <Line>+25% Drop Rate</Line>
            </Description>
            <Bonuses>
                <Bonus Type="EXP" Value="50" Display="+50% Experience" />
                <Bonus Type="DROP" Value="25" Display="+25% Drop Rate" />
            </Bonuses>
        </Tier>

        <Tier Index="3" Name="Gold VIP" Color="FFD700" IconIndex="3">
            <Description>
                <Line>+100% Experience</Line>
                <Line>+50% Drop Rate</Line>
            </Description>
            <Bonuses>
                <Bonus Type="EXP" Value="100" Display="+100% Experience" />
                <Bonus Type="DROP" Value="50" Display="+50% Drop Rate" />
            </Bonuses>
        </Tier>
    </Tiers>

    <Pricing>
        <TierPricing TierIndex="1">
            <Option Days="7" WCoins="100" WPCoins="0" GoblinPoints="0" />
            <Option Days="30" WCoins="350" WPCoins="0" GoblinPoints="0" />
        </TierPricing>
        <TierPricing TierIndex="2">
            <Option Days="7" WCoins="200" WPCoins="0" GoblinPoints="0" />
            <Option Days="30" WCoins="700" WPCoins="0" GoblinPoints="0" />
        </TierPricing>
        <TierPricing TierIndex="3">
            <Option Days="7" WCoins="400" WPCoins="0" GoblinPoints="0" />
            <Option Days="30" WCoins="1400" WPCoins="0" GoblinPoints="0" />
        </TierPricing>
    </Pricing>

    <UpgradeRules>
        <Rule ConvertRemainingTime="true" ConversionRate="50" AllowDowngrade="false" />
    </UpgradeRules>

    <Display>
        <WindowTitle>VIP Membership</WindowTitle>
        <PurchaseButtonText>Purchase</PurchaseButtonText>
        <ExtendButtonText>Extend</ExtendButtonText>
        <UpgradeButtonText>Upgrade</UpgradeButtonText>
        <CurrentTierLabel>Current Tier:</CurrentTierLabel>
        <ExpiresLabel>Expires:</ExpiresLabel>
        <SelectDurationLabel>Select Duration:</SelectDurationLabel>
    </Display>
</VIPSystem>

Common Issues#

Dependencies#

Depends OnPurpose
JoinServerStores VIP tier and expiration date in account table
DataServerDeducts currency from account balance
ServerInfo.txtActual rate multipliers for VIP bonuses
  • ServerInfo.txt - VIP rate multipliers (EXP, Drop, Zen)
  • CashShop - WCoin/WPCoin management
  • Move/Gate configurations - VIP-only map access
  • common.dat - shared GameServer identity used by the per-account-level gates
  • command.dat - account-level multipliers applied to class command stats
  • Item configuration - item identity used by Bonus display entries

Last updated July 2, 2026