diff --git a/Kemkas.Web/frontend/public/Milonga-Regular.ttf b/Kemkas.Web/frontend/public/Milonga-Regular.ttf new file mode 100644 index 0000000..e2938e5 Binary files /dev/null and b/Kemkas.Web/frontend/public/Milonga-Regular.ttf differ diff --git a/Kemkas.Web/frontend/public/kem2karakterlap_form.pdf b/Kemkas.Web/frontend/public/kem2karakterlap_form.pdf new file mode 100644 index 0000000..8ec69db Binary files /dev/null and b/Kemkas.Web/frontend/public/kem2karakterlap_form.pdf differ diff --git a/Kemkas.Web/frontend/src/first-edition/pdf/character.pdf.ts b/Kemkas.Web/frontend/src/first-edition/pdf/character.pdf.ts index f571c8e..b258628 100644 --- a/Kemkas.Web/frontend/src/first-edition/pdf/character.pdf.ts +++ b/Kemkas.Web/frontend/src/first-edition/pdf/character.pdf.ts @@ -46,7 +46,6 @@ export async function CreatePDF(karakter: KarakterPdfView) { const fontBytes = await fetch('/Merienda-Regular.ttf').then(res => res.arrayBuffer()) const pdfFont = await pdfDoc.embedFont(fontBytes) - // const pdfFont = await pdfDoc.embedFont(StandardFonts.TimesNewRoman) const fontSizeBase = 12 const page = pdfDoc.getPage(0) diff --git a/Kemkas.Web/frontend/src/second-edition/components/FegyverSelector.tsx b/Kemkas.Web/frontend/src/second-edition/components/FegyverSelector.tsx index c24c2b7..f3736e9 100644 --- a/Kemkas.Web/frontend/src/second-edition/components/FegyverSelector.tsx +++ b/Kemkas.Web/frontend/src/second-edition/components/FegyverSelector.tsx @@ -1,7 +1,7 @@ import React from "react"; import {Fegyver} from "../domain-models/felszereles"; -export function FegyverLabel(fegyver: Fegyver): string { +export function FegyverFlags(fegyver: Fegyver): string { const flags = [] as string[] if (fegyver.Megterheltseg) { flags.push("M") @@ -47,17 +47,15 @@ export function FegyverLabel(fegyver: Fegyver): string { if (fegyver.Rohamtoro) { flags.push("RT") } - // Replaced by new group "dobhato" - // if (fegyver.EroBonusz) { - // flags.push("ER") - // } - if (fegyver.Megjegyzes != null && fegyver.Megjegyzes.length > 0) { - flags.push(fegyver.Megjegyzes) - } - const serializedFlags = flags.reduce((p,c) => `${p}${c} `, ''); + return flags.join(' '); +} + +export function FegyverLabel(fegyver: Fegyver): string { + const serializedFlags = FegyverFlags(fegyver) + (fegyver.Megjegyzes != null ? " " + fegyver.Megjegyzes : ""); const sizeLabel = fegyver.Size < 1 && fegyver.Size > 0 ? ` [1/${Math.round(1 / fegyver.Size)}]` : (fegyver.Size > 1 ? ` [${fegyver.Size}]` : ''); - return `${fegyver.Name}${sizeLabel} ${serializedFlags.length > 0 ? "| " + serializedFlags : ''}| ${ - fegyver.DamageMultiplier > 1 ? `${fegyver.DamageMultiplier}*` : ''}${fegyver.NumberOfDamageDice}d${fegyver.DamageDice}${fegyver.DamageBonus > 0 ? ` +${fegyver.DamageBonus}` : ''} ${ + return `${fegyver.Name}${sizeLabel} | ${serializedFlags.length > 0 ? serializedFlags + " |" : ''}${ + fegyver.DamageMultiplier > 1 ? `${fegyver.DamageMultiplier}*` : ''}${ + fegyver.NumberOfDamageDice}d${fegyver.DamageDice}${fegyver.DamageBonus > 0 ? ` +${fegyver.DamageBonus}` : ''} ${ fegyver.CritRangeStart < 20 ? `${fegyver.CritRangeStart}-20` : ''}x${fegyver.CritMultiplier}${ fegyver.Price > 0 ? ` | ár: ${fegyver.Price} at ` : ''}${ fegyver.Range > 10 ? ` | táv: ${fegyver.Range}` : ''}` diff --git a/Kemkas.Web/frontend/src/second-edition/components/TulajdonsagInput2E.tsx b/Kemkas.Web/frontend/src/second-edition/components/TulajdonsagInput2E.tsx index 9cd0d25..ff5e0ce 100644 --- a/Kemkas.Web/frontend/src/second-edition/components/TulajdonsagInput2E.tsx +++ b/Kemkas.Web/frontend/src/second-edition/components/TulajdonsagInput2E.tsx @@ -2,7 +2,7 @@ import React from "react"; import {Faj2E, FajLabel} from "../domain-models/faj2E"; import {Modifier} from "../domain-models/tulajdonsag2E"; -import {SignedNumberToText} from "../../shared/helpers"; +import {SignedNumberToText} from "../../shared/components/Helpers"; function fajiModositoText(faj: Faj2E, szamolas: (f: Faj2E) => number) : string { diff --git a/Kemkas.Web/frontend/src/second-edition/domain-models/karakter2E.ts b/Kemkas.Web/frontend/src/second-edition/domain-models/karakter2E.ts index be39170..c67c9d5 100644 --- a/Kemkas.Web/frontend/src/second-edition/domain-models/karakter2E.ts +++ b/Kemkas.Web/frontend/src/second-edition/domain-models/karakter2E.ts @@ -120,7 +120,7 @@ function setOsztalyForSzintLepes(szintlepesek: Szintlepes[], osztaly: Osztaly2E, export function ChangeLvl1Osztaly(karakter: Karakter2E, osztaly: Osztaly2E): Karakter2E { return { ...karakter, - szintlepesek: [{...karakter.szintlepesek[0], osztaly}, ...karakter.szintlepesek.slice(1)] + szintlepesek: [{...karakter.szintlepesek[0], HProll: BaseHP(osztaly) , osztaly}, ...karakter.szintlepesek.slice(1)] } } diff --git a/Kemkas.Web/frontend/src/second-edition/domain-models/masodlagos_ertekek.ts b/Kemkas.Web/frontend/src/second-edition/domain-models/masodlagos_ertekek.ts index 53f0f1c..38e4d71 100644 --- a/Kemkas.Web/frontend/src/second-edition/domain-models/masodlagos_ertekek.ts +++ b/Kemkas.Web/frontend/src/second-edition/domain-models/masodlagos_ertekek.ts @@ -53,6 +53,24 @@ export function HP(karakter: Pick) .reduce((sum, val) => sum + val, 0) } +export function VOegyeb(karakter: Pick): number { + const osztalyok = new Set(karakter.szintlepesek.map(x => x.osztaly)) + let vo = 0; + if (osztalyok.has(Osztaly2E.Tengeresz)) { + const kalozSzintek = karakter.szintlepesek.filter(x => x.osztaly === Osztaly2E.Tengeresz).length + vo += Math.floor(kalozSzintek / 3) + } + if (osztalyok.has(Osztaly2E.Amazon)) { + + const amazonSzintek = karakter.szintlepesek.filter(x => x.osztaly === Osztaly2E.Amazon).length + vo += Math.floor(amazonSzintek / 2) + } + if (karakter.faj === Faj2E.Felszerzet || karakter.faj === Faj2E.Gnom){ + vo += 1 + } + return vo; +} + export function VO(karakter: Pick): number { const osztalyok = new Set(karakter.szintlepesek.map(x => x.osztaly)) const pancel = GetPancel(karakter.felszereles.pancelID) @@ -63,20 +81,12 @@ export function VO(karakter: Pick x.osztaly === Osztaly2E.Tengeresz).length - vo += Math.floor(kalozSzintek / 3) - } - if (osztalyok.has(Osztaly2E.Amazon)) { + if (osztalyok.has(Osztaly2E.Amazon)){ if (karakter.tulajdonsagok.t_kar > karakter.tulajdonsagok.t_ugy) { abilityVO = Modifier(karakter.tulajdonsagok.t_kar) } - const amazonSzintek = karakter.szintlepesek.filter(x => x.osztaly === Osztaly2E.Amazon).length - vo += Math.floor(amazonSzintek / 2) - } - if (karakter.faj === Faj2E.Felszerzet || karakter.faj === Faj2E.Gnom){ - vo += 1 } + vo += VOegyeb(karakter) vo += abilityVO return vo diff --git a/Kemkas.Web/frontend/src/second-edition/domain-models/szintlepes.ts b/Kemkas.Web/frontend/src/second-edition/domain-models/szintlepes.ts index 89436e8..0d604ee 100644 --- a/Kemkas.Web/frontend/src/second-edition/domain-models/szintlepes.ts +++ b/Kemkas.Web/frontend/src/second-edition/domain-models/szintlepes.ts @@ -9,9 +9,12 @@ import {AllowedFegyver} from "./allowed-fegyver"; export interface Szintlepes { osztaly: Osztaly2E; HProll: number; - tolvajExtraKepzettseg?: KepzettsegId; // only at level 5 and 9 - harcosFegyver?: string; // every 3rd level - kalozKritikus?: string; // every odd level + // only at level 5 and 9 + tolvajExtraKepzettseg?: KepzettsegId; + // every odd level + harcosFegyver?: string; + // every 3rd level + kalozKritikus?: string; tulajdonsagNoveles?: Tulajdonsag2E; } diff --git a/Kemkas.Web/frontend/src/second-edition/pages/CreateCharacter2E.tsx b/Kemkas.Web/frontend/src/second-edition/pages/CreateCharacter2E.tsx index 99e931b..cfacd65 100644 --- a/Kemkas.Web/frontend/src/second-edition/pages/CreateCharacter2E.tsx +++ b/Kemkas.Web/frontend/src/second-edition/pages/CreateCharacter2E.tsx @@ -1,6 +1,6 @@ import React, {useContext, useState} from 'react' import {useLoaderData, useNavigate, useParams} from "react-router-dom"; -import {Button, InputGroup, Modal, OverlayTrigger, Toast, ToastContainer, Tooltip} from "react-bootstrap"; +import {Button, InputGroup, Modal, OverlayTrigger, Toast, ToastContainer} from "react-bootstrap"; import {ChangeLvl1Osztaly, DefaultKarakter, Karakter2E} from "../domain-models/karakter2E"; import {KarakterTulajdonsagok} from "../domain-models/tulajdonsag2E"; import FajSelector2E from "../components/FajSelector2E"; @@ -32,6 +32,8 @@ import { } from "../api/character.api"; import {Faro} from "@grafana/faro-web-sdk"; import Form from "react-bootstrap/Form"; +import {CreatePDF} from "../pdf/character.pdf"; +import {KarakterInputToPdfView} from "../pdf/karakter_pdf_view"; function CreateCharacter2E(props: { faro?: Faro @@ -272,18 +274,16 @@ function CreateCharacter2E(props: {
- Hamarosan!} - delay={0} - defaultShow={false} - flip={false} - trigger={"hover"} - > -
- -
-
+
+ +
diff --git a/Kemkas.Web/frontend/src/second-edition/pdf/character.pdf.ts b/Kemkas.Web/frontend/src/second-edition/pdf/character.pdf.ts new file mode 100644 index 0000000..644808d --- /dev/null +++ b/Kemkas.Web/frontend/src/second-edition/pdf/character.pdf.ts @@ -0,0 +1,90 @@ +import {KarakterPdfView} from "./karakter_pdf_view"; +import {PDFDocument} from "pdf-lib"; +import fontkit from "@pdf-lib/fontkit"; +import download from "downloadjs"; +import {SignedNumberToText} from "../../shared/components/Helpers"; + +export async function CreatePDF(karakter: KarakterPdfView) { + const existingPdfBytes = await fetch('/kem2karakterlap_form.pdf').then(res => res.arrayBuffer()) + const pdfDoc = await PDFDocument.load(existingPdfBytes) + pdfDoc.registerFontkit(fontkit) + + const fontBytes = await fetch('/Milonga-Regular.ttf').then(res => res.arrayBuffer()) + const pdfFont = await pdfDoc.embedFont(fontBytes) + + const form = pdfDoc.getForm() + + const osztalyok = karakter.Osztaly.length > 1 ? karakter.Osztaly.map(x => `${x.osztaly} (${x.szint})`).join(", ") : karakter.Osztaly[0].osztaly + form.getTextField("nev_faj_osztaly").setText(`${karakter.Nev}, ${karakter.Faj} ${osztalyok}`) + + form.getTextField("szint").setText((karakter.SzintTotal.length > 1 ? " " : " ") + karakter.SzintTotal) + form.getTextField("jellem").setText(karakter.Jellem) + form.getTextField("istenseg").setText(karakter.Isten) + + form.getTextField("vo").setText(karakter.VO.toString()) + form.getTextField("pancel").setText(" " + karakter.PancelVO) + form.getTextField("pajzs").setText(" " + karakter.PajzsVO) + form.getTextField("egyeb_vo").setText(" " + karakter.EgyebVO) + + form.getTextField("tul_ero").setText(` ${karakter.Tulajdonsagok.t_ero}`) + form.getTextField("tul_ero_mod").setText(SignedNumberToText(karakter.TulajdonsagModositok.t_ero)) + form.getTextField("tul_ugy").setText(` ${karakter.Tulajdonsagok.t_ugy}`) + form.getTextField("tul_ugy_mod").setText(SignedNumberToText(karakter.TulajdonsagModositok.t_ugy)) + form.getTextField("tul_egs").setText(` ${karakter.Tulajdonsagok.t_egs}`) + form.getTextField("tul_egs_mod").setText(SignedNumberToText(karakter.TulajdonsagModositok.t_egs)) + form.getTextField("tul_int").setText(` ${karakter.Tulajdonsagok.t_int}`) + form.getTextField("tul_int_mod").setText(SignedNumberToText(karakter.TulajdonsagModositok.t_int)) + form.getTextField("tul_bol").setText(` ${karakter.Tulajdonsagok.t_bol}`) + form.getTextField("tul_bol_mod").setText(SignedNumberToText(karakter.TulajdonsagModositok.t_bol)) + form.getTextField("tul_kar").setText(` ${karakter.Tulajdonsagok.t_kar}`) + form.getTextField("tul_kar_mod").setText(SignedNumberToText(karakter.TulajdonsagModositok.t_kar)) + + form.getTextField("hp_rolls").setText(karakter.HPszintenkent.join(", ")) + form.getTextField("hp_aktualis").setText(karakter.HP.toString()) + + form.getTextField("kitartas_alap").setText(" " + karakter.MentokAlap.kitartas.toString()) + form.getTextField("kitartas_mod").setText(" " + SignedNumberToText(karakter.MentoModositok.kitartas)) + form.getTextField("kitartas_sum").setText(" " + karakter.MentokModositokkal.kitartas.toString()) + + form.getTextField("reflex_alap").setText(" " + karakter.MentokAlap.reflex.toString()) + form.getTextField("reflex_mod").setText(" " + SignedNumberToText(karakter.MentoModositok.reflex)) + form.getTextField("reflex_sum").setText(" " + karakter.MentokModositokkal.reflex.toString()) + + form.getTextField("akaratero_alap").setText(" " + karakter.MentokAlap.akaratero.toString()) + form.getTextField("akaratero_mod").setText(" " + SignedNumberToText(karakter.MentoModositok.akaratero)) + form.getTextField("akaratero_sum").setText(" " + karakter.MentokModositokkal.akaratero.toString()) + + form.getTextField("kezdemenyezes").setText(" " + SignedNumberToText(karakter.Kezdemenyezes)) + + form.getTextField("tamadas_bonusz_alap").setText(karakter.TamadasBonuszAlap.join("/")) + form.getTextField("tamadas_bonusz_ero").setText(" " + SignedNumberToText(karakter.TulajdonsagModositok.t_ero)) + form.getTextField("tamadas_bonusz_kozelharc").setText(karakter.KozelharciTB.join("/")) + form.getTextField("tamadas_bonusz_ugy").setText(" " + SignedNumberToText(karakter.TulajdonsagModositok.t_ugy)) + form.getTextField("tamadas_bonusz_tavolsagi").setText(karakter.CelzoTB.join("/")) + + for (let i = 0; i < karakter.Kepzettsegek.length; i++) { + const kepzettseg = karakter.Kepzettsegek[i] + form.getTextField(`kepzettseg_${i}_nev`).setText(kepzettseg.nev) + form.getTextField(`kepzettseg_${i}_alap`).setText(kepzettseg.alap) + form.getTextField(`kepzettseg_${i}_bonusz`).setText(kepzettseg.bonusz) + form.getTextField(`kepzettseg_${i}_osszes`).setText(kepzettseg.osszes) + } + for (let i = 0; i < karakter.Fegyverek.length; i++) { + form.getTextField(`fegyver_${i+1}`).setText(karakter.Fegyverek[i]) + } + + for (let i = 0; i < karakter.FelszerelesViselt.length && i < 8; i++) { + form.getTextField(`viselt_${i}`).setText(karakter.FelszerelesViselt[i]) + } + for (let i = 0; i < karakter.FelszerelesCipelt.length && i < 8; i++) { + form.getTextField(`cipelt_${i}`).setText(karakter.FelszerelesCipelt[i]) + } + for (let i = 0; i < karakter.FelszerelesAprosagok.length && i < 8; i++) { + form.getTextField(`aprosagok_${i}`).setText(karakter.FelszerelesAprosagok[i]) + } + + form.updateFieldAppearances(pdfFont) + + const pdfBytes = await pdfDoc.save(); + download(pdfBytes, `${karakter.Nev}_${karakter.SzintTotal}.pdf`, "application/pdf"); +} \ No newline at end of file diff --git a/Kemkas.Web/frontend/src/second-edition/pdf/karakter_pdf_view.ts b/Kemkas.Web/frontend/src/second-edition/pdf/karakter_pdf_view.ts new file mode 100644 index 0000000..ed44f28 --- /dev/null +++ b/Kemkas.Web/frontend/src/second-edition/pdf/karakter_pdf_view.ts @@ -0,0 +1,176 @@ +import {Modifier, TulajdonsagokTotal} from "../domain-models/tulajdonsag2E"; +import {Mentok, MentoModositok, MultiClassMentokAlap} from "../domain-models/mentok"; +import {CalculateMasodlagosErtekek, VOegyeb} from "../domain-models/masodlagos_ertekek"; +import {FajLabel} from "../domain-models/faj2E"; +import {Osztaly2E, OsztalyLabel} from "../domain-models/osztaly2E"; +import {CelzoTB, KozelharciTB, MultiClassTamadasBonusz} from "../domain-models/tamadas_bonusz"; +import {Karakter2E} from "../domain-models/karakter2E"; +import {GetJellem} from "../domain-models/jellem"; +import {GetFegyver, GetPajzs, GetPancel} from '../domain-models/felszereles' +import { + KarakterTulajdonsagok, + TulajdonsagModosito +} from "../domain-models/tulajdonsag2E"; +import {SignedNumberToText} from "../../shared/components/Helpers"; +import {Kepzettseg, Kepzettsegek} from "../domain-models/kepzettsegek2E"; +import {getClassLevels} from "../domain-models/szintlepes"; +import {FegyverFlags} from "../components/FegyverSelector"; + +interface KepzettsegPdfView { + nev: string, + alap: string, + bonusz: string, + osszes: string +} + +export interface KarakterPdfView { + Nev: string + Isten: string + Jellem: string + Faj: string + Osztaly: {osztaly: string, szint: number}[] + Tulajdonsagok: KarakterTulajdonsagok, + TulajdonsagModositok: KarakterTulajdonsagok, + SzintTotal: string + HP: number + HPszintenkent: number[] + VO: number + PancelVO: string + PajzsVO: string + EgyebVO: string + Kezdemenyezes: number + TamadasBonuszAlap: number[] + KozelharciTB: number[] + CelzoTB: number[] + MentokAlap: Mentok + MentoModositok: Mentok + MentokModositokkal: Mentok, + Kepzettsegek: KepzettsegPdfView[], + Fegyverek: string[], + FelszerelesViselt: string[], + FelszerelesCipelt: string[], + FelszerelesAprosagok: string[], +} + +export function KarakterInputToPdfView(karakter: Karakter2E): KarakterPdfView { + const tulajdonsagok = TulajdonsagokTotal(karakter) + karakter = {...karakter, tulajdonsagok} + const tulajdonsagModositok = TulajdonsagModosito(tulajdonsagok) + const masodlagosErtekek = CalculateMasodlagosErtekek(karakter) + const pancel = GetPancel(karakter.felszereles.pancelID) + const pajzs = GetPajzs(karakter.felszereles.pajzsID) + const kezdemenyezes = tulajdonsagModositok.t_ugy + (karakter.szintlepesek.some(x => x.osztaly === Osztaly2E.Tolvaj) ? 4 : 0) + + const mentok = MultiClassMentokAlap(karakter.szintlepesek) + const mentoModositok = MentoModositok(tulajdonsagModositok) + + const osztalyok = new Array(...(new Set(karakter.szintlepesek.map(x => x.osztaly)))) + const osztaly = osztalyok.map(x => ({ + osztaly: OsztalyLabel(x), + szint: karakter.szintlepesek.filter(sz => sz.osztaly === x).length + })) + + const classLevels = getClassLevels(karakter.szintlepesek) + + let felszereles = [] as string[] + if(pancel != null){ + felszereles = felszereles.concat(FelszerelesToPdfView(pancel)) + } + if(pajzs != null){ + felszereles = felszereles.concat(FelszerelesToPdfView(pajzs)) + } + + felszereles = felszereles.concat(karakter.felszereles.fegyverIDk.map(x => { + const fegyver = GetFegyver(x) + if (fegyver == null) { + console.error("unknown fegyver: " + x) + return [] + } + return FelszerelesToPdfView(fegyver) + }).reduce((acc, item) => acc.concat(item), [] as string[])) + + return { + Faj: FajLabel(karakter.faj).toLowerCase(), + Isten: karakter.isten || "", + Jellem: GetJellem(karakter.jellem).Label, + Nev: karakter.nev, + Tulajdonsagok: karakter.tulajdonsagok, + Osztaly: osztaly, + SzintTotal: karakter.szint.toString(), + TulajdonsagModositok: tulajdonsagModositok, + + HP: masodlagosErtekek.HP, + HPszintenkent: karakter.szintlepesek.map(x => x.HProll), + + Kezdemenyezes: kezdemenyezes, + + TamadasBonuszAlap: MultiClassTamadasBonusz(karakter.szintlepesek), + KozelharciTB: KozelharciTB(karakter), + CelzoTB: CelzoTB(karakter), + + MentoModositok: mentoModositok, + MentokAlap: mentok, + MentokModositokkal: masodlagosErtekek.Mentok, + + VO: masodlagosErtekek.VO, + PajzsVO: SignedNumberToText(pajzs?.VO), + PancelVO: SignedNumberToText(pancel?.VO), + EgyebVO: SignedNumberToText(VOegyeb(karakter)), + + Kepzettsegek: + karakter.kepzettsegek.map(k => + mapKepzettsegToPdfView(Kepzettsegek[k], tulajdonsagok, karakter.szint)) + .concat(karakter.tolvajKepzettsegek?.map(k => + mapKepzettsegToPdfView(Kepzettsegek[k], tulajdonsagok, classLevels[Osztaly2E.Tolvaj])) || []), + + Fegyverek: karakter.felszereles.fegyverIDk.slice(0, 4).map(fid => { + const fegyver = GetFegyver(fid) + if (fegyver == null) { + console.error("unknown fegyver: " + fid) + return "" + } + const serializedFlags = FegyverFlags(fegyver); + const critStart = fegyver.CritRangeStart - karakter.szintlepesek.filter(x => x.kalozKritikus === fegyver.Id).length + const damageBonus = fegyver.DamageBonus + + (fegyver.KetkezesBonusz ? 1 : 0) + + (fegyver.Type !== "lofegyver" || fegyver.EroBonusz ? tulajdonsagModositok.t_ero : 0) + + (karakter.szintlepesek.filter(x => x.harcosFegyver === fegyver.Id).length * 2) + return `${fegyver.Name} ${serializedFlags.length > 0 ? serializedFlags + " " : ''} ${ + fegyver.DamageMultiplier > 1 ? `${fegyver.DamageMultiplier}*` : ''}${ + fegyver.NumberOfDamageDice}d${fegyver.DamageDice}${damageBonus !== 0 ? `${ + SignedNumberToText(damageBonus)}` : ''} ${ + critStart < 20 ? `${critStart}-20` : '20'}x${fegyver.CritMultiplier}` + }), + FelszerelesViselt: felszereles, + FelszerelesCipelt: [], + FelszerelesAprosagok: [] + } +} + +interface FelszerelesPdf { + Name: string, + Size: number, +} + +function FelszerelesToPdfView(item: FelszerelesPdf): string[] { + const ans = [item.Name] + for (let i = 1; i < item.Size; i ++) { + ans.push("+") + } + return ans +} + +function mapKepzettsegToPdfView(kepzettseg: Kepzettseg, tulajdonsagok: KarakterTulajdonsagok, szint: number): KepzettsegPdfView { + const tulajdonsagErtek = kepzettseg.Tulajdonsag.reduce((maxTulajdonsagErtek, currentTulajdonsag) => + tulajdonsagok[currentTulajdonsag] > maxTulajdonsagErtek + ? tulajdonsagok[currentTulajdonsag] + : maxTulajdonsagErtek, + tulajdonsagok[kepzettseg.Tulajdonsag[0]]) + + return { + nev: kepzettseg.Name, + alap: szint.toString(), + bonusz: SignedNumberToText(Modifier(tulajdonsagErtek)), + osszes: (szint + Modifier(tulajdonsagErtek)).toString(), + } +} \ No newline at end of file diff --git a/Kemkas.Web/frontend/src/shared/components/Helpers.tsx b/Kemkas.Web/frontend/src/shared/components/Helpers.tsx index 8efe09f..c33b74e 100644 --- a/Kemkas.Web/frontend/src/shared/components/Helpers.tsx +++ b/Kemkas.Web/frontend/src/shared/components/Helpers.tsx @@ -1,3 +1,3 @@ -export function SignedNumberToText(val: number) : string { - return val === 0 ? " 0" : (val > 0 ? '+'+val : val.toString()) +export function SignedNumberToText(val?: number) : string { + return (val === null || val === undefined) ? "" : (val === 0 ? " 0" : (val > 0 ? '+'+val : val.toString())) } diff --git a/Kemkas.Web/frontend/src/shared/helpers.ts b/Kemkas.Web/frontend/src/shared/helpers.ts deleted file mode 100644 index 8efe09f..0000000 --- a/Kemkas.Web/frontend/src/shared/helpers.ts +++ /dev/null @@ -1,3 +0,0 @@ -export function SignedNumberToText(val: number) : string { - return val === 0 ? " 0" : (val > 0 ? '+'+val : val.toString()) -}