1 import { Profession } from './profession';
2 import { Stat } from './stats';
3 import { SkillDefinition, Skill } from './skills';
4 import { EquippedItemDetails } from './equipped';
6 export type Permission = 'admin' | 'moderator';
10 account_type: 'session' | 'auth',
12 profession: Profession,
26 permissions: Permission[]
29 export type PlayerWithSkills = Player & {
30 skills: (SkillDefinition & Skill)[]
33 export function maxHp(constitution: number, playerLevel: number): number {
34 return Math.ceil((constitution * 1.7) + (playerLevel * 1.3));
37 export function maxVigor(constitution: number, playerLevel: number): number {
38 return Math.ceil((constitution * 3.8) + (playerLevel * 1.5));
41 export function expToLevel(level: number): number {
43 return level * 10 - 10;
50 export function totalDefence(equippedItems: EquippedItemDetails[], player: Player, accountForVigor: boolean = true): number {
51 const vigorPercent = player.vigor / maxVigor(player.constitution, player.level);
53 const totalDefence = equippedItems.reduce((acc, curr) => {
54 let defence = curr.boosts.defence ?? 0;
55 return acc += defence;
59 return Math.ceil(totalDefence * vigorPercent);
67 export type StatDisplay = {
74 export const StatDef: Map<Stat, StatDisplay> = new Map<Stat, StatDisplay>();
76 StatDef.set(Stat.strength, {
80 description: 'Affects your melee damage'
83 StatDef.set(Stat.constitution, {
84 id: Stat.constitution,
85 display: 'Constitution',
87 description: 'Affects your max HP and Vigor'
90 StatDef.set(Stat.dexterity, {
94 description: 'Affects you ability to dodge attacks double-hit'
97 StatDef.set(Stat.intelligence, {
98 id: Stat.intelligence,
99 display: 'Intelligence',
101 description: 'Affects your magical damage'