diff --git a/src/components/TulajdonsagNoveles.tsx b/src/components/TulajdonsagNoveles.tsx
new file mode 100644
index 0000000..e8c0370
--- /dev/null
+++ b/src/components/TulajdonsagNoveles.tsx
@@ -0,0 +1,31 @@
+import React from "react";
+import {KarakterTulajdonsagok, Tulajdonsag, TulajdonsagIDs, TulajdonsagLabel} from "../domain-models/tulajdonsag";
+
+function TulajdonsagNoveles(props: {tulajdonsagok: KarakterTulajdonsagok, szint: number, tulajdonsagNovelesek: Tulajdonsag[], changeTulajdonsagNoveles: (tulajdonsag: Tulajdonsag) => void}) {
+ const {tulajdonsagok, szint, tulajdonsagNovelesek, changeTulajdonsagNoveles} = props
+ const tulajdonsagNoveles = tulajdonsagNovelesek[(szint / 4)-1]
+ return <>
+
+
+
+
+
+
+
+
+
+
+
+
+ {tulajdonsagok[tulajdonsagNoveles]}
+
+
+
+ >
+}
+
+export default TulajdonsagNoveles
\ No newline at end of file
diff --git a/src/domain-models/karakter.ts b/src/domain-models/karakter.ts
index 92f20e2..bcd933d 100644
--- a/src/domain-models/karakter.ts
+++ b/src/domain-models/karakter.ts
@@ -15,7 +15,7 @@ export interface KarakterInputs {
tolvajKepzettsegek?: KepzettsegId[]
szint: number
hpRolls: number[],
- tulajdonsagNovekedes: Tulajdonsag[],
+ tulajdonsagNovelesek: Tulajdonsag[],
}
export const KarakterDefaults: KarakterInputs = {
@@ -27,6 +27,5 @@ export const KarakterDefaults: KarakterInputs = {
kepzettsegek: [],
szint: 1,
hpRolls: [],
- tulajdonsagNovekedes: []
+ tulajdonsagNovelesek: []
}
-
diff --git a/src/domain-models/tulajdonsag.ts b/src/domain-models/tulajdonsag.ts
index 1ca0123..94e155f 100644
--- a/src/domain-models/tulajdonsag.ts
+++ b/src/domain-models/tulajdonsag.ts
@@ -1,5 +1,6 @@
import {d6} from "./kockak";
import {Faj} from "./faj";
+import {KarakterInputs} from "./karakter";
export enum Tulajdonsag {
Ero = 't_ero',
@@ -12,6 +13,15 @@ export enum Tulajdonsag {
export type KarakterTulajdonsagok = Record
+export const TulajdonsagIDs = [
+ Tulajdonsag.Ero,
+ Tulajdonsag.Ugyesseg,
+ Tulajdonsag.Egeszseg,
+ Tulajdonsag.Intelligencia,
+ Tulajdonsag.Bolcsesseg,
+ Tulajdonsag.Karizma
+]
+
export const TulajdonsagDefaults: KarakterTulajdonsagok = {
t_ero: 10,
t_ugy: 10,
@@ -50,22 +60,18 @@ function rollAbility() {
}
export function RollAllAbilities() : KarakterTulajdonsagok {
- return {
- t_ero: rollAbility(),
- t_ugy: rollAbility(),
- t_egs: rollAbility(),
- t_int: rollAbility(),
- t_bol: rollAbility(),
- t_kar: rollAbility(),
+ const response = {...TulajdonsagDefaults}
+ for (const key of TulajdonsagIDs) {
+ response[key] = rollAbility()
}
+ return response
}
export const Modifier = (val : number) => Math.floor(val / 3) - 3
export function TulajdonsagModosito(tulajdonsagok: KarakterTulajdonsagok): KarakterTulajdonsagok {
let response: KarakterTulajdonsagok = { ...tulajdonsagok }
- const keys = Object.keys(tulajdonsagok) as (keyof KarakterTulajdonsagok)[]
- for (const key of keys) {
+ for (const key of TulajdonsagIDs) {
response[key] = Modifier(tulajdonsagok[key])
}
return response
@@ -131,17 +137,6 @@ export function TulajdonsagModositokFajokra(tul: Tulajdonsag) {
return (faj: Faj) => tulajdonsagModositokPerFaj(tul, faj);
}
-export function FajiTulajdonsagModositok(faj: Faj) : KarakterTulajdonsagok {
- return {
- [Tulajdonsag.Ero]: tulajdonsagModositokPerFaj(Tulajdonsag.Ero, faj),
- [Tulajdonsag.Ugyesseg]: tulajdonsagModositokPerFaj(Tulajdonsag.Ugyesseg, faj),
- [Tulajdonsag.Egeszseg]: tulajdonsagModositokPerFaj(Tulajdonsag.Egeszseg, faj),
- [Tulajdonsag.Intelligencia]: tulajdonsagModositokPerFaj(Tulajdonsag.Intelligencia, faj),
- [Tulajdonsag.Bolcsesseg]: tulajdonsagModositokPerFaj(Tulajdonsag.Bolcsesseg, faj),
- [Tulajdonsag.Karizma]: tulajdonsagModositokPerFaj(Tulajdonsag.Karizma, faj),
- }
-}
-
export function TulajdonsagokFajjal(tulajdonsagok: KarakterTulajdonsagok, faj: Faj): KarakterTulajdonsagok {
return {
[Tulajdonsag.Ero]: tulajdonsagok.t_ero + tulajdonsagModositokPerFaj(Tulajdonsag.Ero, faj),
@@ -151,4 +146,12 @@ export function TulajdonsagokFajjal(tulajdonsagok: KarakterTulajdonsagok, faj: F
[Tulajdonsag.Bolcsesseg]: tulajdonsagok.t_bol + tulajdonsagModositokPerFaj(Tulajdonsag.Bolcsesseg, faj),
[Tulajdonsag.Karizma]: tulajdonsagok.t_kar + tulajdonsagModositokPerFaj(Tulajdonsag.Karizma, faj),
}
-}
\ No newline at end of file
+}
+
+export function TulajdonsagokTotal(karakter: Pick): KarakterTulajdonsagok {
+ const response = TulajdonsagokFajjal(karakter.tulajdonsagok, karakter.faj)
+ for (const tulajdonsag of karakter.tulajdonsagNovelesek) {
+ response[tulajdonsag] += 1
+ }
+ return response
+}
diff --git a/src/pages/CreateCharacter.tsx b/src/pages/CreateCharacter.tsx
index 495851a..ea0260e 100644
--- a/src/pages/CreateCharacter.tsx
+++ b/src/pages/CreateCharacter.tsx
@@ -6,7 +6,13 @@ import FajSelector from "../components/FajSelector";
import Tulajdonsagok from "../components/Tulajdonsagok";
import OsztalySelector from "../components/OsztalySelector";
import KarakterKepzettsegek from "../components/KarakterKepzettsegek";
-import {KarakterTulajdonsagok, TulajdonsagokFajjal} from "../domain-models/tulajdonsag";
+import {
+ KarakterTulajdonsagok,
+ Tulajdonsag,
+ TulajdonsagIDs,
+ TulajdonsagokFajjal,
+ TulajdonsagokTotal
+} from "../domain-models/tulajdonsag";
import MasodlagosErtekek from "../components/MasodlagosErtekek";
import {
AvailableKezpettsegList,
@@ -20,29 +26,47 @@ import {dAny} from "../domain-models/kockak";
import {BaseHP, CalculateMasodlagosErtekek} from "../domain-models/masodlagos_ertekek";
import {KarakterInputToPdfView} from "../pdf/karakter_pdf_view";
import {arraySetN} from "../util";
+import TulajdonsagNoveles from "../components/TulajdonsagNoveles";
function CreateCharacterPage() {
let [karakter, changeKarakter] = useState(KarakterDefaults)
- const tulajdonsagokTotal = TulajdonsagokFajjal(karakter.tulajdonsagok, karakter.faj)
+ const tulajdonsagokFajjal = TulajdonsagokFajjal(karakter.tulajdonsagok, karakter.faj)
+ const tulajdonsagokTotal = TulajdonsagokTotal(karakter)
const changeKepzettseg = (k: KepzettsegId[]) => changeKarakter({...karakter, kepzettsegek: k})
const changeTolvajKepzettseg = (tk?: KepzettsegId[]) => changeKarakter({...karakter, tolvajKepzettsegek: tk})
SetDefaultTolvajKepzettsegek(karakter, changeTolvajKepzettseg)
- SetDefaultKepzettsegek({...karakter, tulajdonsagok: tulajdonsagokTotal}, changeKepzettseg)
+ SetDefaultKepzettsegek({...karakter, tulajdonsagok: tulajdonsagokFajjal}, changeKepzettseg)
const availableKepzettsegList = AvailableKezpettsegList(karakter.osztaly)
function levelUp() {
const szint = karakter.szint + 1
const dice = BaseHP(karakter.osztaly)
const roll = dAny(dice)
+ const hpRolls = [...karakter.hpRolls, roll]
console.log(`Level ${szint} HP roll on d${dice} is: ${roll}`)
- changeKarakter({...karakter, szint: szint, hpRolls: [...karakter.hpRolls, roll]})
+ let tulajdonsagNovelesek = karakter.tulajdonsagNovelesek
+ if (szint % 4 === 0) {
+ for (const tulajdonsag of TulajdonsagIDs) {
+ if (tulajdonsagokTotal[tulajdonsag] < 18) {
+ tulajdonsagNovelesek = [...tulajdonsagNovelesek, tulajdonsag]
+ break;
+ }
+ }
+ }
+ changeKarakter({...karakter, szint, hpRolls, tulajdonsagNovelesek})
}
function levelDown() {
- changeKarakter({...karakter, szint: karakter.szint - 1, hpRolls: karakter.hpRolls.slice(0, -1)})
+ let tulajdonsagNovelesek = karakter.tulajdonsagNovelesek
+ if (karakter.szint % 4 === 0) {
+ tulajdonsagNovelesek = tulajdonsagNovelesek.slice(0, -1)
+ }
+ const szint = karakter.szint - 1
+ const hpRolls = karakter.hpRolls.slice(0, -1)
+ changeKarakter({...karakter, szint, hpRolls, tulajdonsagNovelesek})
}
const changeHProllAtSzint = (szint: number) => (newHProll: number) => {
@@ -107,7 +131,7 @@ function CreateCharacterPage() {
/>
-
+
- {karakter.hpRolls.map((_, i) => i+2).map(szint => (
- )
+ {karakter.hpRolls.map((_, i) => i+2).map(szint => <>
+
+ {szint % 4 === 0 && { changeKarakter({...karakter, tulajdonsagNovelesek: arraySetN(karakter.tulajdonsagNovelesek, Math.floor((szint / 4)-1), t)}) }}
+ />}
+ >
)}
diff --git a/src/pdf/karakter_pdf_view.ts b/src/pdf/karakter_pdf_view.ts
index e03d04a..368735a 100644
--- a/src/pdf/karakter_pdf_view.ts
+++ b/src/pdf/karakter_pdf_view.ts
@@ -1,4 +1,8 @@
-import {KarakterTulajdonsagok, TulajdonsagModosito, TulajdonsagokFajjal} from "../domain-models/tulajdonsag";
+import {
+ KarakterTulajdonsagok,
+ TulajdonsagModosito,
+ TulajdonsagokTotal
+} 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";
@@ -31,7 +35,7 @@ export interface KarakterPdfView {
}
export function KarakterInputToPdfView(karakter: KarakterInputs): KarakterPdfView {
- const tulajdonsagok = TulajdonsagokFajjal(karakter.tulajdonsagok, karakter.faj)
+ const tulajdonsagok = TulajdonsagokTotal(karakter)
karakter = {...karakter, tulajdonsagok}
const tulajdonsagModositok = TulajdonsagModosito(tulajdonsagok)
const masodlagosErtekek = CalculateMasodlagosErtekek(karakter)