feat: napi memorizalt varazslatok es varazslat mento NF

This commit is contained in:
2023-09-25 01:03:23 +02:00
parent b1accb61d1
commit dc1b733e16
4 changed files with 105 additions and 3 deletions
@@ -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]
]
}
@@ -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<KarakterInputs, 'osztaly' | 'tulajdonsagok'>) : number {
const magicAbility = karakter.osztaly === Osztaly.Pap ? karakter.tulajdonsagok.t_bol : karakter.tulajdonsagok.t_int
return Modifier(magicAbility)
}
export function NapiVarazslatok(karakter: Pick<KarakterInputs, 'szint' | 'osztaly' | 'tulajdonsagok'>) : 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<KarakterInputs, 'osztaly' | 'tulajdonsagok'>): 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
}
+33 -2
View File
@@ -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");
}
+10 -1
View File
@@ -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,
}
}