Events, Items & Account

VIP

Look up the VIP 1 to 12 progression: the XP each level costs and the bonuses it unlocks. Use it to see what a VIP level gives or which level a total XP amount reaches.


Type

VipLevel

FieldTypeDescription
idstringStable identifier, such as vip-9
namestringDisplay name, such as VIP 9
levelnumberVIP level from 1 to 12
xpRequirednumberXP to go from the previous level to this one. It is 0 for VIP 1
bonusesVipBonus[]Total bonuses active at this level, not the change from the previous level

VipBonus

FieldTypeDescription
statstringStat name, such as Resource Production Speed
statKeystringStable key, such as resource-production-speed
valuestringDisplay string, such as +16%, +1, or +1.1M
amountnumberParsed amount, such as 16, 1, or 1100000
unit'percent' | 'flat'Whether amount is a percent or a flat value

The K and M capacity suffixes are expanded to the full number in amount. Use amount and unit to add up or compare bonuses, and value to display them.


Factory

import { vip } from 'whiteout-survival-data'

vip() // all 12 levels
vip(source) // wrap a pre-filtered array

Filters

MethodSignatureDescription
byLevelbyLevel(level: number)Filter to the given VIP level.
atXpatXp(totalXp: number)Keep the highest level that the total XP reaches, or no level. It adds up xpRequired from the first level.
import { vip } from 'whiteout-survival-data'

vip().byLevel(9).first()?.name // 'VIP 9'
vip().atXp(1_000_000).first()?.name // 'VIP 9'

Terminal methods

MethodReturnsDescription
.get()VipLevel[]All results
.first()VipLevel | undefinedFirst result
.find(id)VipLevel | undefinedFind by id
.findByName(name)VipLevel | undefinedCase-insensitive exact name match
.search(query)VipLevel[]Case-insensitive partial name match
.count()numberNumber of results

Examples

import { vip } from 'whiteout-survival-data'

// One level and its bonuses
const vip9 = vip().byLevel(9).first()
vip9?.bonuses.map((b) => `${b.stat} ${b.value}`)
// ['Troops Defense +10%', 'March Queue +1', 'Troop Formation +2',
//  'Construction Speed +20%', 'Resource Production Speed +18%', 'Storehouse Capacity +800K']

// The level reached with 1,000,000 total XP
vip().atXp(1_000_000).first()?.name // 'VIP 9'

// Total XP to reach VIP 12 from the start
const totalXp = vip()
  .get()
  .reduce((sum, level) => sum + level.xpRequired, 0)
totalXp // 4800000

Notes

xpRequired is not a running total. VIP 1 is stored as 0. The sum of all xpRequired values is 4,800,000, the XP needed to reach VIP 12 from the start.

Bonuses accumulate. Resource Production Speed appears at every level with a higher value. Storehouse Capacity, March Queue, and Troop Formation also grow this way. The combat bonuses start at VIP 9 with Troops Defense. Troops Attack, Health, and Lethality join at VIP 10, 11, and 12.


Next steps

Previous
Tundra Album