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) {
|
export async function CreatePDF(karakter: KarakterPdfView) {
|
||||||
|
|
||||||
const existingPdfBytes = await fetch('/km_karakterlap_hysteria_1.2.pdf').then(res => res.arrayBuffer())
|
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("/")
|
const kozelharciTB = karakter.KozelharciTB.map(SignedNumberToText).join("/")
|
||||||
page.drawText(kozelharciTB, {
|
page.drawText(kozelharciTB, {
|
||||||
x: 254,
|
x: 256,
|
||||||
y: kozelharciTB.length > 2 ? 386 : 382,
|
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,
|
font: pdfFont,
|
||||||
color: rgb(0, 0, 0),
|
color: rgb(0, 0, 0),
|
||||||
})
|
})
|
||||||
@@ -278,6 +307,8 @@ export async function CreatePDF(karakter: KarakterPdfView) {
|
|||||||
const nextKepzettsegFrom = 337 - (karakter.Kepzettsegek.length * 18)
|
const nextKepzettsegFrom = 337 - (karakter.Kepzettsegek.length * 18)
|
||||||
DrawKepzettsegek(page, fontSizeBase, pdfFont, karakter.TolvajKepzettsegek, karakter.Tulajdonsagok, karakter.Szint, nextKepzettsegFrom)
|
DrawKepzettsegek(page, fontSizeBase, pdfFont, karakter.TolvajKepzettsegek, karakter.Tulajdonsagok, karakter.Szint, nextKepzettsegFrom)
|
||||||
|
|
||||||
|
DrawMagic(page, fontSizeBase, pdfFont, karakter.NapiMemorizalhatoVarazslatok, karakter.VarazslatMentokNF)
|
||||||
|
|
||||||
const pdfBytes = await pdfDoc.save();
|
const pdfBytes = await pdfDoc.save();
|
||||||
download(pdfBytes, karakter.Name + ".pdf", "application/pdf");
|
download(pdfBytes, karakter.Name + ".pdf", "application/pdf");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import {Faj} from "../domain-models/faj";
|
|||||||
import {Osztaly} from "../domain-models/osztaly";
|
import {Osztaly} from "../domain-models/osztaly";
|
||||||
import {CelzoTB, KozelharciTB} from "../domain-models/tamadas_bonusz";
|
import {CelzoTB, KozelharciTB} from "../domain-models/tamadas_bonusz";
|
||||||
import {KarakterInputs} from "../domain-models/karakter";
|
import {KarakterInputs} from "../domain-models/karakter";
|
||||||
|
import {NapiVarazslatok, CalculateVarazslatMentokNF} from "../domain-models/memorizalt_varazslatok";
|
||||||
|
|
||||||
export interface KarakterPdfView {
|
export interface KarakterPdfView {
|
||||||
Name: string
|
Name: string
|
||||||
@@ -32,6 +33,8 @@ export interface KarakterPdfView {
|
|||||||
MentokModositokkal: Mentok
|
MentokModositokkal: Mentok
|
||||||
Kepzettsegek: Kepzettseg[]
|
Kepzettsegek: Kepzettseg[]
|
||||||
TolvajKepzettsegek: Kepzettseg[]
|
TolvajKepzettsegek: Kepzettseg[]
|
||||||
|
NapiMemorizalhatoVarazslatok: number[]
|
||||||
|
VarazslatMentokNF : number[]
|
||||||
}
|
}
|
||||||
|
|
||||||
export function KarakterInputToPdfView(karakter: KarakterInputs): KarakterPdfView {
|
export function KarakterInputToPdfView(karakter: KarakterInputs): KarakterPdfView {
|
||||||
@@ -45,6 +48,9 @@ export function KarakterInputToPdfView(karakter: KarakterInputs): KarakterPdfVie
|
|||||||
const mentok = MentokAlap(karakter.osztaly, karakter.szint)
|
const mentok = MentokAlap(karakter.osztaly, karakter.szint)
|
||||||
const mentoModositok = MentoModositok(tulajdonsagModositok)
|
const mentoModositok = MentoModositok(tulajdonsagModositok)
|
||||||
|
|
||||||
|
const NapiMemorizalhatoVarazslatok = NapiVarazslatok(karakter)
|
||||||
|
const VarazslatMentokNF = CalculateVarazslatMentokNF(karakter)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
Faj: karakter.faj,
|
Faj: karakter.faj,
|
||||||
Isten: karakter.isten || "",
|
Isten: karakter.isten || "",
|
||||||
@@ -67,6 +73,9 @@ export function KarakterInputToPdfView(karakter: KarakterInputs): KarakterPdfVie
|
|||||||
|
|
||||||
MentoModositok: mentoModositok,
|
MentoModositok: mentoModositok,
|
||||||
MentokAlap: mentok,
|
MentokAlap: mentok,
|
||||||
MentokModositokkal: masodlagosErtekek.Mentok
|
MentokModositokkal: masodlagosErtekek.Mentok,
|
||||||
|
|
||||||
|
NapiMemorizalhatoVarazslatok,
|
||||||
|
VarazslatMentokNF,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user