diff --git a/src/components/Level2.tsx b/src/components/Level2.tsx
index 837808a..ecba087 100644
--- a/src/components/Level2.tsx
+++ b/src/components/Level2.tsx
@@ -1,6 +1,29 @@
import React from "react";
import {KarakterClass, KarakterInputs} from "../domain-models/karakter";
import {SignedNumberToText} from "./Helpers";
+import {Mentok, MentoTipus, MentoTipusLabel} from "../domain-models/mentok";
+
+function MentoNovekedes(props : {tipus: MentoTipus, ujMentok: Mentok, regiMentok: Mentok}) {
+ const {tipus, ujMentok, regiMentok} = props
+ if (ujMentok[tipus] === regiMentok[tipus]) {
+ return null
+ }
+ return
+
+ {SignedNumberToText(ujMentok[tipus] - regiMentok[tipus])}
+
;
+}
+
+function UjMento(props : {tipus: MentoTipus, ujMentok: Mentok, regiMentok: Mentok}) {
+ const {tipus, ujMentok, regiMentok} = props
+ if (ujMentok[tipus] === regiMentok[tipus]) {
+ return null
+ }
+ return
+
+ {SignedNumberToText(ujMentok[tipus])}
+
;
+}
function Level2(props: {
karakter: KarakterInputs
@@ -9,6 +32,8 @@ function Level2(props: {
}) {
const {karakter, rolledHP, changeRolledHP} = props
const karakterClass = new KarakterClass(karakter)
+ const regiMentok = karakterClass.MentokTulajdonsaggal(karakter.szint - 1)
+ const ujMentok = karakterClass.MentokTulajdonsaggal(karakter.szint)
return <>
@@ -33,10 +58,9 @@ function Level2(props: {
+1
-
-
- +1
-
+
+
+
@@ -47,10 +71,9 @@ function Level2(props: {
{karakterClass.TamadasBonusz().map(SignedNumberToText).join("/")}
-
-
- {SignedNumberToText(karakterClass.KitartasMentoAlap())}
-
+
+
+
>
diff --git a/src/components/MasodlagosErtekek.tsx b/src/components/MasodlagosErtekek.tsx
index 692f286..f43190e 100644
--- a/src/components/MasodlagosErtekek.tsx
+++ b/src/components/MasodlagosErtekek.tsx
@@ -1,18 +1,19 @@
import React from "react";
import {OverlayTrigger, Tooltip} from "react-bootstrap";
import {SignedNumberToText} from "./Helpers";
-import {KarakterMasodlagosErtekek} from "../domain-models/masodlagos_ertekek";
+import {Karakter} from "../domain-models/karakter";
-function MasodlagosErtekek(props: {ertekek: KarakterMasodlagosErtekek}) {
+function MasodlagosErtekek(props: {karakter: Karakter}) {
- const { ertekek } = props
+ const { karakter } = props
const tooltip = (
Hentelési Potenciál
);
+ const mentok = karakter.MentokTulajdonsaggal(1)
return <>
@@ -26,33 +27,33 @@ function MasodlagosErtekek(props: {ertekek: KarakterMasodlagosErtekek}) {
(HP)
-
{ertekek.HP}
+
{karakter.HP()}
-
{ertekek.VO}
+
{karakter.VO()}
-
{SignedNumberToText(ertekek.KozelHarciTB)}
+
{SignedNumberToText(karakter.KozelharciTB(1)[0])}
-
{SignedNumberToText(ertekek.CelzoTB)}
+
{SignedNumberToText(karakter.CelzoTB(1)[0])}
-
{SignedNumberToText(ertekek.KitartasMento)}
+
{SignedNumberToText(mentok.kitartas)}
-
{SignedNumberToText(ertekek.ReflexMento)}
+
{SignedNumberToText(mentok.reflex)}
-
{SignedNumberToText(ertekek.AkarateroMento)}
+
{SignedNumberToText(mentok.akaratero)}
diff --git a/src/domain-models/karakter.ts b/src/domain-models/karakter.ts
index c1f7748..dfe72c6 100644
--- a/src/domain-models/karakter.ts
+++ b/src/domain-models/karakter.ts
@@ -1,9 +1,9 @@
import {Faj} from "./faj";
import {Osztaly} from "./osztaly";
import {KarakterTulajdonsagok, Modifier} from "./tulajdonsag";
-import {CalculateMasodlagosErtekek, KarakterMasodlagosErtekek} from "./masodlagos_ertekek";
import {Kepzettseg, Kepzettsegek, KepzettsegId} from "./kepzettsegek";
import TamadasBonuszTabla from './tamadas_bonus_tabla.json';
+import {ElsodlegesMento, MasodlagosMento, Mentok, MentoTipus} from "./mentok";
export interface Karakter {
Name: string
@@ -18,11 +18,11 @@ export interface Karakter {
VO: () => number
Mozgas: () => number
Kezdemenyezes: () => number
- KozelharciTB: () => number[]
- CelzoTB: () => number[]
- KitartasMentoAlap: () => number
- ReflexMentoAlap: () => number
- AkarateroMentoAlap: () => number
+ KozelharciTB: (szint?: number) => number[]
+ CelzoTB: (szint?: number) => number[]
+ ElsodlegesMentok: () => MentoTipus[]
+ MentokAlap: (szint?: number) => Mentok
+ MentokTulajdonsaggal: (szint?: number) => Mentok
Kepzettsegek: Kepzettseg[]
TolvajKepzettsegek: Kepzettseg[]
}
@@ -54,7 +54,6 @@ export class KarakterClass implements Karakter {
public Kepzettsegek: Kepzettseg[]
public TolvajKepzettsegek: Kepzettseg[]
- private MasodlagosErtekek : KarakterMasodlagosErtekek
private HProlls: number[]
constructor(inputs: KarakterInputs) {
@@ -65,7 +64,6 @@ export class KarakterClass implements Karakter {
this.Faj = inputs.faj
this.Osztaly = inputs.osztaly
this.Tulajdonsagok = inputs.tulajdonsagok
- this.MasodlagosErtekek = CalculateMasodlagosErtekek(inputs.osztaly, 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)
@@ -77,7 +75,7 @@ export class KarakterClass implements Karakter {
.map(hp => Math.max(1, hp + Modifier(this.Tulajdonsagok.t_egs)))
.reduce((sum, val) => sum + val, 0)
- public VO = () => this.MasodlagosErtekek.VO
+ public VO = () => 10 + Modifier(this.Tulajdonsagok.t_ugy)
public Mozgas = () => this.Faj === Faj.Torpe ? 20 : 30
@@ -85,7 +83,7 @@ export class KarakterClass implements Karakter {
return Modifier(this.Tulajdonsagok.t_ugy) + (this.Osztaly === Osztaly.Tolvaj ? 4 : 0)
}
- public TamadasBonusz() : number[] {
+ public TamadasBonusz(szint: number = this.Szint) : number[] {
let base = []
switch (this.Osztaly){
case Osztaly.Barbar:
@@ -104,70 +102,64 @@ export class KarakterClass implements Karakter {
base = TamadasBonuszTabla['feles'];
break;
}
- return base[this.Szint-1]
+ return base[szint-1]
}
- public KozelharciTB(): number[] {
- const base = this.TamadasBonusz();
+ 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(): number[] {
- let base = this.TamadasBonusz()
+ 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 KitartasMentoAlap() : number {
+ 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:
- return 2;
+ t = ['kitartas', 'akaratero'];
+ break;
case Osztaly.Tolvaj:
+ t = ['reflex'];
+ break;
case Osztaly.Varazslo:
case Osztaly.Illuzionista:
- return 0;
+ 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 ReflexMentoAlap() : number {
- switch (this.Osztaly){
- case Osztaly.Tolvaj:
- return 2;
- case Osztaly.Barbar:
- case Osztaly.Amazon:
- case Osztaly.Ijasz:
- case Osztaly.Kaloz:
- case Osztaly.Harcos:
- case Osztaly.Pap:
- case Osztaly.Varazslo:
- case Osztaly.Illuzionista:
- return 0;
- }
- }
-
- public AkarateroMentoAlap() : number {
- switch (this.Osztaly){
- case Osztaly.Pap:
- case Osztaly.Varazslo:
- case Osztaly.Illuzionista:
- return 2;
- case Osztaly.Tolvaj:
- case Osztaly.Barbar:
- case Osztaly.Amazon:
- case Osztaly.Ijasz:
- case Osztaly.Kaloz:
- case Osztaly.Harcos:
- return 0;
+ 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),
}
}
diff --git a/src/domain-models/masodlagos_ertekek.ts b/src/domain-models/masodlagos_ertekek.ts
deleted file mode 100644
index ff49c93..0000000
--- a/src/domain-models/masodlagos_ertekek.ts
+++ /dev/null
@@ -1,124 +0,0 @@
-import {Osztaly} from "./osztaly";
-import {KarakterTulajdonsagok, Modifier} from "./tulajdonsag";
-
-export interface KarakterMasodlagosErtekek {
- HP: number
- VO: number
- CelzoTB: number
- KozelHarciTB: number
- KitartasMento: number
- ReflexMento: number
- AkarateroMento: number
-}
-
-export function CalculateMasodlagosErtekek(osztaly: Osztaly, tulajdonsagok: KarakterTulajdonsagok) : KarakterMasodlagosErtekek {
- return {
- HP: HP(osztaly, tulajdonsagok.t_egs),
- VO: 10 + Modifier(tulajdonsagok.t_ugy),
- KozelHarciTB: KozelharciTB(osztaly, tulajdonsagok),
- CelzoTB: TamadasBonusz(osztaly) + Modifier(tulajdonsagok.t_ugy),
-
- KitartasMento: KitartasMento(osztaly) + Modifier(tulajdonsagok.t_egs),
- ReflexMento: ReflexMento(osztaly) + Modifier(tulajdonsagok.t_ugy),
- AkarateroMento: AkarateroMento(osztaly) + Modifier(tulajdonsagok.t_bol),
- }
-}
-
-function HP(osztaly: Osztaly, egeszseg: number) {
- 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 + Modifier(egeszseg)
-}
-
-function TamadasBonusz(osztaly: Osztaly) : number {
- switch (osztaly){
- case Osztaly.Barbar:
- case Osztaly.Amazon:
- case Osztaly.Ijasz:
- case Osztaly.Kaloz:
- case Osztaly.Harcos:
- return 2;
- case Osztaly.Pap:
- case Osztaly.Tolvaj:
- return 0;
- case Osztaly.Varazslo:
- case Osztaly.Illuzionista:
- return 0;
- }
-}
-
-function KozelharciTB(osztaly: Osztaly, tulajdonsagok: KarakterTulajdonsagok): number {
- const base = TamadasBonusz(osztaly);
- if (osztaly === Osztaly.Kaloz && tulajdonsagok.t_ugy > tulajdonsagok.t_ero) {
- return base + Modifier(tulajdonsagok.t_ugy)
- }
- return base + Modifier(tulajdonsagok.t_ero)
-}
-
-function KitartasMento(osztaly: Osztaly) : number {
- switch (osztaly){
- case Osztaly.Barbar:
- case Osztaly.Amazon:
- case Osztaly.Ijasz:
- case Osztaly.Kaloz:
- case Osztaly.Harcos:
- case Osztaly.Pap:
- return 2;
- case Osztaly.Tolvaj:
- case Osztaly.Varazslo:
- case Osztaly.Illuzionista:
- return 0;
- }
-}
-
-function ReflexMento(osztaly: Osztaly) : number {
- switch (osztaly){
- case Osztaly.Tolvaj:
- return 2;
- case Osztaly.Barbar:
- case Osztaly.Amazon:
- case Osztaly.Ijasz:
- case Osztaly.Kaloz:
- case Osztaly.Harcos:
- case Osztaly.Pap:
- case Osztaly.Varazslo:
- case Osztaly.Illuzionista:
- return 0;
- }
-}
-
-function AkarateroMento(osztaly: Osztaly) : number {
- switch (osztaly){
- case Osztaly.Pap:
- case Osztaly.Varazslo:
- case Osztaly.Illuzionista:
- return 2;
- case Osztaly.Tolvaj:
- case Osztaly.Barbar:
- case Osztaly.Amazon:
- case Osztaly.Ijasz:
- case Osztaly.Kaloz:
- case Osztaly.Harcos:
- return 0;
- }
-}
diff --git a/src/domain-models/mentok.ts b/src/domain-models/mentok.ts
new file mode 100644
index 0000000..180a0fe
--- /dev/null
+++ b/src/domain-models/mentok.ts
@@ -0,0 +1,30 @@
+export interface Mentok {
+ kitartas: number
+ reflex: number
+ akaratero: number
+}
+export type MentoTipus = keyof Mentok
+
+export function MentoTipusLabel(tipus: MentoTipus): string {
+ let label: string | null = null
+ switch (tipus) {
+ case "akaratero":
+ label = "Akaraterő";
+ break;
+ case "kitartas":
+ label = "Kitartás";
+ break;
+ case "reflex":
+ label = "Reflex";
+ break;
+ }
+ return label
+}
+
+export function ElsodlegesMento(szint: number): number {
+ return Math.min(Math.floor(2 + szint / 2), 10);
+}
+
+export function MasodlagosMento(szint: number): number {
+ return Math.floor(szint / 3)
+}
\ No newline at end of file
diff --git a/src/pages/CreateCharacter.tsx b/src/pages/CreateCharacter.tsx
index f5e3829..ad47cfa 100644
--- a/src/pages/CreateCharacter.tsx
+++ b/src/pages/CreateCharacter.tsx
@@ -9,7 +9,6 @@ import KarakterKepzettsegek from "../components/KarakterKepzettsegek";
import {KarakterTulajdonsagok, Modifier} from "../domain-models/tulajdonsag";
import MasodlagosErtekek from "../components/MasodlagosErtekek";
import {AvailableKezpettsegList, TolvajKepzettsegList} from "../domain-models/kepzettsegek";
-import {CalculateMasodlagosErtekek} from "../domain-models/masodlagos_ertekek";
import {CreatePDF} from "../pdf/character.pdf";
import {KarakterClass, KarakterInputs} from "../domain-models/karakter";
import Level2 from "../components/Level2";
@@ -52,6 +51,7 @@ function getNumberOfKepzettsegek(t_int: number, faj: Faj, max: number) {
function CreateCharacterPage() {
let [karakter, changeKarakter] = useState(karakterDefaults)
+ const karakterClass = new KarakterClass(karakter)
const availableKepzettsegList = AvailableKezpettsegList(karakter.osztaly)
@@ -64,7 +64,7 @@ function CreateCharacterPage() {
}
function levelUp() {
- const dice = new KarakterClass(karakter).baseHP()
+ const dice = karakterClass.baseHP()
const roll = getRandomInt(dice)
console.log(`Level 2 HP roll on d${dice} is: ${roll}`)
changeKarakter({...karakter, szint: karakter.szint + 1, HProlls: [...karakter.HProlls, roll]})
@@ -144,7 +144,7 @@ function CreateCharacterPage() {
/>
-
+
{karakter.szint > 1 && }
@@ -154,7 +154,7 @@ function CreateCharacterPage() {
-
+
diff --git a/src/pdf/character.pdf.ts b/src/pdf/character.pdf.ts
index f8495fe..7f35288 100644
--- a/src/pdf/character.pdf.ts
+++ b/src/pdf/character.pdf.ts
@@ -96,21 +96,22 @@ function drawTulajdonsagok(page: PDFPage, tulajdonsagok: KarakterTulajdonsagok,
}
function drawMentok(page: PDFPage, karakter: Karakter, fontSizeBase: number, pdfFont: PDFFont) {
- page.drawText(SignedNumberToText(karakter.KitartasMentoAlap()), {
+ const mentokAlap = karakter.MentokAlap()
+ page.drawText(SignedNumberToText(mentokAlap.kitartas), {
x: 435,
y: 613,
size: fontSizeBase,
font: pdfFont,
color: rgb(0, 0, 0),
})
- page.drawText(SignedNumberToText(karakter.ReflexMentoAlap()), {
+ page.drawText(SignedNumberToText(mentokAlap.reflex), {
x: 435,
y: 580,
size: fontSizeBase,
font: pdfFont,
color: rgb(0, 0, 0),
})
- page.drawText(SignedNumberToText(karakter.AkarateroMentoAlap()), {
+ page.drawText(SignedNumberToText(mentokAlap.akaratero), {
x: 435,
y: 547,
size: fontSizeBase,
@@ -138,21 +139,22 @@ function drawMentok(page: PDFPage, karakter: Karakter, fontSizeBase: number, pdf
font: pdfFont,
color: rgb(0, 0, 0),
})
- page.drawText(SignedNumberToText(karakter.KitartasMentoAlap() + Modifier(karakter.Tulajdonsagok.t_egs)), {
+ const mentok = karakter.MentokTulajdonsaggal()
+ page.drawText(SignedNumberToText(mentok.kitartas), {
x: 515,
y: 613,
size: fontSizeBase,
font: pdfFont,
color: rgb(0, 0, 0),
})
- page.drawText(SignedNumberToText(karakter.ReflexMentoAlap() + Modifier(karakter.Tulajdonsagok.t_ugy)), {
+ page.drawText(SignedNumberToText(mentok.reflex), {
x: 515,
y: 580,
size: fontSizeBase,
font: pdfFont,
color: rgb(0, 0, 0),
})
- page.drawText(SignedNumberToText(karakter.AkarateroMentoAlap() + Modifier(karakter.Tulajdonsagok.t_bol)), {
+ page.drawText(SignedNumberToText(mentok.akaratero), {
x: 515,
y: 547,
size: fontSizeBase,