diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml index ff6aef2..f24e134 100644 --- a/.idea/inspectionProfiles/Project_Default.xml +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -7,7 +7,6 @@ - diff --git a/src/components/Level2.tsx b/src/components/Level2.tsx index ecba087..3a0d1e6 100644 --- a/src/components/Level2.tsx +++ b/src/components/Level2.tsx @@ -42,7 +42,7 @@ function Level2(props: {
- +
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,