mirror of
https://github.com/morbalint/kemkas.git
synced 2026-07-17 19:03:46 +00:00
feat: napi memorizalt varazslatok es varazslat mento NF
This commit is contained in:
@@ -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
|
||||
}
|
||||
@@ -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,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,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user