1 import { Profession } from './profession';
2 import { Stat } from './stats';
3 import { SkillDefinition, Skill } from './skills';
4 import { EquippedItemDetails } from './equipped';
6 export function PermissionGuard(request: any): boolean {
7 const perms: Permission[] = ['admin', 'moderator', 'tester', 'archaeologist'];
9 return perms.includes(request);
12 export type Permission = 'admin' | 'moderator' | 'tester' | 'archaeologist';
14 export type Player = {
16 account_type: 'session' | 'auth',
18 profession: Profession,
32 permissions: Permission[]
35 export type PlayerWithSkills = Player & {
36 skills: (SkillDefinition & Skill)[]
39 export function maxHp(constitution: number, playerLevel: number): number {
40 return Math.ceil((constitution * 1.7) + (playerLevel * 1.3));
43 export function maxVigor(constitution: number, playerLevel: number): number {
44 return Math.ceil((constitution * 3.8) + (playerLevel * 1.5));
47 export function expToLevel(level: number): number {
49 return level * 10 - 10;
56 export function totalDefence(equippedItems: EquippedItemDetails[], player: Player, accountForVigor: boolean = true): number {
57 const vigorPercent = player.vigor / maxVigor(player.constitution, player.level);
59 const totalDefence = equippedItems.reduce((acc, curr) => {
60 let defence = curr.boosts.defence ?? 0;
61 return acc += defence;
65 return Math.ceil(totalDefence * vigorPercent);
73 export type StatDisplay = {
80 export const StatDef: Map<Stat, StatDisplay> = new Map<Stat, StatDisplay>();
82 StatDef.set(Stat.strength, {
86 description: 'Affects your melee damage'
89 StatDef.set(Stat.constitution, {
90 id: Stat.constitution,
91 display: 'Constitution',
93 description: 'Affects your max HP and Vigor'
96 StatDef.set(Stat.dexterity, {
100 description: 'Affects you ability to dodge attacks double-hit'
103 StatDef.set(Stat.intelligence, {
104 id: Stat.intelligence,
105 display: 'Intelligence',
107 description: 'Affects your magical damage'