-
+
changeRolledHP(Number(e.target.value))} />
@@ -65,11 +66,11 @@ function Level2(props: {
- {karakterClass.HP()}
+ {HP(karakter)}
- {karakterClass.TamadasBonusz().map(SignedNumberToText).join("/")}
+ {TamadasBonusz(karakter.osztaly, karakter.szint).map(SignedNumberToText).join("/")}
diff --git a/src/components/MasodlagosErtekek.tsx b/src/components/MasodlagosErtekek.tsx
index f43190e..bafd558 100644
--- a/src/components/MasodlagosErtekek.tsx
+++ b/src/components/MasodlagosErtekek.tsx
@@ -1,19 +1,18 @@
import React from "react";
import {OverlayTrigger, Tooltip} from "react-bootstrap";
import {SignedNumberToText} from "./Helpers";
-import {Karakter} from "../domain-models/karakter";
+import {MasodlagosErtekekView} from "../domain-models/masodlagos_ertekek";
+function MasodlagosErtekek(props: MasodlagosErtekekView) {
-function MasodlagosErtekek(props: {karakter: Karakter}) {
-
- const { karakter } = props
+ const { HP, VO, CelzoTB, Mentok, KozelharciTB } = props
const tooltip = (
Hentelési Potenciál
);
- const mentok = karakter.MentokTulajdonsaggal(1)
+ //const mentok = karakter.MentokTulajdonsaggal(1)
return <>
@@ -27,33 +26,33 @@ function MasodlagosErtekek(props: {karakter: Karakter}) {
(HP)
-
{karakter.HP()}
+
{HP}
-
{karakter.VO()}
+
{VO}
-
{SignedNumberToText(karakter.KozelharciTB(1)[0])}
+
{KozelharciTB.map(SignedNumberToText).join(" / ")}
-
{SignedNumberToText(karakter.CelzoTB(1)[0])}
+
{CelzoTB.map(SignedNumberToText).join(" / ")}
-
{SignedNumberToText(mentok.kitartas)}
+
{SignedNumberToText(Mentok.kitartas)}
-
{SignedNumberToText(mentok.reflex)}
+
{SignedNumberToText(Mentok.reflex)}
-
{SignedNumberToText(mentok.akaratero)}
+
{SignedNumberToText(Mentok.akaratero)}
diff --git a/src/components/Tulajdonsagok.tsx b/src/components/Tulajdonsagok.tsx
index 197d4c6..ecd6a86 100644
--- a/src/components/Tulajdonsagok.tsx
+++ b/src/components/Tulajdonsagok.tsx
@@ -19,7 +19,7 @@ function Tulajdonsagok(props: {
Tulajdonságok
diff --git a/src/domain-models/faj.ts b/src/domain-models/faj.ts
index c5a09a7..15e0a9a 100644
--- a/src/domain-models/faj.ts
+++ b/src/domain-models/faj.ts
@@ -81,12 +81,12 @@ export function FajSpecials(faj : Faj) : string[] {
case Faj.Elf: return [
"+1 Ügy, -1 Egs",
"Immunisak az altató mágiára, +2 mentődobás bűbáj ellen",
- "Automatikusan képzettek az íjak és a hoszszúkard használatában akkor is, ha osztályuk ezt nem adná meg nekik",
+ "Automatikusan képzettek az íjak és a hosszúkard használatában akkor is, ha osztályuk ezt nem adná meg nekik",
"Nem támaszthatók föl közönséges mágiával",
"Szintkorlátok: Harcos 9, Pap 7, Tolvaj 6, Varázsló 9",
];
case Faj.Felelf: return [
- "Automatikusan képzettek az íjak és a hoszszúkard használatában",
+ "Automatikusan képzettek az íjak és a hosszúkard használatában",
"Szintkorlátok: Harcos 9, Pap 5, Tolvaj 9, Varázsló 9",
];
case Faj.Felork: return [
diff --git a/src/domain-models/karakter.ts b/src/domain-models/karakter.ts
index e4d97ec..db0fa93 100644
--- a/src/domain-models/karakter.ts
+++ b/src/domain-models/karakter.ts
@@ -1,55 +1,7 @@
import {Faj} from "./faj";
import {Osztaly} from "./osztaly";
-import {KarakterTulajdonsagok, Modifier, TulajdonsagModosito} from "./tulajdonsag";
-import {Kepzettseg, Kepzettsegek, KepzettsegId} from "./kepzettsegek";
-import TamadasBonuszTabla from './tamadas_bonus_tabla.json';
-import {ElsodlegesMento, MasodlagosMento, Mentok, MentokAlap, MentoModositok, MentoTipus} from "./mentok";
-import {CelzoTB, KozelharciTB} from "./tamadas_bonusz";
-
-export interface Karakter {
- Name: string
- Nem: string
- Kor: number
- Isten: string
- Faj: Faj
- Osztaly: Osztaly
- Tulajdonsagok: KarakterTulajdonsagok,
- Szint: number
- HP: () => number
- VO: () => number
- Mozgas: () => number
- Kezdemenyezes: () => number
- KozelharciTB: (szint?: number) => number[]
- CelzoTB: (szint?: number) => number[]
- ElsodlegesMentok: () => MentoTipus[]
- MentokAlap: (szint?: number) => Mentok
- MentokTulajdonsaggal: (szint?: number) => Mentok
- Kepzettsegek: Kepzettseg[]
- TolvajKepzettsegek: Kepzettseg[]
-}
-
-export interface KarakterPdfView {
- Name: string
- Nem: string
- Kor: number
- Isten: string
- Faj: Faj
- Osztaly: Osztaly
- Tulajdonsagok: KarakterTulajdonsagok,
- TulajdonsagModositok: KarakterTulajdonsagok,
- Szint: number
- HP: number
- VO: number
- Mozgas: number
- Kezdemenyezes: number
- KozelharciTB: number[]
- CelzoTB: number[]
- MentokAlap: Mentok
- MentoModositok: Mentok
- MentokModositokkal: Mentok
- Kepzettsegek: Kepzettseg[]
- TolvajKepzettsegek: Kepzettseg[]
-}
+import {KarakterTulajdonsagok, TulajdonsagDefaults} from "./tulajdonsag";
+import {KepzettsegId} from "./kepzettsegek";
export interface KarakterInputs {
name: string,
@@ -65,226 +17,14 @@ export interface KarakterInputs {
HProlls: number[],
}
-function BaseHP(osztaly: Osztaly) {
- let base = 4;
- switch (osztaly){
- case Osztaly.Barbar:
- base = 12
- break;
- case Osztaly.Amazon:
- case Osztaly.Ijasz:
- case Osztaly.Kaloz:
- case Osztaly.Harcos:
- base = 10;
- break
- case Osztaly.Pap:
- base = 8;
- break;
- case Osztaly.Tolvaj:
- base = 6;
- break;
- case Osztaly.Varazslo:
- case Osztaly.Illuzionista:
- base = 4;
- break;
- }
- return base
+export const KarakterDefaults: KarakterInputs = {
+ name: "Névtelen Kalandozó",
+ faj: Faj.Ember,
+ kor: 20,
+ tulajdonsagok: TulajdonsagDefaults,
+ osztaly: Osztaly.Harcos,
+ kepzettsegek: [],
+ szint: 1,
+ HProlls: [],
}
-export function HP(osztaly: Osztaly, egeszsegModifier: number, hpRolls: number[]): number {
- return BaseHP(osztaly) + egeszsegModifier + hpRolls
- // https://lfg.hu/forum/topic/15079-kard-es-magia/page/219/#comment-2218333
- .map(hp => 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
- public Nem : string
- public Kor : number
- public Isten : string
- public Faj : Faj
- public Osztaly : Osztaly
- public Tulajdonsagok : KarakterTulajdonsagok
- public Szint : number = 1
- public Kepzettsegek: Kepzettseg[]
- public TolvajKepzettsegek: Kepzettseg[]
-
- private HProlls: number[]
-
- constructor(inputs: KarakterInputs) {
- this.Name = inputs.name
- this.Nem = inputs.nem || ""
- this.Kor = inputs.kor
- this.Isten = inputs.isten || ""
- this.Faj = inputs.faj
- this.Osztaly = inputs.osztaly
- this.Tulajdonsagok = inputs.tulajdonsagok
- this.Kepzettsegek = inputs.kepzettsegek.map(k => Kepzettsegek[k])
- this.TolvajKepzettsegek = (inputs.tolvajKepzettsegek || []).map(k => Kepzettsegek[k])
- this.Szint = Math.min(Math.max(1,inputs.szint), 20)
- this.HProlls = inputs.HProlls
- }
-
- public HP = () => this.baseHP() + Modifier(this.Tulajdonsagok.t_egs) + this.HProlls
- // https://lfg.hu/forum/topic/15079-kard-es-magia/page/219/#comment-2218333
- .map(hp => Math.max(1, hp + Modifier(this.Tulajdonsagok.t_egs)))
- .reduce((sum, val) => sum + val, 0)
-
- public VO = () => 10 + Modifier(this.Tulajdonsagok.t_ugy)
-
- public Mozgas = () => this.Faj === Faj.Torpe ? 20 : 30
-
- public Kezdemenyezes() : number {
- return Modifier(this.Tulajdonsagok.t_ugy) + (this.Osztaly === Osztaly.Tolvaj ? 4 : 0)
- }
-
- public TamadasBonusz(szint: number = this.Szint) : number[] {
- let base = []
- switch (this.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]
- }
-
- public KozelharciTB(szint: number = this.Szint): number[] {
- const base = this.TamadasBonusz(szint);
- let modifier = Modifier(this.Tulajdonsagok.t_ero)
- if (this.Osztaly === Osztaly.Kaloz && this.Tulajdonsagok.t_ugy > this.Tulajdonsagok.t_ero) {
- modifier = Modifier(this.Tulajdonsagok.t_ugy)
- }
- return base.map(v => v + modifier)
- }
- public CelzoTB(szint: number = this.Szint): number[] {
- let base = this.TamadasBonusz(szint)
- if (this.Osztaly === Osztaly.Ijasz) {
- base = [base[0], ...base]
- }
- return base.map(v => v + Modifier(this.Tulajdonsagok.t_ugy))
- }
-
- public ElsodlegesMentok() : MentoTipus[] {
- let t: MentoTipus[] = []
- switch (this.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
- }
-
- public MentokAlap(szint: number = this.Szint) {
- const elsodlegesek = this.ElsodlegesMentok()
- 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),
- }
- }
-
- public MentokTulajdonsaggal(szint: number = this.Szint) {
- const mentok = this.MentokAlap(szint)
- return {
- kitartas: mentok.kitartas + Modifier(this.Tulajdonsagok.t_egs),
- reflex: mentok.reflex + Modifier(this.Tulajdonsagok.t_ugy),
- akaratero: mentok.akaratero + Modifier(this.Tulajdonsagok.t_bol),
- }
- }
-
- public baseHP() {
- let base = 4;
- switch (this.Osztaly){
- case Osztaly.Barbar:
- base = 12
- break;
- case Osztaly.Amazon:
- case Osztaly.Ijasz:
- case Osztaly.Kaloz:
- case Osztaly.Harcos:
- base = 10;
- break
- case Osztaly.Pap:
- base = 8;
- break;
- case Osztaly.Tolvaj:
- base = 6;
- break;
- case Osztaly.Varazslo:
- case Osztaly.Illuzionista:
- base = 4;
- break;
- }
- return base
- }
-}
\ No newline at end of file
diff --git a/src/domain-models/kepzettsegek.ts b/src/domain-models/kepzettsegek.ts
index 8c246cb..26ea770 100644
--- a/src/domain-models/kepzettsegek.ts
+++ b/src/domain-models/kepzettsegek.ts
@@ -1,5 +1,9 @@
-import {Tulajdonsag} from "./tulajdonsag";
+import {Modifier, Tulajdonsag} from "./tulajdonsag";
import {Osztaly} from "./osztaly";
+import {Faj} from "./faj";
+import {KarakterInputs} from "./karakter";
+import karakterKepzettsegek from "../components/KarakterKepzettsegek";
+import tulajdonsagok from "../components/Tulajdonsagok";
export type KepzettsegId = 'k_alkimia' | 'k_alcazas' | 'k_allatidomitas' | 'k_csapdak' | 'k_csillagjoslas' | 'k_egyensulyozas' | 'k_eloadas' | 'k_ertekbecsles' | 'k_gyogyitas' | 'k_hajozas' | 'k_hallgatozas' | 'k_hamisitas' | 'k_jelek_olvasasa' | 'k_koncentracio' | 'k_lovaglas' | 'k_maszas' | 'k_megfigyeles' | 'k_meregkeveres' | 'k_mesterseg' | 'k_nyomkereses' | 'k_osonas' | 'k_rejtozes' | 'k_szabadulomuveszet' | 'k_tudas' | 'k_ugras' | 'k_uszas' | 'k_varazslatismeret' | 'k_zarnyitas' | 'k_zsebmetszes'
@@ -210,4 +214,51 @@ export const Kepzettsegek: Record
=
export function AvailableKezpettsegList(osztaly: Osztaly): Kepzettseg[] {
return KepzettsegLista.filter(k => k.Osztalyok == null || k.Osztalyok.includes(osztaly))
+}
+
+export function GetNumberOfKepzettsegek(t_int: number, faj: Faj, max: number) {
+ let numberOfKepzettseg = 3 + Modifier(t_int) + (faj === Faj.Ember ? 1 : 0)
+ console.log('Raw Number of Kepzetsegek = ', numberOfKepzettseg)
+
+ if (numberOfKepzettseg < 1) {
+ numberOfKepzettseg = 1
+ }
+ if (numberOfKepzettseg > max) {
+ numberOfKepzettseg = max
+ }
+ console.log('Adjusted Number of Kepzetsegek = ', numberOfKepzettseg)
+ return numberOfKepzettseg;
+}
+
+export function SetDefaultTolvajKepzettsegek(karakter: Pick, changeTolvajKepzettsegek: (tolvajKepzettsegek?: KepzettsegId[]) => void) {
+ if (karakter.osztaly !== Osztaly.Tolvaj && karakter.tolvajKepzettsegek != null) {
+ changeTolvajKepzettsegek(undefined)
+ }
+ if (karakter.osztaly === Osztaly.Tolvaj && (karakter.tolvajKepzettsegek == null || karakter.tolvajKepzettsegek.length === 0)) {
+ const tolvajKepzettsegek = TolvajKepzettsegList.slice(0, 4).map(x => x.Id)
+ changeTolvajKepzettsegek(tolvajKepzettsegek)
+ }
+}
+
+export function SetDefaultKepzettsegek(karakter: Pick, changeKepzettsegek: (k: KepzettsegId[]) => void) {
+ const availableKepzettsegList = AvailableKezpettsegList(karakter.osztaly)
+ const numberOfKepzettsegek = GetNumberOfKepzettsegek(karakter.tulajdonsagok.t_int, karakter.faj, availableKepzettsegList.length)
+ let kepzettsegek = karakter.kepzettsegek
+ const getKepzettsegListaN = (n: number) => {
+ const kepzettsegekWithoutN = [...kepzettsegek.slice(0, n), ...kepzettsegek.slice(n+1)]
+ return availableKepzettsegList.filter(x => !kepzettsegekWithoutN.includes(x.Id) && !karakter.tolvajKepzettsegek?.includes(x.Id))
+ }
+ if (kepzettsegek.length < numberOfKepzettsegek) {
+ for (let i = kepzettsegek.length; i < numberOfKepzettsegek; i++) {
+ const kepzettsegLista = getKepzettsegListaN(i)
+ if (kepzettsegLista.length > 0) {
+ kepzettsegek.push(kepzettsegLista[0].Id)
+ }
+ }
+ changeKepzettsegek(kepzettsegek)
+ }
+ if (kepzettsegek.length > numberOfKepzettsegek){
+ kepzettsegek = kepzettsegek.slice(0, numberOfKepzettsegek)
+ changeKepzettsegek(kepzettsegek)
+ }
}
\ No newline at end of file
diff --git a/src/domain-models/masodlagos_ertekek.ts b/src/domain-models/masodlagos_ertekek.ts
new file mode 100644
index 0000000..9172222
--- /dev/null
+++ b/src/domain-models/masodlagos_ertekek.ts
@@ -0,0 +1,63 @@
+import {Mentok, MentokTotal} from "./mentok";
+import {Osztaly} from "./osztaly";
+import {KarakterInputs} from "./karakter";
+import {Modifier} from "./tulajdonsag";
+import {CelzoTB, KozelharciTB} from "./tamadas_bonusz";
+
+export interface MasodlagosErtekekView {
+ HP: number
+ VO: number
+ KozelharciTB: number[]
+ CelzoTB: number[]
+ Mentok: Mentok
+}
+
+export type KarakterpickForMasodlagosErtekek = Pick
+
+export function BaseHP(osztaly: Osztaly) {
+ let base = 4;
+ switch (osztaly){
+ case Osztaly.Barbar:
+ base = 12
+ break;
+ case Osztaly.Amazon:
+ case Osztaly.Ijasz:
+ case Osztaly.Kaloz:
+ case Osztaly.Harcos:
+ base = 10;
+ break
+ case Osztaly.Pap:
+ base = 8;
+ break;
+ case Osztaly.Tolvaj:
+ base = 6;
+ break;
+ case Osztaly.Varazslo:
+ case Osztaly.Illuzionista:
+ base = 4;
+ break;
+ }
+ return base
+}
+
+export function HP(karakter: Pick): number {
+ const egeszsegModifier = Modifier(karakter.tulajdonsagok.t_egs)
+ return BaseHP(karakter.osztaly) + egeszsegModifier + karakter.HProlls
+ // https://lfg.hu/forum/topic/15079-kard-es-magia/page/219/#comment-2218333
+ .map(hp => Math.max(1, hp + egeszsegModifier))
+ .reduce((sum, val) => sum + val, 0)
+}
+
+export function VO(karakter: Pick): number {
+ return 10 + Modifier(karakter.tulajdonsagok.t_ugy) // TODO: Kaloz, Amazon
+}
+
+export function CalculateMasodlagosErtekek(karakter: KarakterpickForMasodlagosErtekek): MasodlagosErtekekView {
+ return {
+ HP: HP(karakter),
+ VO: VO(karakter),
+ CelzoTB: CelzoTB(karakter),
+ KozelharciTB: KozelharciTB(karakter),
+ Mentok: MentokTotal(karakter)
+ }
+}
\ No newline at end of file
diff --git a/src/domain-models/mentok.ts b/src/domain-models/mentok.ts
index d855923..c623bf2 100644
--- a/src/domain-models/mentok.ts
+++ b/src/domain-models/mentok.ts
@@ -1,5 +1,6 @@
import {Osztaly} from "./osztaly";
-import {KarakterTulajdonsagok} from "./tulajdonsag";
+import {KarakterTulajdonsagok, TulajdonsagModosito} from "./tulajdonsag";
+import {KarakterInputs} from "./karakter";
export interface Mentok {
kitartas: number
@@ -66,4 +67,14 @@ export function MentoModositok(tulajdonsagModositok: KarakterTulajdonsagok) {
reflex: tulajdonsagModositok.t_ugy,
akaratero: tulajdonsagModositok.t_bol,
}
+}
+
+export function MentokTotal(karakter: Pick) {
+ const alap = MentokAlap(karakter.osztaly, karakter.szint)
+ const modositok = MentoModositok(TulajdonsagModosito(karakter.tulajdonsagok))
+ return {
+ kitartas: alap.kitartas + modositok.kitartas,
+ reflex: alap.kitartas + modositok.kitartas,
+ akaratero: alap.akaratero + modositok.akaratero,
+ }
}
\ No newline at end of file
diff --git a/src/domain-models/tulajdonsag.ts b/src/domain-models/tulajdonsag.ts
index c6cf945..691b91f 100644
--- a/src/domain-models/tulajdonsag.ts
+++ b/src/domain-models/tulajdonsag.ts
@@ -12,6 +12,15 @@ export enum Tulajdonsag {
export type KarakterTulajdonsagok = Record
+export const TulajdonsagDefaults: KarakterTulajdonsagok = {
+ t_ero: 10,
+ t_ugy: 10,
+ t_egs: 10,
+ t_int: 10,
+ t_bol: 10,
+ t_kar: 10,
+}
+
export function TulajdonsagLabel(tul: Tulajdonsag) : string {
switch (tul) {
case Tulajdonsag.Bolcsesseg: return 'Bölcsesség';
@@ -33,22 +42,22 @@ function rollAbility() {
min = roll;
}
sum += roll;
- rolls = [...rolls, roll]
+ rolls.push(roll)
}
const result = sum - min;
console.log("Rolled: " + rolls + " got: " + result)
return result;
}
-export function RollAllAbilities(setValue: (newValue: KarakterTulajdonsagok) => void) {
- setValue({
+export function RollAllAbilities() : KarakterTulajdonsagok {
+ return {
t_ero: rollAbility(),
t_ugy: rollAbility(),
t_egs: rollAbility(),
t_int: rollAbility(),
t_bol: rollAbility(),
t_kar: rollAbility(),
- })
+ }
}
export const Modifier = (val : number) => Math.floor(val / 3) - 3
diff --git a/src/pages/CreateCharacter.tsx b/src/pages/CreateCharacter.tsx
index 7e6d6f2..c77e0bd 100644
--- a/src/pages/CreateCharacter.tsx
+++ b/src/pages/CreateCharacter.tsx
@@ -6,68 +6,35 @@ import FajSelector from "../components/FajSelector";
import Tulajdonsagok from "../components/Tulajdonsagok";
import OsztalySelector from "../components/OsztalySelector";
import KarakterKepzettsegek from "../components/KarakterKepzettsegek";
-import {KarakterTulajdonsagok, Modifier} from "../domain-models/tulajdonsag";
+import {KarakterTulajdonsagok} from "../domain-models/tulajdonsag";
import MasodlagosErtekek from "../components/MasodlagosErtekek";
-import {AvailableKezpettsegList, TolvajKepzettsegList} from "../domain-models/kepzettsegek";
+import {
+ AvailableKezpettsegList,
+ GetNumberOfKepzettsegek, KepzettsegId, SetDefaultKepzettsegek,
+ SetDefaultTolvajKepzettsegek,
+} from "../domain-models/kepzettsegek";
import {CreatePDF} from "../pdf/character.pdf";
-import {KarakterClass, KarakterInputs, KarakterInputToPdfView} from "../domain-models/karakter";
+import {KarakterDefaults} from "../domain-models/karakter";
import Level2 from "../components/Level2";
import {dAny} from "../domain-models/kockak";
-
-const tulajdonsagDefaults: KarakterTulajdonsagok = {
- t_ero: 10,
- t_ugy: 10,
- t_egs: 10,
- t_int: 10,
- t_bol: 10,
- t_kar: 10,
-}
-
-const karakterDefaults: KarakterInputs = {
- name: "Névtelen Kalandozó",
- faj: Faj.Ember,
- kor: 20,
- tulajdonsagok: tulajdonsagDefaults,
- osztaly: Osztaly.Harcos,
- kepzettsegek: [],
- szint: 1,
- HProlls: [],
-}
-
-function getNumberOfKepzettsegek(t_int: number, faj: Faj, max: number) {
- let numberOfKepzettseg = 3 + Modifier(t_int) + (faj === Faj.Ember ? 1 : 0)
- console.log('Raw Number of Kepzetsegek = ', numberOfKepzettseg)
-
- if (numberOfKepzettseg < 1) {
- numberOfKepzettseg = 1
- }
- if (numberOfKepzettseg > max) {
- numberOfKepzettseg = max
- }
- console.log('Adjusted Number of Kepzetsegek = ', numberOfKepzettseg)
- return numberOfKepzettseg;
-}
+import {BaseHP, CalculateMasodlagosErtekek} from "../domain-models/masodlagos_ertekek";
+import {KarakterInputToPdfView} from "../pdf/karakter_pdf_view";
function CreateCharacterPage() {
- let [karakter, changeKarakter] = useState(karakterDefaults)
- const karakterClass = new KarakterClass(karakter)
+ let [karakter, changeKarakter] = useState(KarakterDefaults)
+
+ SetDefaultTolvajKepzettsegek(karakter, (tk) => changeKarakter({...karakter, tolvajKepzettsegek: tk}))
+ SetDefaultKepzettsegek(karakter, (k: KepzettsegId[]) => changeKarakter({...karakter, kepzettsegek: k}))
const availableKepzettsegList = AvailableKezpettsegList(karakter.osztaly)
- if (karakter.osztaly !== Osztaly.Tolvaj && karakter.tolvajKepzettsegek != null) {
- changeKarakter({...karakter, tolvajKepzettsegek: undefined})
- }
- if (karakter.osztaly === Osztaly.Tolvaj && (karakter.tolvajKepzettsegek == null || karakter.tolvajKepzettsegek.length === 0)) {
- const tolvajKepzettsegek = TolvajKepzettsegList.slice(0, 4).map(x => x.Id)
- changeKarakter({...karakter, tolvajKepzettsegek: tolvajKepzettsegek})
- }
-
function levelUp() {
- const dice = karakterClass.baseHP()
+ const szint = karakter.szint + 1
+ const dice = BaseHP(karakter.osztaly)
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]})
+ console.log(`Level ${szint} HP roll on d${dice} is: ${roll}`)
+ changeKarakter({...karakter, szint: szint, HProlls: [...karakter.HProlls, roll]})
}
function levelDown() {
@@ -79,6 +46,8 @@ function CreateCharacterPage() {
console.log(karakter)
}
+ const masodlagosErtekek = CalculateMasodlagosErtekek({...karakter, szint: 1, HProlls: []})
+
return (
@@ -136,7 +105,7 @@ function CreateCharacterPage() {
/>
changeKarakter({...karakter, kepzettsegek: ks}) }
tolvajKepzettsegek={karakter.tolvajKepzettsegek || []}
@@ -144,7 +113,7 @@ function CreateCharacterPage() {
/>
-
+
{karakter.szint > 1 && }
diff --git a/src/pdf/character.pdf.ts b/src/pdf/character.pdf.ts
index 9729bfb..05821e2 100644
--- a/src/pdf/character.pdf.ts
+++ b/src/pdf/character.pdf.ts
@@ -1,4 +1,4 @@
-import {KarakterPdfView} from "../domain-models/karakter";
+import {KarakterPdfView} from "./karakter_pdf_view";
import {PDFDocument, PDFFont, PDFPage, rgb} from "pdf-lib";
import fontkit from '@pdf-lib/fontkit'
import {OsztalyLabel} from "../domain-models/osztaly";
diff --git a/src/pdf/karakter_pdf_view.ts b/src/pdf/karakter_pdf_view.ts
new file mode 100644
index 0000000..37ae7a7
--- /dev/null
+++ b/src/pdf/karakter_pdf_view.ts
@@ -0,0 +1,66 @@
+import {KarakterTulajdonsagok, TulajdonsagModosito} from "../domain-models/tulajdonsag";
+import {Mentok, MentokAlap, MentoModositok} from "../domain-models/mentok";
+import {Kepzettseg, Kepzettsegek} from "../domain-models/kepzettsegek";
+import {CalculateMasodlagosErtekek} from "../domain-models/masodlagos_ertekek";
+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";
+
+export interface KarakterPdfView {
+ Name: string
+ Nem: string
+ Kor: number
+ Isten: string
+ Faj: Faj
+ Osztaly: Osztaly
+ Tulajdonsagok: KarakterTulajdonsagok,
+ TulajdonsagModositok: KarakterTulajdonsagok,
+ Szint: number
+ HP: number
+ VO: number
+ Mozgas: number
+ Kezdemenyezes: number
+ KozelharciTB: number[]
+ CelzoTB: number[]
+ MentokAlap: Mentok
+ MentoModositok: Mentok
+ MentokModositokkal: Mentok
+ Kepzettsegek: Kepzettseg[]
+ TolvajKepzettsegek: Kepzettseg[]
+}
+
+export function KarakterInputToPdfView(karakter: KarakterInputs): KarakterPdfView {
+ const masodlagosErtekek = CalculateMasodlagosErtekek(karakter)
+ const tulajdonsagModositok = TulajdonsagModosito(karakter.tulajdonsagok)
+ const mozgas = karakter.faj === Faj.Torpe ? 20 : 30
+ const kezdemenyezes = tulajdonsagModositok.t_ugy + (karakter.osztaly === Osztaly.Tolvaj ? 4 : 0)
+
+ const mentok = MentokAlap(karakter.osztaly, karakter.szint)
+ const mentoModositok = MentoModositok(tulajdonsagModositok)
+
+ return {
+ Faj: karakter.faj,
+ Isten: karakter.isten || "",
+ Kor: karakter.kor,
+ Name: karakter.name,
+ Nem: karakter.nem || "",
+ Tulajdonsagok: karakter.tulajdonsagok,
+ Osztaly: karakter.osztaly,
+ Szint: karakter.szint,
+ Kepzettsegek: karakter.kepzettsegek.map(id => Kepzettsegek[id]),
+ TolvajKepzettsegek: karakter.tolvajKepzettsegek?.map(id => Kepzettsegek[id]) || [],
+ TulajdonsagModositok: tulajdonsagModositok,
+
+ HP: masodlagosErtekek.HP,
+ VO: masodlagosErtekek.VO,
+ Mozgas: mozgas,
+ Kezdemenyezes: kezdemenyezes,
+ KozelharciTB: KozelharciTB(karakter),
+ CelzoTB: CelzoTB(karakter),
+
+ MentoModositok: mentoModositok,
+ MentokAlap: mentok,
+ MentokModositokkal: masodlagosErtekek.Mentok
+ }
+}