feat: tulajdonsag noveles minden 4ik szinten

This commit is contained in:
2023-09-24 12:43:22 +02:00
parent 5008629d87
commit b1accb61d1
5 changed files with 109 additions and 35 deletions
+31
View File
@@ -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 <>
<div className='row'>
<div className='col-lg-6'>
<div className='row m-2'>
<label className='col-sm-6 col-8 col-form-label'>Tulajdonság növelés{' '}</label>
<div className='col-sm-2 col'>
<select value={tulajdonsagNoveles} onChange={(e) => changeTulajdonsagNoveles(e.target.value as Tulajdonsag)}>
{TulajdonsagIDs.filter(t => t === tulajdonsagNoveles || tulajdonsagok[t] < 18).map(t => (
<option value={t} key={t}>{TulajdonsagLabel(t)}</option>
))}
</select>
</div>
</div>
</div>
<div className='col-lg-6'>
<div className='row m-2'>
<label className='col-sm-6 col-8 col-form-label'>Új {TulajdonsagLabel(tulajdonsagNoveles)}{' '}</label>
<span className='col col-form-label'>{tulajdonsagok[tulajdonsagNoveles]}</span>
</div>
</div>
</div>
</>
}
export default TulajdonsagNoveles
+2 -3
View File
@@ -15,7 +15,7 @@ export interface KarakterInputs {
tolvajKepzettsegek?: KepzettsegId[] tolvajKepzettsegek?: KepzettsegId[]
szint: number szint: number
hpRolls: number[], hpRolls: number[],
tulajdonsagNovekedes: Tulajdonsag[], tulajdonsagNovelesek: Tulajdonsag[],
} }
export const KarakterDefaults: KarakterInputs = { export const KarakterDefaults: KarakterInputs = {
@@ -27,6 +27,5 @@ export const KarakterDefaults: KarakterInputs = {
kepzettsegek: [], kepzettsegek: [],
szint: 1, szint: 1,
hpRolls: [], hpRolls: [],
tulajdonsagNovekedes: [] tulajdonsagNovelesek: []
} }
+23 -20
View File
@@ -1,5 +1,6 @@
import {d6} from "./kockak"; import {d6} from "./kockak";
import {Faj} from "./faj"; import {Faj} from "./faj";
import {KarakterInputs} from "./karakter";
export enum Tulajdonsag { export enum Tulajdonsag {
Ero = 't_ero', Ero = 't_ero',
@@ -12,6 +13,15 @@ export enum Tulajdonsag {
export type KarakterTulajdonsagok = Record<Tulajdonsag, number> export type KarakterTulajdonsagok = Record<Tulajdonsag, number>
export const TulajdonsagIDs = [
Tulajdonsag.Ero,
Tulajdonsag.Ugyesseg,
Tulajdonsag.Egeszseg,
Tulajdonsag.Intelligencia,
Tulajdonsag.Bolcsesseg,
Tulajdonsag.Karizma
]
export const TulajdonsagDefaults: KarakterTulajdonsagok = { export const TulajdonsagDefaults: KarakterTulajdonsagok = {
t_ero: 10, t_ero: 10,
t_ugy: 10, t_ugy: 10,
@@ -50,22 +60,18 @@ function rollAbility() {
} }
export function RollAllAbilities() : KarakterTulajdonsagok { export function RollAllAbilities() : KarakterTulajdonsagok {
return { const response = {...TulajdonsagDefaults}
t_ero: rollAbility(), for (const key of TulajdonsagIDs) {
t_ugy: rollAbility(), response[key] = rollAbility()
t_egs: rollAbility(),
t_int: rollAbility(),
t_bol: rollAbility(),
t_kar: rollAbility(),
} }
return response
} }
export const Modifier = (val : number) => Math.floor(val / 3) - 3 export const Modifier = (val : number) => Math.floor(val / 3) - 3
export function TulajdonsagModosito(tulajdonsagok: KarakterTulajdonsagok): KarakterTulajdonsagok { export function TulajdonsagModosito(tulajdonsagok: KarakterTulajdonsagok): KarakterTulajdonsagok {
let response: KarakterTulajdonsagok = { ...tulajdonsagok } let response: KarakterTulajdonsagok = { ...tulajdonsagok }
const keys = Object.keys(tulajdonsagok) as (keyof KarakterTulajdonsagok)[] for (const key of TulajdonsagIDs) {
for (const key of keys) {
response[key] = Modifier(tulajdonsagok[key]) response[key] = Modifier(tulajdonsagok[key])
} }
return response return response
@@ -131,17 +137,6 @@ export function TulajdonsagModositokFajokra(tul: Tulajdonsag) {
return (faj: Faj) => tulajdonsagModositokPerFaj(tul, faj); 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 { export function TulajdonsagokFajjal(tulajdonsagok: KarakterTulajdonsagok, faj: Faj): KarakterTulajdonsagok {
return { return {
[Tulajdonsag.Ero]: tulajdonsagok.t_ero + tulajdonsagModositokPerFaj(Tulajdonsag.Ero, faj), [Tulajdonsag.Ero]: tulajdonsagok.t_ero + tulajdonsagModositokPerFaj(Tulajdonsag.Ero, faj),
@@ -152,3 +147,11 @@ export function TulajdonsagokFajjal(tulajdonsagok: KarakterTulajdonsagok, faj: F
[Tulajdonsag.Karizma]: tulajdonsagok.t_kar + tulajdonsagModositokPerFaj(Tulajdonsag.Karizma, faj), [Tulajdonsag.Karizma]: tulajdonsagok.t_kar + tulajdonsagModositokPerFaj(Tulajdonsag.Karizma, faj),
} }
} }
export function TulajdonsagokTotal(karakter: Pick<KarakterInputs, 'tulajdonsagok' | 'faj' | 'tulajdonsagNovelesek'>): KarakterTulajdonsagok {
const response = TulajdonsagokFajjal(karakter.tulajdonsagok, karakter.faj)
for (const tulajdonsag of karakter.tulajdonsagNovelesek) {
response[tulajdonsag] += 1
}
return response
}
+46 -9
View File
@@ -6,7 +6,13 @@ import FajSelector from "../components/FajSelector";
import Tulajdonsagok from "../components/Tulajdonsagok"; import Tulajdonsagok from "../components/Tulajdonsagok";
import OsztalySelector from "../components/OsztalySelector"; import OsztalySelector from "../components/OsztalySelector";
import KarakterKepzettsegek from "../components/KarakterKepzettsegek"; 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 MasodlagosErtekek from "../components/MasodlagosErtekek";
import { import {
AvailableKezpettsegList, AvailableKezpettsegList,
@@ -20,29 +26,47 @@ import {dAny} from "../domain-models/kockak";
import {BaseHP, CalculateMasodlagosErtekek} from "../domain-models/masodlagos_ertekek"; import {BaseHP, CalculateMasodlagosErtekek} from "../domain-models/masodlagos_ertekek";
import {KarakterInputToPdfView} from "../pdf/karakter_pdf_view"; import {KarakterInputToPdfView} from "../pdf/karakter_pdf_view";
import {arraySetN} from "../util"; import {arraySetN} from "../util";
import TulajdonsagNoveles from "../components/TulajdonsagNoveles";
function CreateCharacterPage() { function CreateCharacterPage() {
let [karakter, changeKarakter] = useState(KarakterDefaults) 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 changeKepzettseg = (k: KepzettsegId[]) => changeKarakter({...karakter, kepzettsegek: k})
const changeTolvajKepzettseg = (tk?: KepzettsegId[]) => changeKarakter({...karakter, tolvajKepzettsegek: tk}) const changeTolvajKepzettseg = (tk?: KepzettsegId[]) => changeKarakter({...karakter, tolvajKepzettsegek: tk})
SetDefaultTolvajKepzettsegek(karakter, changeTolvajKepzettseg) SetDefaultTolvajKepzettsegek(karakter, changeTolvajKepzettseg)
SetDefaultKepzettsegek({...karakter, tulajdonsagok: tulajdonsagokTotal}, changeKepzettseg) SetDefaultKepzettsegek({...karakter, tulajdonsagok: tulajdonsagokFajjal}, changeKepzettseg)
const availableKepzettsegList = AvailableKezpettsegList(karakter.osztaly) const availableKepzettsegList = AvailableKezpettsegList(karakter.osztaly)
function levelUp() { function levelUp() {
const szint = karakter.szint + 1 const szint = karakter.szint + 1
const dice = BaseHP(karakter.osztaly) const dice = BaseHP(karakter.osztaly)
const roll = dAny(dice) const roll = dAny(dice)
const hpRolls = [...karakter.hpRolls, roll]
console.log(`Level ${szint} HP roll on d${dice} is: ${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() { 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) => { const changeHProllAtSzint = (szint: number) => (newHProll: number) => {
@@ -107,7 +131,7 @@ function CreateCharacterPage() {
/> />
<KarakterKepzettsegek <KarakterKepzettsegek
availableKepzettsegList={availableKepzettsegList} availableKepzettsegList={availableKepzettsegList}
numberOfKepzettsegek={GetNumberOfKepzettsegek(tulajdonsagokTotal.t_int, karakter.faj, availableKepzettsegList.length)} numberOfKepzettsegek={GetNumberOfKepzettsegek(tulajdonsagokFajjal.t_int, karakter.faj, availableKepzettsegList.length)}
kepzettsegek={karakter.kepzettsegek} kepzettsegek={karakter.kepzettsegek}
changeKepzettsegek={changeKepzettseg} changeKepzettsegek={changeKepzettseg}
tolvajKepzettsegek={karakter.tolvajKepzettsegek || []} tolvajKepzettsegek={karakter.tolvajKepzettsegek || []}
@@ -115,10 +139,23 @@ function CreateCharacterPage() {
/> />
<hr /> <hr />
<MasodlagosErtekek {...CalculateMasodlagosErtekek({...karakter, tulajdonsagok: tulajdonsagokTotal, szint: 1, hpRolls: []})} /> <MasodlagosErtekek {...CalculateMasodlagosErtekek({...karakter, tulajdonsagok: tulajdonsagokFajjal, szint: 1, hpRolls: []})} />
{karakter.hpRolls.map((_, i) => i+2).map(szint => ( {karakter.hpRolls.map((_, i) => i+2).map(szint => <>
<BasicNewLevel karakter={{...karakter}} szint={szint + 2} key={'level-'+(szint+2)} changeRolledHP={changeHProllAtSzint(szint+2)} />) <BasicNewLevel
key={`level-${szint}`}
szint={szint}
karakter={karakter}
changeRolledHP={changeHProllAtSzint(szint)}
/>
{szint % 4 === 0 && <TulajdonsagNoveles
key={`tulajdonsag-noveles-${szint}`}
tulajdonsagok={tulajdonsagokTotal}
szint={szint}
tulajdonsagNovelesek={karakter.tulajdonsagNovelesek}
changeTulajdonsagNoveles={(t: Tulajdonsag) => { changeKarakter({...karakter, tulajdonsagNovelesek: arraySetN(karakter.tulajdonsagNovelesek, Math.floor((szint / 4)-1), t)}) }}
/>}
</>
)} )}
<div className='d-grid gap-2 m-5'> <div className='d-grid gap-2 m-5'>
+6 -2
View File
@@ -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 {Mentok, MentokAlap, MentoModositok} from "../domain-models/mentok";
import {Kepzettseg, Kepzettsegek} from "../domain-models/kepzettsegek"; import {Kepzettseg, Kepzettsegek} from "../domain-models/kepzettsegek";
import {CalculateMasodlagosErtekek} from "../domain-models/masodlagos_ertekek"; import {CalculateMasodlagosErtekek} from "../domain-models/masodlagos_ertekek";
@@ -31,7 +35,7 @@ export interface KarakterPdfView {
} }
export function KarakterInputToPdfView(karakter: KarakterInputs): KarakterPdfView { export function KarakterInputToPdfView(karakter: KarakterInputs): KarakterPdfView {
const tulajdonsagok = TulajdonsagokFajjal(karakter.tulajdonsagok, karakter.faj) const tulajdonsagok = TulajdonsagokTotal(karakter)
karakter = {...karakter, tulajdonsagok} karakter = {...karakter, tulajdonsagok}
const tulajdonsagModositok = TulajdonsagModosito(tulajdonsagok) const tulajdonsagModositok = TulajdonsagModosito(tulajdonsagok)
const masodlagosErtekek = CalculateMasodlagosErtekek(karakter) const masodlagosErtekek = CalculateMasodlagosErtekek(karakter)