Calculators

Experts

Calculates the Books of Knowledge, expert sigils, skill EXP, and affinity points to level experts and their skills.


Signature

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

calculateExperts(goals?: ExpertGoal[]): ExpertCalculation

Input

ExpertGoal

goals has one entry for each expert and defaults to an empty list.

FieldTypeDescription
idstringExpert id from experts()
levelobjectOptional affinity level range. Leave it out to skip the affinity levels
skillsExpertSkillGoal[]Optional. Leave it out to skip the skills

level

FieldTypeDescription
currentnumberAffinity level now, from 1 to EXPERT_MAX_LEVEL (100)
goalnumberAffinity level to reach
currentAdvancedbooleanOptional. True when the expert is already advanced at current
goalAdvancedbooleanOptional. True to pay for the advancement at goal too. Both flags are false by default

ExpertSkillGoal

FieldTypeDescription
namestringThe skill name from experts()
currentnumberSkill level now, from 1 to the max level of the skill
goalnumberSkill level to reach

Result

ExpertCalculation

The result has one entry in items for each expert, and the same fields summed over all experts.

FieldTypeDescription
itemsExpertItemResult[]One entry for each expert
booksnumberBooks of Knowledge for the skill levels
sigilsnumberExpert sigils for the advancements
expnumberSkill EXP for the skill levels
learningMinutesnumberThe exp divided by 60, rounded up: the minutes of learning time that the skills need
affinitynumberAffinity points for the affinity levels
levelsnumberAffinity levels gained
advancementsnumberAdvancements paid for
skillLevelsnumberSkill levels gained, for all skills
speedupPointsPerMinute{ svs, allianceShowdown }Points for each minute of speedups to learn expert skills
eventPointsExpertEventPointsPoints for the books and sigils in svs and allianceShowdown

Each item also has the expert id and name. The total learningMinutes is rounded up once from the total EXP, so it can be one minute below the sum of the experts.


How it works

A skill level costs books and skill EXP. Only the levels after current up to goal count.

An expert advances at every affinity level that has an advancementCost (10, 20, and so on up to 100) and needs the sigils to go past that level. A range that starts at or passes such a level pays for the advancement. A goal at such a level pays only when goalAdvanced is true. Use it for the final advancement at level 100. An expert that is already advanced at its current level (currentAdvanced) does not pay again. The affinity points are the sum of the affinity needed for each level gained.

Event points

SvS and Alliance Showdown score each Book of Knowledge and each expert sigil, read from the scoring rows of events(). King of Icefield and Hall of Chief have no such row. The learningMinutes of the result are the minutes that the user needs in Learning or General Speedups. The interface multiplies speedupPointsPerMinute with the minutes the user spends.

Learning time

One minute of learning time gives 60 Skill EXP, so one EXP is one second. A skill level that costs 43,200 EXP takes 720 minutes, or 12 hours of learning.

A Learning Speedup takes its minutes off the learning time, so a minute of Learning Speedup is worth 60 EXP. According to the package owner, a General Speedup counts toward skill learning at the same rate. The calculator does not take an inventory of speedups, so learningMinutes is the number to compare with the minutes that the user holds.

The talent of an expert costs nothing, because it levels with the relationship, so it is not in the result.


Constants

ConstantValueDescription
EXPERT_MAX_LEVEL100Top affinity level
EXPERT_SKILL_EXP_PER_LEARNING_MINUTE60Skill EXP that one minute of learning gives
EXPERT_LEARNING_QUEUE_OPTIONSlist of 6 optionsThe sessions that an expert skill can learn, one at a time

Each option in EXPERT_LEARNING_QUEUE_OPTIONS has a label, its minutes, and the exp that it earns, which is the minutes times 60. The list is the package owner's, from the game.

OptionMinutesEXP
10 min10600
2h1207,200
10h60036,000
24h1,44086,400
3d4,320259,200
5d7,200432,000

Errors

ErrorThrown when
ErrorAn expert id or a skill name is not in experts()
RangeErrorA level is not a whole number in range, or a goal is below the current level
RangeErrorAn advanced flag is set on a level with no advancement cost

Examples

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

const result = calculateExperts([
  {
    id: 'cyrille',
    level: { current: 1, goal: 20 },
    skills: [{ name: 'Entrapment', current: 1, goal: 5 }],
  },
])

result.books // 700
result.sigils // 5
result.exp // 36000
result.learningMinutes // 600
result.affinity // 6560
result.levels // 19
result.advancements // 1
result.eventPoints // { svs: 72000, allianceShowdown: 43200 }
result.speedupPointsPerMinute // { svs: 30, allianceShowdown: 18 }

Go from level 10 to level 30 when the expert already advanced at level 10:

const advanced = calculateExperts([
  { id: 'cyrille', level: { current: 10, goal: 30, currentAdvanced: true } },
])

advanced.levels // 20
advanced.advancements // 1
advanced.sigils // 10
advanced.affinity // 10610

Data and assumptions

The numbers come from the data behind experts(). One minute of learning is 60 EXP.


Next steps

Previous
Pets