import {Tulajdonsag2E, TulajdonsagIDs, TulajdonsagokTotal} from "./tulajdonsag2E"; import {KepzettsegId} from "./kepzettsegek2E"; import {Osztaly2E} from "./osztaly2E"; import {Karakter2E} from "./karakter2E"; import {BaseHP} from "./masodlagos_ertekek"; import {dAny} from "../../shared/domain-models/kockak"; import {AllowedFegyver} from "./allowed-fegyver"; export interface Szintlepes { osztaly: Osztaly2E; HProll: number; // only at level 5 and 9 tolvajExtraKepzettseg?: KepzettsegId; // every odd level harcosFegyver?: string; // every 3rd level kalozKritikus?: string; tulajdonsagNoveles?: Tulajdonsag2E; } export function PickableSpecializationFilter(existingSpecilizations: (string | undefined)[], szint: number) { return (fegyver: {Id: string}) => existingSpecilizations.filter(x => x === fegyver.Id).length < (szint < 9 ? 1 : 2) } export function LevelUp(karakter: Karakter2E, changeKarakter: (input: Karakter2E) => void) { const osztaly = karakter.szintlepesek[0].osztaly const tulajdonsagokTotal = TulajdonsagokTotal(karakter) const szint = karakter.szint + 1 const dice = BaseHP(osztaly) const roll = dAny(dice) console.log(`Level ${szint} HP roll on d${dice} is: ${roll}`) const szintlepes: Szintlepes = { osztaly: osztaly, HProll: roll } if (szint % 4 === 0) { for (const tulajdonsag of TulajdonsagIDs) { if (tulajdonsagokTotal[tulajdonsag] < 18) { szintlepes.tulajdonsagNoveles = tulajdonsag; break; } } } if(osztaly === Osztaly2E.Harcos) { const harcosSzint = karakter.szintlepesek.filter(x => x.osztaly === Osztaly2E.Harcos).length + 1 if (harcosSzint % 2 === 1) { const harcosSpecializaciok = karakter.szintlepesek.map(x => x.harcosFegyver) let specializationFilter = PickableSpecializationFilter(harcosSpecializaciok, harcosSzint) szintlepes.harcosFegyver = AllowedFegyver(Osztaly2E.Harcos).filter(specializationFilter)[0].Id } } if(osztaly === Osztaly2E.Tengeresz) { const kalozSzint = karakter.szintlepesek.filter(x => x.osztaly === Osztaly2E.Tengeresz).length + 1 if (kalozSzint % 3 === 0) { let kalozKritikus = karakter.szintlepesek.map(x => x.kalozKritikus) let specializationFilter = PickableSpecializationFilter(kalozKritikus, kalozSzint) szintlepes.kalozKritikus = AllowedFegyver(Osztaly2E.Tengeresz).filter(specializationFilter)[0].Id } } changeKarakter({...karakter, szint, szintlepesek: [...karakter.szintlepesek, szintlepes]}) } export function LevelDown(karakter: Karakter2E, changeKarakter: (input: Karakter2E) => void) { if (karakter.szintlepesek.length > 1) { changeKarakter({...karakter, szint: karakter.szint - 1, szintlepesek: karakter.szintlepesek.slice(0, -1)}) } else { console.error(`Can't level down character: ${karakter}`) } } export type ClassLevels = { [key in Osztaly2E]: number; }; const defaultClassLevels: ClassLevels = { [Osztaly2E.Amazon]: 0, [Osztaly2E.Barbar]: 0, [Osztaly2E.Ijasz]: 0, [Osztaly2E.Harcos]: 0, [Osztaly2E.Tengeresz]: 0, [Osztaly2E.Tolvaj]: 0, [Osztaly2E.Pap]: 0, [Osztaly2E.Varazslo]: 0, [Osztaly2E.Illuzionista]: 0, [Osztaly2E.Dalnok]: 0, [Osztaly2E.Druida]: 0, [Osztaly2E.Vandor]: 0, } export function getClassLevels(szintlepesek: Szintlepes[]) : ClassLevels { return szintlepesek.map(x => x.osztaly).reduce((classLevels, osztaly) => { classLevels[osztaly]++ return classLevels }, {...defaultClassLevels}) }