mirror of
https://github.com/morbalint/kemkas.git
synced 2026-07-17 19:03: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[]
|
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: []
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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),
|
||||||
@@ -151,4 +146,12 @@ export function TulajdonsagokFajjal(tulajdonsagok: KarakterTulajdonsagok, faj: F
|
|||||||
[Tulajdonsag.Bolcsesseg]: tulajdonsagok.t_bol + tulajdonsagModositokPerFaj(Tulajdonsag.Bolcsesseg, faj),
|
[Tulajdonsag.Bolcsesseg]: tulajdonsagok.t_bol + tulajdonsagModositokPerFaj(Tulajdonsag.Bolcsesseg, faj),
|
||||||
[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
|
||||||
|
}
|
||||||
|
|||||||
@@ -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'>
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user