diff --git a/src/domain-models/memorizalt_varazslat_tabla.json b/src/domain-models/memorizalt_varazslat_tabla.json new file mode 100644 index 0000000..cfe7537 --- /dev/null +++ b/src/domain-models/memorizalt_varazslat_tabla.json @@ -0,0 +1,24 @@ +{ + "varazslatok": [ + [3,1], + [4,2], + [4,2,1], + [5,3,2], + [5,3,2,1], + [5,3,2,2], + [6,4,3,2,1], + [6,4,3,3,2], + [6,4,4,3,2,1], + [6,4,4,3,3,2], + [7,5,4,4,3,2], + [7,5,4,4,3,3], + [7,5,5,4,4,3], + [7,5,5,4,4,3], + [7,5,5,5,4,4], + [8,6,5,5,4,4], + [8,6,5,5,5,4], + [8,6,6,5,5,4], + [8,6,6,5,5,5], + [8,6,6,6,5,5] + ] +} \ No newline at end of file diff --git a/src/domain-models/memorizalt_varazslatok.ts b/src/domain-models/memorizalt_varazslatok.ts new file mode 100644 index 0000000..58a17e6 --- /dev/null +++ b/src/domain-models/memorizalt_varazslatok.ts @@ -0,0 +1,38 @@ +import MemorizaltVarazslatTabla from "./memorizalt_varazslat_tabla.json"; +import {KarakterInputs} from "./karakter"; +import {Osztaly} from "./osztaly"; +import {Modifier} from "./tulajdonsag"; + +function isSpellcaster(osztaly: Osztaly): boolean { + return osztaly === Osztaly.Pap || osztaly === Osztaly.Illuzionista || osztaly === Osztaly.Varazslo; +} + +function getMagicAbilityModifier(karakter: Pick) : number { + const magicAbility = karakter.osztaly === Osztaly.Pap ? karakter.tulajdonsagok.t_bol : karakter.tulajdonsagok.t_int + return Modifier(magicAbility) +} + +export function NapiVarazslatok(karakter: Pick) : number[] { + if (!isSpellcaster(karakter.osztaly)) { + return [] + } + const magicAbilityModifier = getMagicAbilityModifier(karakter) + const response = [...MemorizaltVarazslatTabla.varazslatok[karakter.szint-1]] + for (let i = 1; i <= magicAbilityModifier && i < response.length; i++){ + response[i] += 1 + } + return response +} + +export function CalculateVarazslatMentokNF(karakter: Pick): number[] { + if (!isSpellcaster(karakter.osztaly)) { + return [] + } + const magicAbilityModifier = getMagicAbilityModifier(karakter) + const response = [] + for (let spellLevel = 0; spellLevel < 6; spellLevel++){ + const NF = 10 + spellLevel + magicAbilityModifier + response.push(NF) + } + return response +} \ No newline at end of file diff --git a/src/pdf/character.pdf.ts b/src/pdf/character.pdf.ts index 05821e2..c04997b 100644 --- a/src/pdf/character.pdf.ts +++ b/src/pdf/character.pdf.ts @@ -200,6 +200,35 @@ function DrawKepzettsegek(page: PDFPage, fontSizeBase: number, pdfFont: PDFFont, } } +function DrawMagic(page: PDFPage, fontSizeBase: number, pdfFont: PDFFont, napiVarazslatok: number[], varazsMentokNF: number[]){ + for(let i = 0; i < 6; i++) { + const y = 247 - (i*18) + page.drawText(i.toString(), { + x: 210, + y: y, + size: fontSizeBase, + font: pdfFont, + color: rgb(0, 0, 0), + }) + if (i < napiVarazslatok.length) { + page.drawText(napiVarazslatok[i].toString(), { + x: 242, + y: y, + size: fontSizeBase, + font: pdfFont, + color: rgb(0, 0, 0), + }) + page.drawText(varazsMentokNF[i].toString(), { + x: 269, + y: y, + size: fontSizeBase, + font: pdfFont, + color: rgb(0, 0, 0), + }) + } + } +} + export async function CreatePDF(karakter: KarakterPdfView) { const existingPdfBytes = await fetch('/km_karakterlap_hysteria_1.2.pdf').then(res => res.arrayBuffer()) @@ -257,9 +286,9 @@ export async function CreatePDF(karakter: KarakterPdfView) { }) const kozelharciTB = karakter.KozelharciTB.map(SignedNumberToText).join("/") page.drawText(kozelharciTB, { - x: 254, + x: 256, y: kozelharciTB.length > 2 ? 386 : 382, - size: kozelharciTB.length > 2 ? fontSizeBase : fontSizeBase * 2, + size: kozelharciTB.length > 5 ? fontSizeBase * 0.5 : (kozelharciTB.length > 2 ? fontSizeBase : fontSizeBase * 2), font: pdfFont, color: rgb(0, 0, 0), }) @@ -278,6 +307,8 @@ export async function CreatePDF(karakter: KarakterPdfView) { const nextKepzettsegFrom = 337 - (karakter.Kepzettsegek.length * 18) DrawKepzettsegek(page, fontSizeBase, pdfFont, karakter.TolvajKepzettsegek, karakter.Tulajdonsagok, karakter.Szint, nextKepzettsegFrom) + DrawMagic(page, fontSizeBase, pdfFont, karakter.NapiMemorizalhatoVarazslatok, karakter.VarazslatMentokNF) + const pdfBytes = await pdfDoc.save(); download(pdfBytes, karakter.Name + ".pdf", "application/pdf"); } diff --git a/src/pdf/karakter_pdf_view.ts b/src/pdf/karakter_pdf_view.ts index 368735a..e446204 100644 --- a/src/pdf/karakter_pdf_view.ts +++ b/src/pdf/karakter_pdf_view.ts @@ -10,6 +10,7 @@ import {Faj} from "../domain-models/faj"; import {Osztaly} from "../domain-models/osztaly"; import {CelzoTB, KozelharciTB} from "../domain-models/tamadas_bonusz"; import {KarakterInputs} from "../domain-models/karakter"; +import {NapiVarazslatok, CalculateVarazslatMentokNF} from "../domain-models/memorizalt_varazslatok"; export interface KarakterPdfView { Name: string @@ -32,6 +33,8 @@ export interface KarakterPdfView { MentokModositokkal: Mentok Kepzettsegek: Kepzettseg[] TolvajKepzettsegek: Kepzettseg[] + NapiMemorizalhatoVarazslatok: number[] + VarazslatMentokNF : number[] } export function KarakterInputToPdfView(karakter: KarakterInputs): KarakterPdfView { @@ -45,6 +48,9 @@ export function KarakterInputToPdfView(karakter: KarakterInputs): KarakterPdfVie const mentok = MentokAlap(karakter.osztaly, karakter.szint) const mentoModositok = MentoModositok(tulajdonsagModositok) + const NapiMemorizalhatoVarazslatok = NapiVarazslatok(karakter) + const VarazslatMentokNF = CalculateVarazslatMentokNF(karakter) + return { Faj: karakter.faj, Isten: karakter.isten || "", @@ -67,6 +73,9 @@ export function KarakterInputToPdfView(karakter: KarakterInputs): KarakterPdfVie MentoModositok: mentoModositok, MentokAlap: mentok, - MentokModositokkal: masodlagosErtekek.Mentok + MentokModositokkal: masodlagosErtekek.Mentok, + + NapiMemorizalhatoVarazslatok, + VarazslatMentokNF, } }