mirror of
https://github.com/morbalint/kemkas.git
synced 2026-07-18 03:13:46 +00:00
refactor to use redux WIP
just pushing to save data
This commit is contained in:
+13
-1
@@ -12,6 +12,7 @@ import store, {AppDispatch, RootState} from './store'
|
|||||||
import { Provider } from "react-redux"
|
import { Provider } from "react-redux"
|
||||||
import { useSelector, useDispatch } from 'react-redux'
|
import { useSelector, useDispatch } from 'react-redux'
|
||||||
import {load, setUser, unsetUser, userSelector} from './shared/domain-models/userSlice'
|
import {load, setUser, unsetUser, userSelector} from './shared/domain-models/userSlice'
|
||||||
|
import {setCharacter} from "./second-edition/domain-models/characterSlice";
|
||||||
|
|
||||||
function Router(props: {faro?: Faro}) {
|
function Router(props: {faro?: Faro}) {
|
||||||
const dispatch = useDispatch.withTypes<AppDispatch>()()
|
const dispatch = useDispatch.withTypes<AppDispatch>()()
|
||||||
@@ -79,7 +80,18 @@ function Router(props: {faro?: Faro}) {
|
|||||||
{
|
{
|
||||||
path: "/2e/karakter/:id",
|
path: "/2e/karakter/:id",
|
||||||
element: <CreateCharacter2E faro={props.faro}/>,
|
element: <CreateCharacter2E faro={props.faro}/>,
|
||||||
loader: args => fetch(`${window.location.origin}/api/Character2E/${args.params.id}`),
|
loader: async args => {
|
||||||
|
const response = await fetch(`${window.location.origin}/api/Character2E/${args.params.id}`)
|
||||||
|
if (response.ok) {
|
||||||
|
const loaded2Echaracter = await response.json()
|
||||||
|
dispatch(setCharacter(loaded2Echaracter))
|
||||||
|
return loaded2Echaracter;
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
isPublic: false,
|
||||||
|
error: response.statusText,
|
||||||
|
};
|
||||||
|
},
|
||||||
ErrorBoundary: ErrorBoundary,
|
ErrorBoundary: ErrorBoundary,
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -1,8 +1,13 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import {Faj2E, FajDescription, FajLabel, FajSpecials} from "../domain-models/faj2E";
|
import {Faj2E, FajDescription, FajLabel, FajSpecials} from "../domain-models/faj2E";
|
||||||
|
import {useDispatch, useSelector} from "react-redux";
|
||||||
|
import {AppDispatch, RootState} from "../../store";
|
||||||
|
import {characterSelector, setFaj} from "../domain-models/characterSlice";
|
||||||
|
|
||||||
function FajSelector2E(props: { faj: Faj2E, changeFaj: (val: Faj2E) => void }) {
|
function FajSelector2E(props: { faj?: Faj2E, changeFaj?: (val: Faj2E) => void }) {
|
||||||
const {faj, changeFaj} = props
|
const dispatch = useDispatch.withTypes<AppDispatch>()()
|
||||||
|
const faj = props.faj ?? useSelector.withTypes<RootState>()(characterSelector).faj
|
||||||
|
const changeFaj = props.changeFaj ?? (faj => dispatch(setFaj(faj)));
|
||||||
return <>
|
return <>
|
||||||
<div className='row m-2'>
|
<div className='row m-2'>
|
||||||
<label className='col-md-2 col-sm-3 col-form-label'>Faj</label>
|
<label className='col-md-2 col-sm-3 col-form-label'>Faj</label>
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import {AllowedPajzsTypes, AllowedPancelTypes} from '../domain-models/allowed-pa
|
|||||||
import fegyverek from '../domain-models/fegyver.json'
|
import fegyverek from '../domain-models/fegyver.json'
|
||||||
import {arraySetN} from "../../util";
|
import {arraySetN} from "../../util";
|
||||||
import {AllowedFegyver} from "../domain-models/allowed-fegyver";
|
import {AllowedFegyver} from "../domain-models/allowed-fegyver";
|
||||||
import FegyverSelector from "./FegyverSelector";
|
import FegyverSelector from "../display-components/FegyverSelector";
|
||||||
|
|
||||||
function Felszereles(props: {felszereles: KarakterFelszereles, changeFelszereles: (felszereles: KarakterFelszereles) => void, osztaly: Osztaly2E}) {
|
function Felszereles(props: {felszereles: KarakterFelszereles, changeFelszereles: (felszereles: KarakterFelszereles) => void, osztaly: Osztaly2E}) {
|
||||||
const { felszereles, changeFelszereles, osztaly } = props;
|
const { felszereles, changeFelszereles, osztaly } = props;
|
||||||
|
|||||||
@@ -1,25 +1,30 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import {GetFegyver} from "../domain-models/felszereles";
|
import {GetFegyver} from "../domain-models/felszereles";
|
||||||
import FegyverSelector from "./FegyverSelector";
|
import FegyverSelector from "../display-components/FegyverSelector";
|
||||||
import {AllowedFegyver} from "../domain-models/allowed-fegyver";
|
import {AllowedFegyver} from "../domain-models/allowed-fegyver";
|
||||||
import {Osztaly2E} from "../domain-models/osztaly2E";
|
import {Osztaly2E} from "../domain-models/osztaly2E";
|
||||||
|
import {useDispatch, useSelector} from "react-redux";
|
||||||
|
import {AppDispatch, RootState} from "../../store";
|
||||||
|
import {characterSelector, setHarcosSpecialization} from "../domain-models/characterSlice";
|
||||||
|
|
||||||
function HarcosFegyverSpecializacio(props: {
|
function HarcosFegyverSpecializacio(props: {
|
||||||
specialization: string,
|
|
||||||
existingSpecializations: (string | undefined)[],
|
|
||||||
changeSpecialization: (specialization: string) => void
|
|
||||||
szint: number
|
szint: number
|
||||||
}) {
|
}) {
|
||||||
const {
|
const {
|
||||||
specialization,
|
|
||||||
existingSpecializations,
|
|
||||||
changeSpecialization,
|
|
||||||
szint
|
szint
|
||||||
} = props
|
} = props
|
||||||
|
|
||||||
|
const dispatch = useDispatch.withTypes<AppDispatch>()()
|
||||||
|
const character = useSelector.withTypes<RootState>()(characterSelector)
|
||||||
|
const specialization = character.szintlepesek[szint-1].harcosFegyver || 'kard_hosszu'
|
||||||
|
const existingSpecializations = character.szintlepesek.filter(x => x.harcosFegyver != null).map(x => x.harcosFegyver! as string)
|
||||||
|
const changeSpecialization = (specialization: string) => dispatch(setHarcosSpecialization({szint, fegyver: specialization}))
|
||||||
|
|
||||||
const fegyver = GetFegyver(specialization)
|
const fegyver = GetFegyver(specialization)
|
||||||
const availableFegyverek = AllowedFegyver(Osztaly2E.Harcos)
|
const availableFegyverek = AllowedFegyver(Osztaly2E.Harcos)
|
||||||
const pickableFegyverek = availableFegyverek.filter(f => f.Id === specialization || existingSpecializations.filter(x => x === f.Id).length < (szint < 9 ? 1 : 2))
|
const pickableFegyverek = availableFegyverek.filter(f => f.Id === specialization || existingSpecializations.filter(x => x === f.Id).length < (szint < 9 ? 1 : 2))
|
||||||
|
|
||||||
|
|
||||||
return <>
|
return <>
|
||||||
<div className='row m-2'>
|
<div className='row m-2'>
|
||||||
<label className='col-md-2 col-sm-3 col-form-label' >Fegyver specializáció</label>
|
<label className='col-md-2 col-sm-3 col-form-label' >Fegyver specializáció</label>
|
||||||
|
|||||||
@@ -1,38 +0,0 @@
|
|||||||
// import React from "react";
|
|
||||||
// import fegyverek from "../domain-models/fegyver.json"
|
|
||||||
// import {defaultFegyverID, GetFegyver} from "../domain-models/felszereles";
|
|
||||||
//
|
|
||||||
// function HarcosFegyverSpecializacio(props: {
|
|
||||||
// specialization: string,
|
|
||||||
// existingSpecializations: string[],
|
|
||||||
// changeSpecialization: (specialization: string) => void
|
|
||||||
// szint: number
|
|
||||||
// }) {
|
|
||||||
// const {
|
|
||||||
// specialization,
|
|
||||||
// existingSpecializations,
|
|
||||||
// changeSpecialization,
|
|
||||||
// szint
|
|
||||||
// } = props
|
|
||||||
// const fegyver = GetFegyver(specialization)
|
|
||||||
// const pickableFegyverek = fegyverek.data.filter(f => f.Id === specialization || existingSpecializations.filter(x => x === f.Id).length < (szint < 9 ? 1 : 2))
|
|
||||||
// const kozelharciPickable = pickableFegyverek.filter(f => f.Type === 'kozelharci')
|
|
||||||
// const tavolsagiPickable = pickableFegyverek.filter(f => f.Type === 'lofegyver')
|
|
||||||
//
|
|
||||||
// return <>
|
|
||||||
// <div className='row m-2'>
|
|
||||||
// <label className='col-md-2 col-sm-3 col-form-label' >Fegyver specializáció</label>
|
|
||||||
// <select className='col form-select' value={fegyver?.Id || defaultFegyverID} onChange={e => changeSpecialization(e.target.value)}>
|
|
||||||
// <optgroup label="Közelharci">
|
|
||||||
// {kozelharciPickable.map(f => <option key={`spec-${szint}-${f.Id}`} value={f.Id}>{f.Name}</option>)}
|
|
||||||
// </optgroup>
|
|
||||||
// <optgroup label="Távolsági">
|
|
||||||
// {tavolsagiPickable.map(f => <option key={`spec-${szint}-${f.Id}`} value={f.Id}>{f.Name}</option>)}
|
|
||||||
// </optgroup>
|
|
||||||
// </select>
|
|
||||||
// {fegyver == null && <span className='form-field-error'>Ismeretlen fegyver: {specialization}</span>}
|
|
||||||
// </div>
|
|
||||||
// </>
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// export default HarcosFegyverSpecializacio
|
|
||||||
@@ -1,8 +1,14 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import {AllJellemIDs, GetJellem, JellemID} from "../domain-models/jellem";
|
import {AllJellemIDs, GetJellem, JellemID} from "../domain-models/jellem";
|
||||||
|
import {useDispatch, useSelector} from "react-redux";
|
||||||
|
import {AppDispatch, RootState} from "../../store";
|
||||||
|
import {characterSelector, setJellem} from "../domain-models/characterSlice";
|
||||||
|
|
||||||
function JellemSelector(props: {selected: JellemID, changeJellem: (val: JellemID) => void}) {
|
function JellemSelector(props: {selected?: JellemID, changeJellem?: (val: JellemID) => void}) {
|
||||||
const { selected, changeJellem } = props
|
const character = useSelector.withTypes<RootState>()(characterSelector)
|
||||||
|
const selected = props.selected ?? character.jellem
|
||||||
|
const dispatch = useDispatch.withTypes<AppDispatch>()()
|
||||||
|
const changeJellem = props.changeJellem ?? (val => dispatch(setJellem(val)))
|
||||||
const jellem = GetJellem(selected)
|
const jellem = GetJellem(selected)
|
||||||
return <>
|
return <>
|
||||||
<div className='row m-2'>
|
<div className='row m-2'>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import {Osztaly2E} from "../domain-models/osztaly2E";
|
import {Osztaly2E} from "../domain-models/osztaly2E";
|
||||||
import {AllowedFegyver} from "../domain-models/allowed-fegyver";
|
import {AllowedFegyver} from "../domain-models/allowed-fegyver";
|
||||||
import FegyverSelector from "./FegyverSelector";
|
import FegyverSelector from "../display-components/FegyverSelector";
|
||||||
|
|
||||||
function KalozKritikus(props: {
|
function KalozKritikus(props: {
|
||||||
kritFegyverId: string,
|
kritFegyverId: string,
|
||||||
|
|||||||
@@ -1,12 +1,18 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import KepzettsegSelector from "./KepzettsegSelector2E";
|
import KepzettsegSelector from "../display-components/KepzettsegSelector2E";
|
||||||
import {
|
import {
|
||||||
|
GetKepzettsegListaN,
|
||||||
|
GetNumberOfKepzettsegek,
|
||||||
Kepzettseg,
|
Kepzettseg,
|
||||||
Kepzettsegek,
|
Kepzettsegek,
|
||||||
KepzettsegId,
|
KepzettsegId,
|
||||||
TolvajKepzettsegList,
|
TolvajKepzettsegList,
|
||||||
} from "../domain-models/kepzettsegek2E";
|
} from "../domain-models/kepzettsegek2E";
|
||||||
import {arraySetN} from "../../util";
|
import {arraySetN} from "../../util";
|
||||||
|
import {useDispatch, useSelector} from "react-redux";
|
||||||
|
import {AppDispatch, RootState} from "../../store";
|
||||||
|
import {characterSelector, setKepzettsegek, setTolvajKepzettsegek} from "../domain-models/characterSlice";
|
||||||
|
import {TulajdonsagokFajjal} from "../domain-models/faj2E";
|
||||||
|
|
||||||
function InternalKepzettsegekSelector(props: {
|
function InternalKepzettsegekSelector(props: {
|
||||||
title: string,
|
title: string,
|
||||||
@@ -59,15 +65,19 @@ function InternalKepzettsegekSelector(props: {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function KarakterKepzettsegek (props: {
|
function KarakterKepzettsegek () {
|
||||||
numberOfKepzettsegek: number
|
const karakter = useSelector.withTypes<RootState>()(characterSelector);
|
||||||
kepzettsegek: KepzettsegId[],
|
const dispatch = useDispatch.withTypes<AppDispatch>()();
|
||||||
changeKepzettsegek: (newKepzettsegek: KepzettsegId[]) => void
|
|
||||||
tolvajKepzettsegek: KepzettsegId[],
|
const tulajdonsagokFajjal = TulajdonsagokFajjal(karakter.tulajdonsagok, karakter.faj)
|
||||||
changeTolvajKepzettsegek: (newKepzettsegek: KepzettsegId[]) => void
|
const numberOfKepzettsegek = GetNumberOfKepzettsegek(tulajdonsagokFajjal.t_int, karakter.faj)
|
||||||
getKepzettsegListaN: (n: number) => Kepzettseg[]
|
const kepzettsegek = karakter.kepzettsegek
|
||||||
}) {
|
const fajError = karakter.kepzettsegFajError
|
||||||
const { kepzettsegek, numberOfKepzettsegek, getKepzettsegListaN, changeKepzettsegek, tolvajKepzettsegek, changeTolvajKepzettsegek} = props
|
const osztalyError = karakter.kepzettsegOsztalyError
|
||||||
|
const tolvajKepzettsegek = karakter.tolvajKepzettsegek || []
|
||||||
|
const getKepzettsegListaN = GetKepzettsegListaN(karakter)
|
||||||
|
const changeKepzettsegek = (k: KepzettsegId[]) => dispatch(setKepzettsegek(k))
|
||||||
|
const changeTolvajKepzettsegek = (k: KepzettsegId[]) => dispatch(setTolvajKepzettsegek(k))
|
||||||
|
|
||||||
// TODO: Birodalmi tolvajnal az Alikmia, vagy Meregkeveres kezelese
|
// TODO: Birodalmi tolvajnal az Alikmia, vagy Meregkeveres kezelese
|
||||||
|
|
||||||
@@ -85,7 +95,10 @@ function KarakterKepzettsegek (props: {
|
|||||||
kepzettsegek={kepzettsegek}
|
kepzettsegek={kepzettsegek}
|
||||||
dataTestId={"kepzettseg"}
|
dataTestId={"kepzettseg"}
|
||||||
/>
|
/>
|
||||||
|
{fajError && (
|
||||||
|
<span className='form-field-error'>{fajError}</span>)}
|
||||||
|
{osztalyError && (
|
||||||
|
<span className='form-field-error'>{osztalyError}</span>)}
|
||||||
{tolvajKepzettsegek.length > 0 && <InternalKepzettsegekSelector
|
{tolvajKepzettsegek.length > 0 && <InternalKepzettsegekSelector
|
||||||
title="Tolvaj képzettségek"
|
title="Tolvaj képzettségek"
|
||||||
numberOfKepzettseg={4}
|
numberOfKepzettseg={4}
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
import React from "react";
|
||||||
|
import {characterSelector, setIsten, setNev} from "../domain-models/characterSlice";
|
||||||
|
import JellemSelector from "./JellemSelector";
|
||||||
|
import FajSelector2E from "./FajSelector2E";
|
||||||
|
import {useDispatch, useSelector} from "react-redux";
|
||||||
|
import {AppDispatch, RootState} from "../../store";
|
||||||
|
|
||||||
|
function KarakterSzarmazas(props: {
|
||||||
|
|
||||||
|
}) {
|
||||||
|
const karakter = useSelector.withTypes<RootState>()(characterSelector)
|
||||||
|
const dispatch = useDispatch.withTypes<AppDispatch>()()
|
||||||
|
return <>
|
||||||
|
<div className='row m-2'>
|
||||||
|
<label className='col-md-2 col-sm-3 col-form-label'>Név</label>
|
||||||
|
<input className='col form-control'
|
||||||
|
value={karakter.nev}
|
||||||
|
data-testid="nev"
|
||||||
|
onChange={(e) => dispatch(setNev(e.target.value))}/>
|
||||||
|
{!karakter.nev &&
|
||||||
|
<span className='form-field-error'>A karaktered nem mászkálhat névtelenül a világban!</span>}
|
||||||
|
</div>
|
||||||
|
<JellemSelector/>
|
||||||
|
<div className='row m-2'>
|
||||||
|
<label className='col-md-2 col-sm-3 col-form-label'>Választott istenség</label>
|
||||||
|
<input className='col form-control'
|
||||||
|
value={karakter.isten}
|
||||||
|
data-testid="isten"
|
||||||
|
onChange={(e) => dispatch(setIsten(e.target.value))}/>
|
||||||
|
</div>
|
||||||
|
<FajSelector2E/>
|
||||||
|
</>
|
||||||
|
}
|
||||||
|
|
||||||
|
export default KarakterSzarmazas;
|
||||||
@@ -17,7 +17,6 @@ function LevelUp(props: {
|
|||||||
karakter: Karakter2E,
|
karakter: Karakter2E,
|
||||||
changeTulajdonsagNoveles: (t: Tulajdonsag2E) => void,
|
changeTulajdonsagNoveles: (t: Tulajdonsag2E) => void,
|
||||||
changeRolledHP: (rolledHP: number) => void,
|
changeRolledHP: (rolledHP: number) => void,
|
||||||
changeHarcosSpec: (spec: string) => void,
|
|
||||||
changeKalozKritikus: (krit: string) => void,
|
changeKalozKritikus: (krit: string) => void,
|
||||||
changeOsztaly: (osztaly: Osztaly2E) => void
|
changeOsztaly: (osztaly: Osztaly2E) => void
|
||||||
}) {
|
}) {
|
||||||
@@ -27,7 +26,6 @@ function LevelUp(props: {
|
|||||||
karakter,
|
karakter,
|
||||||
changeTulajdonsagNoveles,
|
changeTulajdonsagNoveles,
|
||||||
changeRolledHP,
|
changeRolledHP,
|
||||||
changeHarcosSpec,
|
|
||||||
changeKalozKritikus,
|
changeKalozKritikus,
|
||||||
changeOsztaly
|
changeOsztaly
|
||||||
} = props
|
} = props
|
||||||
@@ -36,7 +34,6 @@ function LevelUp(props: {
|
|||||||
|
|
||||||
const harcosSzint = classLevels[Osztaly2E.Harcos]
|
const harcosSzint = classLevels[Osztaly2E.Harcos]
|
||||||
const kalozSzint = classLevels[Osztaly2E.Tengeresz]
|
const kalozSzint = classLevels[Osztaly2E.Tengeresz]
|
||||||
const specialization = karakter.szintlepesek[szint-1].harcosFegyver
|
|
||||||
const krit = karakter.szintlepesek[szint-1].kalozKritikus
|
const krit = karakter.szintlepesek[szint-1].kalozKritikus
|
||||||
|
|
||||||
return <div>
|
return <div>
|
||||||
@@ -66,9 +63,6 @@ function LevelUp(props: {
|
|||||||
/>
|
/>
|
||||||
{osztaly === Osztaly2E.Harcos && harcosSzint % 2 === 1 &&
|
{osztaly === Osztaly2E.Harcos && harcosSzint % 2 === 1 &&
|
||||||
<HarcosFegyverSpecializacio
|
<HarcosFegyverSpecializacio
|
||||||
specialization={specialization!}
|
|
||||||
existingSpecializations={karakter.szintlepesek.map(x => x.harcosFegyver)}
|
|
||||||
changeSpecialization={changeHarcosSpec}
|
|
||||||
szint={harcosSzint}
|
szint={harcosSzint}
|
||||||
/>
|
/>
|
||||||
}
|
}
|
||||||
@@ -103,18 +97,6 @@ export function LevelUps(props: {karakter: Karakter2E, changeKarakter: (inputs:
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
const changeHarcosSpecializacioAtSzint = (szint: number) => {
|
|
||||||
return (spec: string) => {
|
|
||||||
changeKarakter({
|
|
||||||
...karakter,
|
|
||||||
szintlepesek: arraySetN(karakter.szintlepesek, szint-1, {
|
|
||||||
...karakter.szintlepesek[szint-1],
|
|
||||||
harcosFegyver: spec
|
|
||||||
})
|
|
||||||
})
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
const changeKalozKritikusAtSzint = (szint: number) => {
|
const changeKalozKritikusAtSzint = (szint: number) => {
|
||||||
return (krit: string) => {
|
return (krit: string) => {
|
||||||
changeKarakter({
|
changeKarakter({
|
||||||
@@ -138,7 +120,6 @@ export function LevelUps(props: {karakter: Karakter2E, changeKarakter: (inputs:
|
|||||||
karakter={{...karakter, szintlepesek: karakter.szintlepesek.slice(0, szint) ,tulajdonsagok: tulajdonsagokAtSzint(szint)}}
|
karakter={{...karakter, szintlepesek: karakter.szintlepesek.slice(0, szint) ,tulajdonsagok: tulajdonsagokAtSzint(szint)}}
|
||||||
changeTulajdonsagNoveles={changeTulajdonsagNovelesAtSzint(szint)}
|
changeTulajdonsagNoveles={changeTulajdonsagNovelesAtSzint(szint)}
|
||||||
changeRolledHP={changeRolledHPAtSzint(szint)}
|
changeRolledHP={changeRolledHPAtSzint(szint)}
|
||||||
changeHarcosSpec={changeHarcosSpecializacioAtSzint(szint)}
|
|
||||||
changeKalozKritikus={changeKalozKritikusAtSzint(szint)}
|
changeKalozKritikus={changeKalozKritikusAtSzint(szint)}
|
||||||
changeOsztaly={(o) => changeKarakter(ChangeOsztalyAtSzint(karakter, o, szint))}
|
changeOsztaly={(o) => changeKarakter(ChangeOsztalyAtSzint(karakter, o, szint))}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -1,10 +1,32 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import {OverlayTrigger, Tooltip} from "react-bootstrap";
|
import {OverlayTrigger, Tooltip} from "react-bootstrap";
|
||||||
import {SignedNumberToText} from "../../shared/components/Helpers";
|
import {SignedNumberToText} from "../../shared/components/Helpers";
|
||||||
import {MasodlagosErtekekView} from "../domain-models/masodlagos_ertekek";
|
import {CalculateMasodlagosErtekek, MasodlagosErtekekView} from "../domain-models/masodlagos_ertekek";
|
||||||
|
import {useSelector} from "react-redux";
|
||||||
|
import {RootState} from "../../store";
|
||||||
|
import {characterSelector} from "../domain-models/characterSlice";
|
||||||
|
import {TulajdonsagokTotal} from "../domain-models/tulajdonsag2E";
|
||||||
|
|
||||||
function MasodlagosErtekek(props: MasodlagosErtekekView) {
|
export function MasodlagosErtekek(props: {szint?: number}) {
|
||||||
|
let karakter = useSelector.withTypes<RootState>()(characterSelector);
|
||||||
|
if (props.szint !== karakter.szint && props.szint !== undefined) {
|
||||||
|
const szintlepesek = karakter.szintlepesek.slice(0, props.szint)
|
||||||
|
karakter = {
|
||||||
|
...karakter,
|
||||||
|
tulajdonsagok: TulajdonsagokTotal({
|
||||||
|
tulajdonsagok: karakter.tulajdonsagok,
|
||||||
|
faj: karakter.faj,
|
||||||
|
szintlepesek,
|
||||||
|
}),
|
||||||
|
szint: props.szint,
|
||||||
|
szintlepesek,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const masodlagosErtekek = CalculateMasodlagosErtekek(karakter)
|
||||||
|
return <MasodlagosErtekekPresenter {...masodlagosErtekek}/>
|
||||||
|
}
|
||||||
|
|
||||||
|
export function MasodlagosErtekekPresenter(props: MasodlagosErtekekView) {
|
||||||
const { HP, VO, CelzoTB, Mentok, KozelharciTB } = props
|
const { HP, VO, CelzoTB, Mentok, KozelharciTB } = props
|
||||||
|
|
||||||
const tooltip = (
|
const tooltip = (
|
||||||
|
|||||||
@@ -7,8 +7,24 @@ import {
|
|||||||
OsztalySpecialSkills
|
OsztalySpecialSkills
|
||||||
} from "../domain-models/osztaly2E";
|
} from "../domain-models/osztaly2E";
|
||||||
import {Faj2E, SzintKorlatokFajokra} from "../domain-models/faj2E";
|
import {Faj2E, SzintKorlatokFajokra} from "../domain-models/faj2E";
|
||||||
|
import {useDispatch, useSelector} from "react-redux";
|
||||||
|
import {AppDispatch, RootState} from "../../store";
|
||||||
|
import {characterSelector, setLevel1Osztaly} from "../domain-models/characterSlice";
|
||||||
|
|
||||||
function OsztalySelector2E(props: {
|
export function OsztalySelector2E() {
|
||||||
|
const karakter = useSelector.withTypes<RootState>()(characterSelector)
|
||||||
|
const dispatch = useDispatch.withTypes<AppDispatch>()()
|
||||||
|
const currentFaj = karakter.faj
|
||||||
|
const currentOsztaly = karakter.szintlepesek[0].osztaly
|
||||||
|
const changeOsztaly = (o: Osztaly2E) => dispatch(setLevel1Osztaly(o))
|
||||||
|
return <OsztalySelector2EPresenter
|
||||||
|
currentOsztaly={currentOsztaly}
|
||||||
|
changeOsztaly={changeOsztaly}
|
||||||
|
currentFaj={currentFaj}
|
||||||
|
/>
|
||||||
|
}
|
||||||
|
|
||||||
|
export function OsztalySelector2EPresenter(props: {
|
||||||
currentFaj: Faj2E,
|
currentFaj: Faj2E,
|
||||||
currentOsztaly: Osztaly2E,
|
currentOsztaly: Osztaly2E,
|
||||||
changeOsztaly: (newOsztaly: Osztaly2E) => void
|
changeOsztaly: (newOsztaly: Osztaly2E) => void
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import {Faj2E} from "../domain-models/faj2E";
|
|||||||
import {TulajdonsagDefaults} from "../domain-models/tulajdonsag2E";
|
import {TulajdonsagDefaults} from "../domain-models/tulajdonsag2E";
|
||||||
import {
|
import {
|
||||||
setEro,
|
setEro,
|
||||||
} from "../domain-models/tulajdonsagSlice";
|
} from "../domain-models/characterSlice";
|
||||||
import '@testing-library/jest-dom'
|
import '@testing-library/jest-dom'
|
||||||
import {Provider} from "react-redux";
|
import {Provider} from "react-redux";
|
||||||
import store from "../../store";
|
import store from "../../store";
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import {
|
|||||||
KarakterTulajdonsagok,
|
KarakterTulajdonsagok,
|
||||||
Tulajdonsag2E,
|
Tulajdonsag2E,
|
||||||
} from "../domain-models/tulajdonsag2E";
|
} from "../domain-models/tulajdonsag2E";
|
||||||
import TulajdonsagInput from "./TulajdonsagInput2E";
|
import TulajdonsagInput from "../display-components/TulajdonsagInput2E";
|
||||||
import {Faj2E, TulajdonsagModositokFajokra} from "../domain-models/faj2E";
|
import {Faj2E, TulajdonsagModositokFajokra} from "../domain-models/faj2E";
|
||||||
import {useDispatch, useSelector} from "react-redux";
|
import {useDispatch, useSelector} from "react-redux";
|
||||||
import {AppDispatch, RootState} from "../../store";
|
import {AppDispatch, RootState} from "../../store";
|
||||||
@@ -12,19 +12,21 @@ import {
|
|||||||
setBolcsesseg,
|
setBolcsesseg,
|
||||||
setEgeszseg,
|
setEgeszseg,
|
||||||
setEro,
|
setEro,
|
||||||
setIntelligencia, setKarizma,
|
setIntelligencia,
|
||||||
|
setKarizma,
|
||||||
setUgyesseg,
|
setUgyesseg,
|
||||||
tulajdonsagSelector
|
} from "../domain-models/characterSlice";
|
||||||
} from "../domain-models/tulajdonsagSlice";
|
import {characterSelector} from "../domain-models/characterSlice";
|
||||||
|
|
||||||
function Tulajdonsagok(props: {
|
function Tulajdonsagok(props: {
|
||||||
currentFaj: Faj2E,
|
currentFaj?: Faj2E,
|
||||||
tulajdonsagok?: KarakterTulajdonsagok
|
tulajdonsagok?: KarakterTulajdonsagok
|
||||||
dispatch?: (action: any) => any
|
dispatch?: (action: any) => any
|
||||||
}) {
|
}) {
|
||||||
const {currentFaj} = props
|
const karakter = useSelector.withTypes<RootState>()(characterSelector)
|
||||||
const dispatch = props.dispatch ?? useDispatch.withTypes<AppDispatch>()()
|
const dispatch = props.dispatch ?? useDispatch.withTypes<AppDispatch>()()
|
||||||
const tulajdonsagok = props.tulajdonsagok ?? useSelector.withTypes<RootState>()(tulajdonsagSelector)
|
const currentFaj = props.currentFaj ?? karakter.faj
|
||||||
|
const tulajdonsagok = props.tulajdonsagok ?? karakter.tulajdonsagok
|
||||||
return <>
|
return <>
|
||||||
<div className='row'>
|
<div className='row'>
|
||||||
<h5 className='col-lg-2 col-sm-4 align-self-center'>Tulajdonságok</h5>
|
<h5 className='col-lg-2 col-sm-4 align-self-center'>Tulajdonságok</h5>
|
||||||
|
|||||||
+2
-49
@@ -1,57 +1,10 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import {Fegyver} from "../domain-models/felszereles";
|
import {Fegyver} from "../domain-models/felszereles";
|
||||||
|
import {FegyverFlags} from "../domain-models/fegyver";
|
||||||
|
|
||||||
export function FegyverFlags(fegyver: Fegyver): string {
|
|
||||||
const flags = [] as string[]
|
|
||||||
if (fegyver.Megterheltseg) {
|
|
||||||
flags.push("M")
|
|
||||||
}
|
|
||||||
if (fegyver.Harcos) {
|
|
||||||
flags.push("H")
|
|
||||||
}
|
|
||||||
if (fegyver.Masfelkezes) {
|
|
||||||
flags.push("1½K")
|
|
||||||
}
|
|
||||||
if (fegyver.Ketkezes) {
|
|
||||||
if (fegyver.Type === "kozelharci") {
|
|
||||||
flags.push("2K")
|
|
||||||
} else {
|
|
||||||
if (fegyver.KetkezesBonusz) {
|
|
||||||
flags.push("2KB")
|
|
||||||
} else {
|
|
||||||
flags.push("2KN")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (fegyver.HarciManover) {
|
|
||||||
flags.push("+2 HM")
|
|
||||||
}
|
|
||||||
if (fegyver.Alakzat){
|
|
||||||
flags.push("AL")
|
|
||||||
}
|
|
||||||
if (fegyver.Hosszu) {
|
|
||||||
flags.push("HO")
|
|
||||||
}
|
|
||||||
if (fegyver.Kabito) {
|
|
||||||
flags.push("KO")
|
|
||||||
}
|
|
||||||
if (fegyver.LovasRoham) {
|
|
||||||
flags.push("LR")
|
|
||||||
}
|
|
||||||
if (fegyver.PancelToro) {
|
|
||||||
flags.push("PT")
|
|
||||||
}
|
|
||||||
if (fegyver.PajzsZuzo) {
|
|
||||||
flags.push("PZ")
|
|
||||||
}
|
|
||||||
if (fegyver.Rohamtoro) {
|
|
||||||
flags.push("RT")
|
|
||||||
}
|
|
||||||
return flags.join(' ');
|
|
||||||
}
|
|
||||||
|
|
||||||
export function FegyverLabel(fegyver: Fegyver): string {
|
export function FegyverLabel(fegyver: Fegyver): string {
|
||||||
const serializedFlags = FegyverFlags(fegyver) + (fegyver.Megjegyzes != null ? " " + fegyver.Megjegyzes : "");
|
const serializedFlags = (FegyverFlags(fegyver) + (fegyver.Megjegyzes != null ? " " + fegyver.Megjegyzes : "")).trim();
|
||||||
const sizeLabel = fegyver.Size < 1 && fegyver.Size > 0 ? ` [1/${Math.round(1 / fegyver.Size)}]` : (fegyver.Size > 1 ? ` [${fegyver.Size}]` : '');
|
const sizeLabel = fegyver.Size < 1 && fegyver.Size > 0 ? ` [1/${Math.round(1 / fegyver.Size)}]` : (fegyver.Size > 1 ? ` [${fegyver.Size}]` : '');
|
||||||
return `${fegyver.Name}${sizeLabel} | ${serializedFlags.length > 0 ? serializedFlags + " |" : ''}${
|
return `${fegyver.Name}${sizeLabel} | ${serializedFlags.length > 0 ? serializedFlags + " |" : ''}${
|
||||||
fegyver.DamageMultiplier > 1 ? `${fegyver.DamageMultiplier}*` : ''}${
|
fegyver.DamageMultiplier > 1 ? `${fegyver.DamageMultiplier}*` : ''}${
|
||||||
@@ -0,0 +1,147 @@
|
|||||||
|
import {createSlice} from "@reduxjs/toolkit";
|
||||||
|
import {Faj2E, TulajdonsagokFajjal} from "./faj2E";
|
||||||
|
import {JellemID} from "./jellem";
|
||||||
|
import {DefaultKarakter, Karakter2E} from "./karakter2E";
|
||||||
|
import {RollAllAbilities} from "./tulajdonsag2E";
|
||||||
|
import {Osztaly2E} from "./osztaly2E";
|
||||||
|
import {arraySetN} from "../../util";
|
||||||
|
import {GetNumberOfKepzettsegek, KepzettsegId} from "./kepzettsegek2E";
|
||||||
|
import {BaseHP} from "./masodlagos_ertekek";
|
||||||
|
|
||||||
|
export const characterSlice = createSlice({
|
||||||
|
name: "character2E",
|
||||||
|
initialState: DefaultKarakter,
|
||||||
|
reducers: {
|
||||||
|
setNev: (state, action: { payload: string }) => {
|
||||||
|
state.nev = action.payload;
|
||||||
|
},
|
||||||
|
setIsten: (state, action: { payload: string }) => {
|
||||||
|
state.isten = action.payload;
|
||||||
|
},
|
||||||
|
setJellem: (state, action: { payload: JellemID }) => {
|
||||||
|
state.jellem = action.payload;
|
||||||
|
},
|
||||||
|
setFaj: (state, action: { payload: Faj2E }) => {
|
||||||
|
state.faj = action.payload;
|
||||||
|
const tulajdonsagokFajjal = TulajdonsagokFajjal(state.tulajdonsagok, state.faj)
|
||||||
|
const numberOfKepzettsegek = GetNumberOfKepzettsegek(tulajdonsagokFajjal.t_int, state.faj)
|
||||||
|
state.kepzettsegek = state.kepzettsegek.slice(0, numberOfKepzettsegek);
|
||||||
|
state.kepzettsegFajError = getKepzettsegErrorForFaj(action.payload, [...state.kepzettsegek, ...(state.tolvajKepzettsegek || [])])
|
||||||
|
},
|
||||||
|
rollAbilities: (state) => {
|
||||||
|
state.tulajdonsagok = RollAllAbilities()
|
||||||
|
},
|
||||||
|
setEro: (state, action: {payload: number}) => {
|
||||||
|
state.tulajdonsagok.t_ero = action.payload;
|
||||||
|
},
|
||||||
|
setUgyesseg: (state, action: {payload: number}) => {
|
||||||
|
state.tulajdonsagok.t_ugy = action.payload;
|
||||||
|
},
|
||||||
|
setEgeszseg: (state, action: {payload: number}) => {
|
||||||
|
state.tulajdonsagok.t_egs = action.payload;
|
||||||
|
},
|
||||||
|
setIntelligencia: (state, action: {payload: number}) => {
|
||||||
|
state.tulajdonsagok.t_int = action.payload;
|
||||||
|
const tulajdonsagokFajjal = TulajdonsagokFajjal(state.tulajdonsagok, state.faj)
|
||||||
|
const numberOfKepzettsegek = GetNumberOfKepzettsegek(tulajdonsagokFajjal.t_int, state.faj)
|
||||||
|
state.kepzettsegek = state.kepzettsegek.slice(0, numberOfKepzettsegek);
|
||||||
|
},
|
||||||
|
setBolcsesseg: (state, action: {payload: number}) => {
|
||||||
|
state.tulajdonsagok.t_bol = action.payload;
|
||||||
|
},
|
||||||
|
setKarizma: (state, action: {payload: number}) => {
|
||||||
|
state.tulajdonsagok.t_kar = action.payload;
|
||||||
|
},
|
||||||
|
setLevel1Osztaly : (state, action: {payload: Osztaly2E}) => {
|
||||||
|
const szintlepesek = [{...state.szintlepesek[0], HProll: BaseHP(action.payload) , osztaly: action.payload}, ...state.szintlepesek.slice(1)]
|
||||||
|
state.szintlepesek = szintlepesek
|
||||||
|
// if character is not a tolvaj anymore remove all tolvaj kepzettsegek
|
||||||
|
if (szintlepesek.every(l => l.osztaly !== Osztaly2E.Tolvaj)){
|
||||||
|
state.tolvajKepzettsegek = [];
|
||||||
|
state.kepzettsegFajError = getKepzettsegErrorForFaj(state.faj, [...state.kepzettsegek])
|
||||||
|
}
|
||||||
|
const osztalyok = new Set(szintlepesek.map(x => x.osztaly))
|
||||||
|
state.kepzettsegOsztalyError = getKepzettsegErrorForOsztaly(osztalyok, state.kepzettsegek);
|
||||||
|
},
|
||||||
|
setCharacter: (state, action: {payload: Karakter2E}) => {
|
||||||
|
state = action.payload
|
||||||
|
const osztalyok = new Set(state.szintlepesek.map(x => x.osztaly))
|
||||||
|
state.kepzettsegOsztalyError = getKepzettsegErrorForOsztaly(osztalyok, state.kepzettsegek);
|
||||||
|
return state;
|
||||||
|
},
|
||||||
|
setHarcosSpecialization: (state, action: {payload: {szint: number, fegyver: string}}) => {
|
||||||
|
const idx = action.payload.szint - 1
|
||||||
|
const szintlepes = {
|
||||||
|
...state.szintlepesek[idx],
|
||||||
|
harcosFegyver: action.payload.fegyver,
|
||||||
|
}
|
||||||
|
state.szintlepesek = arraySetN(state.szintlepesek, idx, szintlepes)
|
||||||
|
},
|
||||||
|
setKepzettsegek: (state, action: {payload: KepzettsegId[]}) => {
|
||||||
|
state.kepzettsegek = action.payload;
|
||||||
|
state.kepzettsegFajError = getKepzettsegErrorForFaj(state.faj, [...action.payload, ...(state.tolvajKepzettsegek || [])])
|
||||||
|
const osztalyok = new Set(state.szintlepesek.map(x => x.osztaly))
|
||||||
|
state.kepzettsegOsztalyError = getKepzettsegErrorForOsztaly(osztalyok, action.payload);
|
||||||
|
},
|
||||||
|
setTolvajKepzettsegek: (state, action: {payload: KepzettsegId[]}) => {
|
||||||
|
state.tolvajKepzettsegek = action.payload;
|
||||||
|
state.kepzettsegFajError = getKepzettsegErrorForFaj(state.faj, [...state.kepzettsegek, ...action.payload])
|
||||||
|
},
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const getKepzettsegErrorForFaj = (faj: Faj2E, kepzettsegek: KepzettsegId[]) : (string | undefined) => {
|
||||||
|
if (faj === Faj2E.Eszaki && kepzettsegek.every(x => x !== "k_hajozas")){
|
||||||
|
return "Szomjan haltál miután északi létedre, hajódat zátonyra futtatad a tengeren :("
|
||||||
|
}
|
||||||
|
if (faj === Faj2E.Nomad && kepzettsegek.every(x => x !== "k_lovaglas")){
|
||||||
|
return "Minden nomád lovon születik!"
|
||||||
|
}
|
||||||
|
if (faj === Faj2E.Birodalmi && kepzettsegek.every(x =>
|
||||||
|
x !== "k_alkimia" && x !== "k_meregkeveres" && x !== "k_okkultizmus")){
|
||||||
|
return "Belehaltál a birodalmi intrikákba :("
|
||||||
|
}
|
||||||
|
if (faj === Faj2E.Torpe && kepzettsegek.every(x => x !== "k_ertekbecsles")){
|
||||||
|
return "Törpeként a hegy mélyére sűllyedtél szégyenedben mikor átvertek egy drágakő eladásakor :("
|
||||||
|
}
|
||||||
|
if ((faj === Faj2E.Elf || faj === Faj2E.Felelf) && kepzettsegek.every(x => x !== "k_vadonjaras")){
|
||||||
|
return "Eltévedtél az elf vadonban és éhen haltál :("
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const getKepzettsegErrorForOsztaly = (osztalyok: Set<Osztaly2E>, kepzettsegek: KepzettsegId[]) : (string | undefined) => {
|
||||||
|
if (osztalyok.has(Osztaly2E.Druida) && kepzettsegek.every(x => x !== "k_vadonjaras")) {
|
||||||
|
return "Druida létedre, eltévedtél a vadonban és éhen haltál :("
|
||||||
|
}
|
||||||
|
if (osztalyok.has(Osztaly2E.Vandor) && kepzettsegek.every(x => x !== "k_vadonjaras")) {
|
||||||
|
return "Vándor létedre, eltévedtél a vadonban és éhen haltál :("
|
||||||
|
}
|
||||||
|
if (osztalyok.has(Osztaly2E.Dalnok) && kepzettsegek.every(x => x !== "k_eloadas")) {
|
||||||
|
return "Az előadásodat rohadt paradicsomok zápora szakította meg, karriered csúfos véget ért :("
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const {
|
||||||
|
setCharacter,
|
||||||
|
setNev,
|
||||||
|
setJellem,
|
||||||
|
setFaj,
|
||||||
|
setIsten,
|
||||||
|
setEro,
|
||||||
|
setUgyesseg,
|
||||||
|
setEgeszseg,
|
||||||
|
setIntelligencia,
|
||||||
|
setBolcsesseg,
|
||||||
|
setKarizma,
|
||||||
|
rollAbilities,
|
||||||
|
setLevel1Osztaly,
|
||||||
|
setHarcosSpecialization,
|
||||||
|
setKepzettsegek,
|
||||||
|
setTolvajKepzettsegek,
|
||||||
|
} = characterSlice.actions
|
||||||
|
|
||||||
|
export const characterSelector = characterSlice.selectSlice
|
||||||
|
|
||||||
|
export default characterSlice.reducer
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
import {Fegyver} from "./felszereles";
|
||||||
|
|
||||||
|
export function FegyverFlags(fegyver: Fegyver): string {
|
||||||
|
const flags = [] as string[]
|
||||||
|
if (fegyver.Megterheltseg) {
|
||||||
|
flags.push("M")
|
||||||
|
}
|
||||||
|
if (fegyver.Harcos) {
|
||||||
|
flags.push("H")
|
||||||
|
}
|
||||||
|
if (fegyver.Masfelkezes) {
|
||||||
|
flags.push("1½K")
|
||||||
|
}
|
||||||
|
if (fegyver.Ketkezes) {
|
||||||
|
if (fegyver.Type === "kozelharci") {
|
||||||
|
flags.push("2K")
|
||||||
|
} else {
|
||||||
|
if (fegyver.KetkezesBonusz) {
|
||||||
|
flags.push("2KB")
|
||||||
|
} else {
|
||||||
|
flags.push("2KN")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (fegyver.HarciManover) {
|
||||||
|
flags.push("+2 HM")
|
||||||
|
}
|
||||||
|
if (fegyver.Alakzat){
|
||||||
|
flags.push("AL")
|
||||||
|
}
|
||||||
|
if (fegyver.Hosszu) {
|
||||||
|
flags.push("HO")
|
||||||
|
}
|
||||||
|
if (fegyver.Kabito) {
|
||||||
|
flags.push("KO")
|
||||||
|
}
|
||||||
|
if (fegyver.LovasRoham) {
|
||||||
|
flags.push("LR")
|
||||||
|
}
|
||||||
|
if (fegyver.PancelToro) {
|
||||||
|
flags.push("PT")
|
||||||
|
}
|
||||||
|
if (fegyver.PajzsZuzo) {
|
||||||
|
flags.push("PZ")
|
||||||
|
}
|
||||||
|
if (fegyver.Rohamtoro) {
|
||||||
|
flags.push("RT")
|
||||||
|
}
|
||||||
|
return flags.join(' ');
|
||||||
|
}
|
||||||
@@ -10,6 +10,7 @@ import {BaseHP} from "./masodlagos_ertekek";
|
|||||||
import {dAny} from "../../shared/domain-models/kockak";
|
import {dAny} from "../../shared/domain-models/kockak";
|
||||||
|
|
||||||
export interface Karakter2E {
|
export interface Karakter2E {
|
||||||
|
id?: string,
|
||||||
nev: string,
|
nev: string,
|
||||||
nem?: string,
|
nem?: string,
|
||||||
kor: number,
|
kor: number,
|
||||||
@@ -17,7 +18,9 @@ export interface Karakter2E {
|
|||||||
jellem: JellemID,
|
jellem: JellemID,
|
||||||
tulajdonsagok: KarakterTulajdonsagok
|
tulajdonsagok: KarakterTulajdonsagok
|
||||||
faj: Faj2E
|
faj: Faj2E
|
||||||
kepzettsegek: KepzettsegId[]
|
kepzettsegek: KepzettsegId[],
|
||||||
|
kepzettsegFajError?: string,
|
||||||
|
kepzettsegOsztalyError?: string,
|
||||||
tolvajKepzettsegek?: KepzettsegId[]
|
tolvajKepzettsegek?: KepzettsegId[]
|
||||||
szint: number,
|
szint: number,
|
||||||
felszereles: KarakterFelszereles,
|
felszereles: KarakterFelszereles,
|
||||||
@@ -30,7 +33,12 @@ export const DefaultKarakter: Karakter2E = {
|
|||||||
jellem: 'S',
|
jellem: 'S',
|
||||||
tulajdonsagok: TulajdonsagDefaults,
|
tulajdonsagok: TulajdonsagDefaults,
|
||||||
faj: Faj2E.Ember,
|
faj: Faj2E.Ember,
|
||||||
kepzettsegek: [],
|
kepzettsegek: [
|
||||||
|
"k_maszas",
|
||||||
|
"k_ugras",
|
||||||
|
"k_uszas",
|
||||||
|
"k_osonas"
|
||||||
|
],
|
||||||
tolvajKepzettsegek: [],
|
tolvajKepzettsegek: [],
|
||||||
szint: 1,
|
szint: 1,
|
||||||
felszereles: DefaultFelszereles,
|
felszereles: DefaultFelszereles,
|
||||||
|
|||||||
@@ -241,104 +241,60 @@ export function SetDefaultTolvajKepzettsegek(karakter: Pick<Karakter2E, 'szintle
|
|||||||
|
|
||||||
export function GetKepzettsegListaN(karakter: Pick<Karakter2E, 'szintlepesek' | 'faj' | 'kepzettsegek' | 'tolvajKepzettsegek'>) {
|
export function GetKepzettsegListaN(karakter: Pick<Karakter2E, 'szintlepesek' | 'faj' | 'kepzettsegek' | 'tolvajKepzettsegek'>) {
|
||||||
const osztalyok = new Set(karakter.szintlepesek.map(x => x.osztaly))
|
const osztalyok = new Set(karakter.szintlepesek.map(x => x.osztaly))
|
||||||
const availableKepzettsegList = AvailableKezpettsegList(...osztalyok)
|
let availableKepzettsegList = AvailableKezpettsegList(...osztalyok)
|
||||||
|
if (karakter.faj === Faj2E.Birodalmi && availableKepzettsegList.every(x => x.Id !== "k_okkultizmus")) {
|
||||||
|
availableKepzettsegList = [Kepzettsegek.k_okkultizmus, ...availableKepzettsegList]
|
||||||
|
}
|
||||||
|
if (karakter.faj === Faj2E.Birodalmi && availableKepzettsegList.every(x => x.Id !== "k_meregkeveres")) {
|
||||||
|
availableKepzettsegList = [Kepzettsegek.k_meregkeveres, ...availableKepzettsegList]
|
||||||
|
}
|
||||||
|
if (karakter.faj === Faj2E.Birodalmi && availableKepzettsegList.every(x => x.Id !== "k_alkimia")) {
|
||||||
|
availableKepzettsegList = [Kepzettsegek.k_alkimia, ...availableKepzettsegList]
|
||||||
|
}
|
||||||
return (n: number): Kepzettseg[] => {
|
return (n: number): Kepzettseg[] => {
|
||||||
let available = [...availableKepzettsegList]
|
let available = [...availableKepzettsegList]
|
||||||
if (n === 0) {
|
// if (n === 0) {
|
||||||
if (karakter.faj === Faj2E.Eszaki) {
|
// if (karakter.faj === Faj2E.Eszaki) {
|
||||||
return [Kepzettsegek.k_hajozas]
|
// return [Kepzettsegek.k_hajozas]
|
||||||
}
|
// }
|
||||||
if (karakter.faj === Faj2E.Nomad) {
|
// if (karakter.faj === Faj2E.Nomad) {
|
||||||
return [Kepzettsegek.k_lovaglas]
|
// return [Kepzettsegek.k_lovaglas]
|
||||||
}
|
// }
|
||||||
// TODO birodalmi tolvaj, tolvajképzettségek!
|
// // TODO birodalmi tolvaj, tolvajképzettségek!
|
||||||
if (karakter.faj === Faj2E.Birodalmi) {
|
// if (karakter.faj === Faj2E.Birodalmi) {
|
||||||
return [Kepzettsegek.k_alkimia, Kepzettsegek.k_meregkeveres, Kepzettsegek.k_okkultizmus]
|
// return [Kepzettsegek.k_alkimia, Kepzettsegek.k_meregkeveres, Kepzettsegek.k_okkultizmus]
|
||||||
}
|
// }
|
||||||
if (karakter.faj === Faj2E.Torpe) {
|
// if (karakter.faj === Faj2E.Torpe) {
|
||||||
return [Kepzettsegek.k_ertekbecsles]
|
// return [Kepzettsegek.k_ertekbecsles]
|
||||||
}
|
// }
|
||||||
if (karakter.faj === Faj2E.Elf || karakter.faj === Faj2E.Felelf) {
|
// if (karakter.faj === Faj2E.Elf || karakter.faj === Faj2E.Felelf) {
|
||||||
return [Kepzettsegek.k_vadonjaras]
|
// return [Kepzettsegek.k_vadonjaras]
|
||||||
}
|
// }
|
||||||
if (osztalyok.has(Osztaly2E.Druida) || osztalyok.has(Osztaly2E.Vandor)) {
|
// if (osztalyok.has(Osztaly2E.Druida) || osztalyok.has(Osztaly2E.Vandor)) {
|
||||||
return [Kepzettsegek.k_vadonjaras]
|
// return [Kepzettsegek.k_vadonjaras]
|
||||||
}
|
// }
|
||||||
if (osztalyok.has(Osztaly2E.Dalnok)) {
|
// if (osztalyok.has(Osztaly2E.Dalnok)) {
|
||||||
return [Kepzettsegek.k_eloadas]
|
// return [Kepzettsegek.k_eloadas]
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
if (n === 1) {
|
// if (n === 1) {
|
||||||
if ((osztalyok.has(Osztaly2E.Vandor) || osztalyok.has(Osztaly2E.Druida))
|
// if ((osztalyok.has(Osztaly2E.Vandor) || osztalyok.has(Osztaly2E.Druida))
|
||||||
&& karakter.kepzettsegek[0] !== Kepzettsegek.k_vadonjaras.Id) {
|
// && karakter.kepzettsegek[0] !== Kepzettsegek.k_vadonjaras.Id) {
|
||||||
return [Kepzettsegek.k_vadonjaras]
|
// return [Kepzettsegek.k_vadonjaras]
|
||||||
}
|
// }
|
||||||
if (osztalyok.has(Osztaly2E.Dalnok)
|
// if (osztalyok.has(Osztaly2E.Dalnok)
|
||||||
&& karakter.kepzettsegek[0] !== Kepzettsegek.k_eloadas.Id) {
|
// && karakter.kepzettsegek[0] !== Kepzettsegek.k_eloadas.Id) {
|
||||||
return [Kepzettsegek.k_eloadas]
|
// return [Kepzettsegek.k_eloadas]
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
if (n === 2) { // maybe write a better abstraction?
|
// if (n === 2) { // maybe write a better abstraction?
|
||||||
if (osztalyok.has(Osztaly2E.Dalnok)
|
// if (osztalyok.has(Osztaly2E.Dalnok)
|
||||||
&& karakter.kepzettsegek[0] !== Kepzettsegek.k_eloadas.Id
|
// && karakter.kepzettsegek[0] !== Kepzettsegek.k_eloadas.Id
|
||||||
&& karakter.kepzettsegek[1] !== Kepzettsegek.k_eloadas.Id) {
|
// && karakter.kepzettsegek[1] !== Kepzettsegek.k_eloadas.Id) {
|
||||||
return [Kepzettsegek.k_eloadas]
|
// return [Kepzettsegek.k_eloadas]
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
const kepzettsegekWithoutN = [...karakter.kepzettsegek.slice(0, n), ...karakter.kepzettsegek.slice(n + 1)]
|
const kepzettsegekWithoutN = [...karakter.kepzettsegek.slice(0, n), ...karakter.kepzettsegek.slice(n + 1)]
|
||||||
return available.filter(x => !kepzettsegekWithoutN.includes(x.Id) && !karakter.tolvajKepzettsegek?.includes(x.Id))
|
return available.filter(x => !kepzettsegekWithoutN.includes(x.Id) && !karakter.tolvajKepzettsegek?.includes(x.Id))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function SetDefaultKepzettsegek(karakter: Pick<Karakter2E, 'szintlepesek' | 'faj' | 'tulajdonsagok' | 'kepzettsegek' | 'tolvajKepzettsegek'>, changeKepzettsegek: (k: KepzettsegId[]) => void) {
|
|
||||||
const osztalyok = karakter.szintlepesek.map(x => x.osztaly)
|
|
||||||
const availableKepzettsegList = AvailableKezpettsegList(...osztalyok)
|
|
||||||
const numberOfKepzettsegek = GetNumberOfKepzettsegek(karakter.tulajdonsagok.t_int, karakter.faj, availableKepzettsegList.length)
|
|
||||||
let kepzettsegek = [...karakter.kepzettsegek]
|
|
||||||
|
|
||||||
let mustChangeKepzettsegek = false
|
|
||||||
|
|
||||||
const restrictedKepzettsegek = GetKepzettsegListaN(karakter)(0)
|
|
||||||
if (kepzettsegek.length === 0) {
|
|
||||||
if (restrictedKepzettsegek.length > 0) {
|
|
||||||
kepzettsegek.push(restrictedKepzettsegek[0].Id)
|
|
||||||
mustChangeKepzettsegek = true
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (!restrictedKepzettsegek.includes(Kepzettsegek[kepzettsegek[0]])) {
|
|
||||||
kepzettsegek[0] = restrictedKepzettsegek[0].Id
|
|
||||||
mustChangeKepzettsegek = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// // TODO: really fix this sometimes.
|
|
||||||
// const uglyDoubleRestrictedKepzettsegek = GetKepzettsegListaN(karakter)(1)
|
|
||||||
// if (kepzettsegek.length === 1) {
|
|
||||||
// if (uglyDoubleRestrictedKepzettsegek.length > 0) {
|
|
||||||
// kepzettsegek.push(uglyDoubleRestrictedKepzettsegek[0].Id)
|
|
||||||
// mustChangeKepzettsegek = true
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// if (!uglyDoubleRestrictedKepzettsegek.includes(Kepzettsegek[kepzettsegek[1]])) {
|
|
||||||
// kepzettsegek[1] = uglyDoubleRestrictedKepzettsegek[0].Id
|
|
||||||
// mustChangeKepzettsegek = true
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
if (kepzettsegek.length < numberOfKepzettsegek) {
|
|
||||||
for (let i = kepzettsegek.length; i < numberOfKepzettsegek; i++) {
|
|
||||||
const kepzettsegLista = GetKepzettsegListaN({...karakter, kepzettsegek})(i)
|
|
||||||
if (kepzettsegLista.length > 0) {
|
|
||||||
kepzettsegek.push(kepzettsegLista[0].Id)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
mustChangeKepzettsegek = true
|
|
||||||
}
|
|
||||||
if (kepzettsegek.length > numberOfKepzettsegek){
|
|
||||||
kepzettsegek = kepzettsegek.slice(0, numberOfKepzettsegek)
|
|
||||||
mustChangeKepzettsegek = true
|
|
||||||
}
|
|
||||||
if (mustChangeKepzettsegek){
|
|
||||||
changeKepzettsegek(kepzettsegek)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
import {createSlice} from "@reduxjs/toolkit";
|
|
||||||
import {RollAllAbilities, TulajdonsagDefaults} from "./tulajdonsag2E";
|
|
||||||
|
|
||||||
export const tulajdonsagSlice = createSlice({
|
|
||||||
name: "tulajdonsag2E",
|
|
||||||
initialState: TulajdonsagDefaults,
|
|
||||||
reducers: {
|
|
||||||
rollAbilities: (state) => {
|
|
||||||
state = RollAllAbilities()
|
|
||||||
return state;
|
|
||||||
},
|
|
||||||
setEro: (state, action: {payload: number}) => {
|
|
||||||
state.t_ero = action.payload;
|
|
||||||
},
|
|
||||||
setUgyesseg: (state, action: {payload: number}) => {
|
|
||||||
state.t_ugy = action.payload;
|
|
||||||
},
|
|
||||||
setEgeszseg: (state, action: {payload: number}) => {
|
|
||||||
state.t_egs = action.payload;
|
|
||||||
},
|
|
||||||
setIntelligencia: (state, action: {payload: number}) => {
|
|
||||||
state.t_int = action.payload;
|
|
||||||
},
|
|
||||||
setBolcsesseg: (state, action: {payload: number}) => {
|
|
||||||
state.t_bol = action.payload;
|
|
||||||
},
|
|
||||||
setKarizma: (state, action: {payload: number}) => {
|
|
||||||
state.t_kar = action.payload;
|
|
||||||
},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
export const { rollAbilities, setEro, setUgyesseg, setEgeszseg, setIntelligencia, setBolcsesseg, setKarizma } = tulajdonsagSlice.actions
|
|
||||||
|
|
||||||
export const tulajdonsagSelector = tulajdonsagSlice.selectSlice;
|
|
||||||
|
|
||||||
export default tulajdonsagSlice.reducer
|
|
||||||
@@ -1,39 +1,28 @@
|
|||||||
import React, {useState} from 'react'
|
import React, {useState} from 'react'
|
||||||
import {useLoaderData, useNavigate, useParams} from "react-router-dom";
|
import {useLoaderData, useNavigate, useParams} from "react-router-dom";
|
||||||
import {OverlayTrigger, Toast, ToastContainer} from "react-bootstrap";
|
import {OverlayTrigger, Toast, ToastContainer} from "react-bootstrap";
|
||||||
import {ChangeLvl1Osztaly, DefaultKarakter, Karakter2E} from "../domain-models/karakter2E";
|
import {Karakter2E} from "../domain-models/karakter2E";
|
||||||
import FajSelector2E from "../components/FajSelector2E";
|
|
||||||
import Tulajdonsagok2E from "../components/Tulajdonsagok2E";
|
import Tulajdonsagok2E from "../components/Tulajdonsagok2E";
|
||||||
import OsztalySelector2E from "../components/OsztalySelector2E";
|
import OsztalySelector2E from "../components/OsztalySelector2E";
|
||||||
import {Osztaly2E} from "../domain-models/osztaly2E";
|
import {Osztaly2E} from "../domain-models/osztaly2E";
|
||||||
import {
|
|
||||||
GetKepzettsegListaN,
|
|
||||||
GetNumberOfKepzettsegek,
|
|
||||||
KepzettsegId,
|
|
||||||
SetDefaultKepzettsegek,
|
|
||||||
SetDefaultTolvajKepzettsegek
|
|
||||||
} from "../domain-models/kepzettsegek2E";
|
|
||||||
import KarakterKepzettsegek from "../components/KarakterKepzettsegek2E";
|
import KarakterKepzettsegek from "../components/KarakterKepzettsegek2E";
|
||||||
import {TulajdonsagokFajjal} from "../domain-models/faj2E";
|
|
||||||
import JellemSelector from "../components/JellemSelector";
|
|
||||||
import MasodlagosErtekek from "../components/MasodlagosErtekek";
|
import MasodlagosErtekek from "../components/MasodlagosErtekek";
|
||||||
import {CalculateMasodlagosErtekek} from "../domain-models/masodlagos_ertekek";
|
|
||||||
import Felszereles from "../components/Felszereles";
|
import Felszereles from "../components/Felszereles";
|
||||||
import {KarakterFelszereles} from "../domain-models/felszereles";
|
import {KarakterFelszereles} from "../domain-models/felszereles";
|
||||||
import LevelUps from "../components/LevelUps";
|
import LevelUps from "../components/LevelUps";
|
||||||
import {LevelDown, LevelUp} from "../domain-models/szintlepes";
|
import {LevelDown, LevelUp} from "../domain-models/szintlepes";
|
||||||
import HarcosFegyverSpecializacio from "../components/HarcosFegyverSpec";
|
import HarcosFegyverSpecializacio from "../components/HarcosFegyverSpec";
|
||||||
import {arraySetN} from "../../util";
|
|
||||||
import saveOverlayTooltip from "../../first-edition/components/SaveOverlayTooltip";
|
import saveOverlayTooltip from "../../first-edition/components/SaveOverlayTooltip";
|
||||||
import {StoreNewCharacter2E, UpdateCharacter2E} from "../api/character.api";
|
import {StoreNewCharacter2E, UpdateCharacter2E} from "../api/character.api";
|
||||||
import {Faro} from "@grafana/faro-web-sdk";
|
import {Faro} from "@grafana/faro-web-sdk";
|
||||||
import {CreatePDF} from "../pdf/character.pdf";
|
import {CreatePDF} from "../pdf/character.pdf";
|
||||||
import {KarakterInputToPdfView} from "../pdf/karakter_pdf_view";
|
import {KarakterInputToPdfView} from "../pdf/karakter_pdf_view";
|
||||||
import {useSelector} from "react-redux";
|
import {useDispatch, useSelector} from "react-redux";
|
||||||
import {RootState} from "../../store";
|
import {AppDispatch, RootState} from "../../store";
|
||||||
import {userSelector} from "../../shared/domain-models/userSlice";
|
import {userSelector} from "../../shared/domain-models/userSlice";
|
||||||
import {SaveModal} from "../../shared/components/SaveModal";
|
import {SaveModal} from "../../shared/components/SaveModal";
|
||||||
import {tulajdonsagSelector} from "../domain-models/tulajdonsagSlice";
|
import {characterSelector, setCharacter} from "../domain-models/characterSlice";
|
||||||
|
import KarakterSzarmazas from "../components/KarakterSzarmazas";
|
||||||
|
|
||||||
function CreateCharacter2E(props: {
|
function CreateCharacter2E(props: {
|
||||||
faro?: Faro
|
faro?: Faro
|
||||||
@@ -42,21 +31,13 @@ function CreateCharacter2E(props: {
|
|||||||
const { id } = useParams();
|
const { id } = useParams();
|
||||||
const fetchedUser = useSelector.withTypes<RootState>()(userSelector);
|
const fetchedUser = useSelector.withTypes<RootState>()(userSelector);
|
||||||
const loaderData = useLoaderData() as Karakter2E & { isPublic: boolean } | undefined;
|
const loaderData = useLoaderData() as Karakter2E & { isPublic: boolean } | undefined;
|
||||||
let initialKarakterInputs = DefaultKarakter;
|
const dispatch = useDispatch.withTypes<AppDispatch>()()
|
||||||
if (loaderData != null) {
|
|
||||||
const { isPublic: t1, ...t2 } = loaderData;
|
|
||||||
initialKarakterInputs = t2
|
|
||||||
}
|
|
||||||
const initialIsPublic = loaderData?.isPublic ?? fetchedUser?.email == null;
|
const initialIsPublic = loaderData?.isPublic ?? fetchedUser?.email == null;
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
|
|
||||||
const [karakter, setKarakter] = useState(initialKarakterInputs)
|
const karakter = useSelector.withTypes<RootState>()(characterSelector)
|
||||||
karakter.tulajdonsagok = useSelector.withTypes<RootState>()(tulajdonsagSelector)
|
const setKarakter = (newState: Karakter2E) => dispatch(setCharacter(newState));
|
||||||
const tulajdonsagokFajjal = TulajdonsagokFajjal(karakter.tulajdonsagok, karakter.faj)
|
|
||||||
const changeKepzettseg = (k: KepzettsegId[]) => setKarakter({...karakter, kepzettsegek: k})
|
|
||||||
const changeTolvajKepzettseg = (tk?: KepzettsegId[]) => setKarakter({...karakter, tolvajKepzettsegek: tk})
|
|
||||||
SetDefaultTolvajKepzettsegek(karakter, changeTolvajKepzettseg)
|
|
||||||
SetDefaultKepzettsegek({...karakter, tulajdonsagok: tulajdonsagokFajjal}, changeKepzettseg)
|
|
||||||
|
|
||||||
const changeFelszereles = (f: KarakterFelszereles) => setKarakter({...karakter, felszereles: f})
|
const changeFelszereles = (f: KarakterFelszereles) => setKarakter({...karakter, felszereles: f})
|
||||||
|
|
||||||
@@ -67,7 +48,6 @@ function CreateCharacter2E(props: {
|
|||||||
const newCharacterUrl = () => `${window.location.origin}/2e/karakter/${newId}`
|
const newCharacterUrl = () => `${window.location.origin}/2e/karakter/${newId}`
|
||||||
|
|
||||||
const handleSaveModalCopyAndClose = async () => {
|
const handleSaveModalCopyAndClose = async () => {
|
||||||
|
|
||||||
await navigator.clipboard.writeText(newCharacterUrl());
|
await navigator.clipboard.writeText(newCharacterUrl());
|
||||||
handleSaveModalClose()
|
handleSaveModalClose()
|
||||||
}
|
}
|
||||||
@@ -119,70 +99,19 @@ function CreateCharacter2E(props: {
|
|||||||
<div className='row'>
|
<div className='row'>
|
||||||
<h5 className='col align-self-center'>Származás</h5>
|
<h5 className='col align-self-center'>Származás</h5>
|
||||||
</div>
|
</div>
|
||||||
<div className='row m-2'>
|
<KarakterSzarmazas/>
|
||||||
<label className='col-md-2 col-sm-3 col-form-label'>Név</label>
|
|
||||||
<input className='col form-control'
|
|
||||||
value={karakter.nev}
|
|
||||||
data-testid="nev"
|
|
||||||
onChange={(e) => setKarakter({...karakter, nev: e.target.value})}/>
|
|
||||||
{!karakter.nev &&
|
|
||||||
<span className='form-field-error'>A karaktered nem mászkálhat névtelenül a világban!</span>}
|
|
||||||
</div>
|
|
||||||
<JellemSelector selected={karakter.jellem}
|
|
||||||
changeJellem={(val) => setKarakter({...karakter, jellem: val})}/>
|
|
||||||
<div className='row m-2'>
|
|
||||||
<label className='col-md-2 col-sm-3 col-form-label'>Választott istenség</label>
|
|
||||||
<input className='col form-control'
|
|
||||||
value={karakter.isten}
|
|
||||||
data-testid="isten"
|
|
||||||
onChange={(e) => setKarakter({...karakter, isten: e.target.value})}/>
|
|
||||||
</div>
|
|
||||||
<FajSelector2E
|
|
||||||
changeFaj={faj => setKarakter({...karakter, faj})}
|
|
||||||
faj={karakter.faj}
|
|
||||||
/>
|
|
||||||
<hr/>
|
<hr/>
|
||||||
<Tulajdonsagok2E
|
<Tulajdonsagok2E/>
|
||||||
currentFaj={karakter.faj}
|
|
||||||
/>
|
|
||||||
<hr/>
|
<hr/>
|
||||||
<div className='row'>
|
<div className='row'>
|
||||||
<h5 className='col align-self-center'>Tanult</h5>
|
<h5 className='col align-self-center'>Tanult</h5>
|
||||||
</div>
|
</div>
|
||||||
<OsztalySelector2E
|
<OsztalySelector2E />
|
||||||
currentFaj={karakter.faj}
|
{karakter.szintlepesek[0].osztaly === Osztaly2E.Harcos && <HarcosFegyverSpecializacio szint={1}/>}
|
||||||
currentOsztaly={karakter.szintlepesek[0].osztaly}
|
<KarakterKepzettsegek />
|
||||||
changeOsztaly={o => setKarakter(ChangeLvl1Osztaly(karakter, o))}
|
|
||||||
/>
|
|
||||||
{karakter.szintlepesek[0].osztaly === Osztaly2E.Harcos &&
|
|
||||||
<HarcosFegyverSpecializacio
|
|
||||||
specialization={karakter.szintlepesek[0].harcosFegyver || 'kard_hosszu'}
|
|
||||||
szint={1}
|
|
||||||
changeSpecialization={(spec) => setKarakter({
|
|
||||||
...karakter,
|
|
||||||
szintlepesek: arraySetN(karakter.szintlepesek, 0, {
|
|
||||||
...karakter.szintlepesek[0],
|
|
||||||
harcosFegyver: spec
|
|
||||||
})
|
|
||||||
})}
|
|
||||||
existingSpecializations={karakter.szintlepesek.map(x => x.harcosFegyver)}
|
|
||||||
/>}
|
|
||||||
<KarakterKepzettsegek
|
|
||||||
getKepzettsegListaN={GetKepzettsegListaN(karakter)}
|
|
||||||
numberOfKepzettsegek={GetNumberOfKepzettsegek(tulajdonsagokFajjal.t_int, karakter.faj)}
|
|
||||||
kepzettsegek={karakter.kepzettsegek}
|
|
||||||
changeKepzettsegek={changeKepzettseg}
|
|
||||||
tolvajKepzettsegek={karakter.tolvajKepzettsegek || []}
|
|
||||||
changeTolvajKepzettsegek={changeTolvajKepzettseg}
|
|
||||||
/>
|
|
||||||
<hr/>
|
<hr/>
|
||||||
{/* 1. szinten */}
|
{/* 1. szinten */}
|
||||||
<MasodlagosErtekek {...CalculateMasodlagosErtekek({
|
<MasodlagosErtekek szint={1} />
|
||||||
...karakter,
|
|
||||||
tulajdonsagok: tulajdonsagokFajjal,
|
|
||||||
szint: 1,
|
|
||||||
szintlepesek: karakter.szintlepesek.slice(0, 1)
|
|
||||||
})} />
|
|
||||||
<hr/>
|
<hr/>
|
||||||
<LevelUps karakter={karakter} changeKarakter={setKarakter}/>
|
<LevelUps karakter={karakter} changeKarakter={setKarakter}/>
|
||||||
{karakter.szint > 1 && <hr/>}
|
{karakter.szint > 1 && <hr/>}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import {
|
|||||||
import {SignedNumberToText} from "../../shared/components/Helpers";
|
import {SignedNumberToText} from "../../shared/components/Helpers";
|
||||||
import {Kepzettseg, Kepzettsegek} from "../domain-models/kepzettsegek2E";
|
import {Kepzettseg, Kepzettsegek} from "../domain-models/kepzettsegek2E";
|
||||||
import {getClassLevels} from "../domain-models/szintlepes";
|
import {getClassLevels} from "../domain-models/szintlepes";
|
||||||
import {FegyverFlags} from "../components/FegyverSelector";
|
import {FegyverFlags} from "../domain-models/fegyver";
|
||||||
|
|
||||||
interface KepzettsegPdfView {
|
interface KepzettsegPdfView {
|
||||||
nev: string,
|
nev: string,
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
import { configureStore } from "@reduxjs/toolkit"
|
import {configureStore} from "@reduxjs/toolkit"
|
||||||
import userReducer from './shared/domain-models/userSlice'
|
import userReducer from './shared/domain-models/userSlice'
|
||||||
import tulajdonsag2eReducer from './second-edition/domain-models/tulajdonsagSlice';
|
import character2eReducer from './second-edition/domain-models/characterSlice';
|
||||||
|
|
||||||
|
|
||||||
const store = configureStore({
|
const store = configureStore({
|
||||||
reducer: {
|
reducer: {
|
||||||
user: userReducer,
|
user: userReducer,
|
||||||
tulajdonsag2E: tulajdonsag2eReducer
|
character2E: character2eReducer,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -32,7 +32,7 @@ http {
|
|||||||
}
|
}
|
||||||
|
|
||||||
upstream backend {
|
upstream backend {
|
||||||
server 172.17.0.1:7251;
|
server backend:8080;
|
||||||
}
|
}
|
||||||
|
|
||||||
server {
|
server {
|
||||||
|
|||||||
Reference in New Issue
Block a user