-
+
Math.max(1, hp + egeszsegModifier))
+ .reduce((sum, val) => sum + val, 0)
+}
+
+
+export function KarakterInputToPdfView(input: KarakterInputs): KarakterPdfView {
+ const tulajdonsagModositok = TulajdonsagModosito(input.tulajdonsagok)
+ const hp = HP(input.osztaly, tulajdonsagModositok.t_egs, input.HProlls)
+ const vo = 10 + tulajdonsagModositok.t_ugy // TODO: kaloz, amazon!
+ const mozgas = input.faj === Faj.Torpe ? 20 : 30
+ const kezdemenyezes = tulajdonsagModositok.t_ugy + (input.osztaly === Osztaly.Tolvaj ? 4 : 0)
+
+ const mentok = MentokAlap(input.osztaly, input.szint)
+ const mentoModositok = MentoModositok(tulajdonsagModositok)
+
+ return {
+ Faj: input.faj,
+ Isten: input.isten || "",
+ Kor: input.kor,
+ Name: input.name,
+ Nem: input.nem || "",
+ Tulajdonsagok: input.tulajdonsagok,
+ Osztaly: input.osztaly,
+ Szint: input.szint,
+ Kepzettsegek: input.kepzettsegek.map(id => Kepzettsegek[id]),
+ TolvajKepzettsegek: input.tolvajKepzettsegek?.map(id => Kepzettsegek[id]) || [],
+ TulajdonsagModositok: tulajdonsagModositok,
+
+ HP: hp,
+ VO: vo,
+ Mozgas: mozgas,
+ Kezdemenyezes: kezdemenyezes,
+ KozelharciTB: KozelharciTB(input),
+ CelzoTB: CelzoTB(input),
+
+ MentoModositok: mentoModositok,
+ MentokAlap: mentok,
+ MentokModositokkal: {
+ kitartas: mentok.kitartas + mentoModositok.kitartas,
+ akaratero: mentok.akaratero + mentoModositok.akaratero,
+ reflex: mentok.reflex + mentoModositok.reflex,
+ }
+ }
+}
+
+/// deprecated
export class KarakterClass implements Karakter {
public Name : string
diff --git a/src/domain-models/kockak.ts b/src/domain-models/kockak.ts
index b008c32..488ac47 100644
--- a/src/domain-models/kockak.ts
+++ b/src/domain-models/kockak.ts
@@ -1,8 +1,8 @@
-export function getRandomInt(max: number) {
- return Math.floor(Math.random() * max) + 1;
+export function dAny(sides: number) {
+ return Math.floor(Math.random() * sides) + 1;
}
export function d6() {
- return getRandomInt(6)
+ return dAny(6)
}
diff --git a/src/domain-models/mentok.ts b/src/domain-models/mentok.ts
index 180a0fe..d855923 100644
--- a/src/domain-models/mentok.ts
+++ b/src/domain-models/mentok.ts
@@ -1,3 +1,6 @@
+import {Osztaly} from "./osztaly";
+import {KarakterTulajdonsagok} from "./tulajdonsag";
+
export interface Mentok {
kitartas: number
reflex: number
@@ -6,19 +9,14 @@ export interface Mentok {
export type MentoTipus = keyof Mentok
export function MentoTipusLabel(tipus: MentoTipus): string {
- let label: string | null = null
switch (tipus) {
case "akaratero":
- label = "Akaraterő";
- break;
+ return "Akaraterő";
case "kitartas":
- label = "Kitartás";
- break;
+ return "Kitartás";
case "reflex":
- label = "Reflex";
- break;
+ return "Reflex";
}
- return label
}
export function ElsodlegesMento(szint: number): number {
@@ -27,4 +25,45 @@ export function ElsodlegesMento(szint: number): number {
export function MasodlagosMento(szint: number): number {
return Math.floor(szint / 3)
+}
+
+export function ElsodlegesMentok(osztaly: Osztaly) : MentoTipus[] {
+ let t: MentoTipus[] = []
+ switch (osztaly){
+ case Osztaly.Barbar:
+ case Osztaly.Amazon:
+ case Osztaly.Ijasz:
+ case Osztaly.Kaloz:
+ case Osztaly.Harcos:
+ t = ['kitartas'];
+ break;
+ case Osztaly.Pap:
+ t = ['kitartas', 'akaratero'];
+ break;
+ case Osztaly.Tolvaj:
+ t = ['reflex'];
+ break;
+ case Osztaly.Varazslo:
+ case Osztaly.Illuzionista:
+ t = ['akaratero']
+ break;
+ }
+ return t
+}
+
+export function MentokAlap(osztaly: Osztaly, szint: number = 1) {
+ const elsodlegesek = ElsodlegesMentok(osztaly)
+ return {
+ kitartas: elsodlegesek.includes('kitartas') ? ElsodlegesMento(szint) : MasodlagosMento(szint),
+ reflex: elsodlegesek.includes('reflex') ? ElsodlegesMento(szint) : MasodlagosMento(szint),
+ akaratero: elsodlegesek.includes('akaratero') ? ElsodlegesMento(szint) : MasodlagosMento(szint),
+ }
+}
+
+export function MentoModositok(tulajdonsagModositok: KarakterTulajdonsagok) {
+ return {
+ kitartas: tulajdonsagModositok.t_egs,
+ reflex: tulajdonsagModositok.t_ugy,
+ akaratero: tulajdonsagModositok.t_bol,
+ }
}
\ No newline at end of file
diff --git a/src/domain-models/tamadas_bonusz.ts b/src/domain-models/tamadas_bonusz.ts
new file mode 100644
index 0000000..31e3cb7
--- /dev/null
+++ b/src/domain-models/tamadas_bonusz.ts
@@ -0,0 +1,42 @@
+import {Osztaly} from "./osztaly";
+import TamadasBonuszTabla from "./tamadas_bonus_tabla.json";
+import {Modifier} from "./tulajdonsag";
+import {KarakterInputs} from "./karakter";
+
+export function TamadasBonusz(osztaly: Osztaly, szint: number = 1) : number[] {
+ let base = []
+ switch (osztaly){
+ case Osztaly.Barbar:
+ case Osztaly.Amazon:
+ case Osztaly.Ijasz:
+ case Osztaly.Kaloz:
+ case Osztaly.Harcos:
+ base = TamadasBonuszTabla['elsodleges'];
+ break;
+ case Osztaly.Pap:
+ case Osztaly.Tolvaj:
+ base = TamadasBonuszTabla['ketharmados'];
+ break;
+ case Osztaly.Varazslo:
+ case Osztaly.Illuzionista:
+ base = TamadasBonuszTabla['feles'];
+ break;
+ }
+ return base[szint-1]
+}
+
+export function KozelharciTB(karakter : Pick): number[] {
+ const base = TamadasBonusz(karakter.osztaly, karakter.szint);
+ let modifier = Modifier(karakter.tulajdonsagok.t_ero)
+ if (karakter.osztaly === Osztaly.Kaloz && karakter.tulajdonsagok.t_ugy > karakter.tulajdonsagok.t_ero) {
+ modifier = Modifier(karakter.tulajdonsagok.t_ugy)
+ }
+ return base.map(v => v + modifier)
+}
+export function CelzoTB(karakter : Pick): number[] {
+ let base = TamadasBonusz(karakter.osztaly, karakter.szint)
+ if (karakter.osztaly === Osztaly.Ijasz) {
+ base = [base[0], ...base]
+ }
+ return base.map(v => v + Modifier(karakter.tulajdonsagok.t_ugy))
+}
\ No newline at end of file
diff --git a/src/domain-models/tulajdonsag.ts b/src/domain-models/tulajdonsag.ts
index facc07c..c6cf945 100644
--- a/src/domain-models/tulajdonsag.ts
+++ b/src/domain-models/tulajdonsag.ts
@@ -53,7 +53,16 @@ export function RollAllAbilities(setValue: (newValue: KarakterTulajdonsagok) =>
export const Modifier = (val : number) => Math.floor(val / 3) - 3
-/* eslint-disable */ /* tslint:disable */
+export function TulajdonsagModosito(tulajdonsagok: KarakterTulajdonsagok): KarakterTulajdonsagok {
+ let response: KarakterTulajdonsagok = { ...tulajdonsagok }
+ const keys = Object.keys(tulajdonsagok) as (keyof KarakterTulajdonsagok)[]
+ for (const key of keys) {
+ response[key] = Modifier(tulajdonsagok[key])
+ }
+ return response
+}
+
+// noinspection OverlyComplexFunctionJS,FunctionTooLongJS
function tulajdonsagModositokPerFaj(tul: Tulajdonsag, faj: Faj) : number {
switch (faj) {
case Faj.Birodalmi: switch (tul) {
diff --git a/src/pages/CreateCharacter.tsx b/src/pages/CreateCharacter.tsx
index ad47cfa..7e6d6f2 100644
--- a/src/pages/CreateCharacter.tsx
+++ b/src/pages/CreateCharacter.tsx
@@ -10,9 +10,9 @@ import {KarakterTulajdonsagok, Modifier} from "../domain-models/tulajdonsag";
import MasodlagosErtekek from "../components/MasodlagosErtekek";
import {AvailableKezpettsegList, TolvajKepzettsegList} from "../domain-models/kepzettsegek";
import {CreatePDF} from "../pdf/character.pdf";
-import {KarakterClass, KarakterInputs} from "../domain-models/karakter";
+import {KarakterClass, KarakterInputs, KarakterInputToPdfView} from "../domain-models/karakter";
import Level2 from "../components/Level2";
-import {getRandomInt} from "../domain-models/kockak";
+import {dAny} from "../domain-models/kockak";
const tulajdonsagDefaults: KarakterTulajdonsagok = {
t_ero: 10,
@@ -65,7 +65,7 @@ function CreateCharacterPage() {
function levelUp() {
const dice = karakterClass.baseHP()
- const roll = getRandomInt(dice)
+ const roll = dAny(dice)
console.log(`Level 2 HP roll on d${dice} is: ${roll}`)
changeKarakter({...karakter, szint: karakter.szint + 1, HProlls: [...karakter.HProlls, roll]})
}
@@ -154,7 +154,7 @@ function CreateCharacterPage() {
-
+
diff --git a/src/pdf/character.pdf.ts b/src/pdf/character.pdf.ts
index 7f35288..9729bfb 100644
--- a/src/pdf/character.pdf.ts
+++ b/src/pdf/character.pdf.ts
@@ -1,4 +1,4 @@
-import {Karakter} from "../domain-models/karakter";
+import {KarakterPdfView} from "../domain-models/karakter";
import {PDFDocument, PDFFont, PDFPage, rgb} from "pdf-lib";
import fontkit from '@pdf-lib/fontkit'
import {OsztalyLabel} from "../domain-models/osztaly";
@@ -95,8 +95,8 @@ function drawTulajdonsagok(page: PDFPage, tulajdonsagok: KarakterTulajdonsagok,
})
}
-function drawMentok(page: PDFPage, karakter: Karakter, fontSizeBase: number, pdfFont: PDFFont) {
- const mentokAlap = karakter.MentokAlap()
+function drawMentok(page: PDFPage, karakter: KarakterPdfView, fontSizeBase: number, pdfFont: PDFFont) {
+ const mentokAlap = karakter.MentokAlap
page.drawText(SignedNumberToText(mentokAlap.kitartas), {
x: 435,
y: 613,
@@ -139,7 +139,7 @@ function drawMentok(page: PDFPage, karakter: Karakter, fontSizeBase: number, pdf
font: pdfFont,
color: rgb(0, 0, 0),
})
- const mentok = karakter.MentokTulajdonsaggal()
+ const mentok = karakter.MentokModositokkal
page.drawText(SignedNumberToText(mentok.kitartas), {
x: 515,
y: 613,
@@ -163,7 +163,7 @@ function drawMentok(page: PDFPage, karakter: Karakter, fontSizeBase: number, pdf
})
}
-function drawBaseInfo(karakter: Karakter, draw: (text: string, x : number ,y: number, scale: number) => void) {
+function drawBaseInfo(karakter: KarakterPdfView, draw: (text: string, x : number ,y: number, scale: number) => void) {
draw(karakter.Name, 60, 710, 1)
draw(karakter.Nem, 454, 710, 1)
draw(karakter.Kor.toString(), 454, 690, 1)
@@ -200,7 +200,7 @@ function DrawKepzettsegek(page: PDFPage, fontSizeBase: number, pdfFont: PDFFont,
}
}
-export async function CreatePDF(karakter: Karakter) {
+export async function CreatePDF(karakter: KarakterPdfView) {
const existingPdfBytes = await fetch('/km_karakterlap_hysteria_1.2.pdf').then(res => res.arrayBuffer())
const pdfDoc = await PDFDocument.load(existingPdfBytes)
@@ -227,35 +227,35 @@ export async function CreatePDF(karakter: Karakter) {
drawTulajdonsagok(page, karakter.Tulajdonsagok, fontSizeBase, pdfFont);
- page.drawText(karakter.Mozgas().toString(), {
+ page.drawText(karakter.Mozgas.toString(), {
x: 162,
y: 416,
size: fontSizeBase * 2,
font: pdfFont,
color: rgb(0, 0, 0),
})
- page.drawText(SignedNumberToText(karakter.Kezdemenyezes()), {
+ page.drawText(SignedNumberToText(karakter.Kezdemenyezes), {
x: 505,
y: 416,
size: fontSizeBase * 2,
font: pdfFont,
color: rgb(0, 0, 0),
})
- page.drawText(karakter.HP().toString(), {
+ page.drawText(karakter.HP.toString(), {
x: 318,
y: 517,
size: fontSizeBase * 1.5,
font: pdfFont,
color: rgb(0, 0, 0),
})
- page.drawText(karakter.VO().toString(), {
+ page.drawText(karakter.VO.toString(), {
x: 368,
y: 495,
size: fontSizeBase * 3,
font: pdfFont,
color: rgb(0.75, 0.75, 0.75),
})
- const kozelharciTB = karakter.KozelharciTB().map(SignedNumberToText).join("/")
+ const kozelharciTB = karakter.KozelharciTB.map(SignedNumberToText).join("/")
page.drawText(kozelharciTB, {
x: 254,
y: kozelharciTB.length > 2 ? 386 : 382,
@@ -263,7 +263,7 @@ export async function CreatePDF(karakter: Karakter) {
font: pdfFont,
color: rgb(0, 0, 0),
})
- const celzoTB = karakter.CelzoTB().map(SignedNumberToText).join("/")
+ const celzoTB = karakter.CelzoTB.map(SignedNumberToText).join("/")
page.drawText(celzoTB, {
x: 344,
y: celzoTB.length > 2 ? 386 : 382,