mirror of
https://github.com/morbalint/kemkas.git
synced 2026-07-18 03:13:46 +00:00
feat: tulajdonsag noveles minden 4ik szinten
This commit is contained in:
@@ -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
|
||||
@@ -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: []
|
||||
}
|
||||
|
||||
|
||||
@@ -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<Tulajdonsag, number>
|
||||
|
||||
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),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
@@ -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() {
|
||||
/>
|
||||
<KarakterKepzettsegek
|
||||
availableKepzettsegList={availableKepzettsegList}
|
||||
numberOfKepzettsegek={GetNumberOfKepzettsegek(tulajdonsagokTotal.t_int, karakter.faj, availableKepzettsegList.length)}
|
||||
numberOfKepzettsegek={GetNumberOfKepzettsegek(tulajdonsagokFajjal.t_int, karakter.faj, availableKepzettsegList.length)}
|
||||
kepzettsegek={karakter.kepzettsegek}
|
||||
changeKepzettsegek={changeKepzettseg}
|
||||
tolvajKepzettsegek={karakter.tolvajKepzettsegek || []}
|
||||
@@ -115,10 +139,23 @@ function CreateCharacterPage() {
|
||||
/>
|
||||
|
||||
<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 => (
|
||||
<BasicNewLevel karakter={{...karakter}} szint={szint + 2} key={'level-'+(szint+2)} changeRolledHP={changeHProllAtSzint(szint+2)} />)
|
||||
{karakter.hpRolls.map((_, i) => i+2).map(szint => <>
|
||||
<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'>
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user