fix kepzettsegek errors
This commit is contained in:
@@ -1,5 +1,3 @@
|
||||
version: "3"
|
||||
|
||||
services:
|
||||
db:
|
||||
image: postgres:16.1-alpine3.19
|
||||
|
||||
@@ -4,17 +4,29 @@ import {Osztaly2E} from '../domain-models/osztaly2E'
|
||||
import {AllowedPajzsTypes, AllowedPancelTypes} from '../domain-models/allowed-pancel-types'
|
||||
import fegyverek from '../domain-models/fegyver.json'
|
||||
import {arraySetN} from "../../util";
|
||||
import {AllowedFegyver} from "../domain-models/allowed-fegyver";
|
||||
import {AllowedFegyverek} from "../domain-models/allowed-fegyver";
|
||||
import FegyverSelector from "../display-components/FegyverSelector";
|
||||
import {useDispatch, useSelector} from "react-redux";
|
||||
import {AppDispatch, RootState} from "../../store";
|
||||
import {characterSelector, setFelszereles} from "../domain-models/characterSlice";
|
||||
|
||||
function Felszereles(props: {felszereles: KarakterFelszereles, changeFelszereles: (felszereles: KarakterFelszereles) => void, osztaly: Osztaly2E}) {
|
||||
const { felszereles, changeFelszereles, osztaly } = props;
|
||||
const allowedPancel = AllowedPancelTypes([osztaly])
|
||||
const allowedPajzs = AllowedPajzsTypes([osztaly])
|
||||
export function Felszereles(){
|
||||
const character = useSelector.withTypes<RootState>()(characterSelector)
|
||||
const dispatch = useDispatch.withTypes<AppDispatch>()()
|
||||
const felszereles = character.felszereles
|
||||
const osztalyok = character.szintlepesek.map(x => x.osztaly)
|
||||
const changeFelszereles = (f: KarakterFelszereles) => dispatch(setFelszereles(f))
|
||||
return <FelszerelesView felszereles={felszereles} changeFelszereles={changeFelszereles} osztalyok={osztalyok} />
|
||||
}
|
||||
|
||||
export function FelszerelesView(props: {felszereles: KarakterFelszereles, changeFelszereles: (felszereles: KarakterFelszereles) => void, osztalyok: Osztaly2E[]}) {
|
||||
const {felszereles, changeFelszereles, osztalyok} = props;
|
||||
const allowedPancel = AllowedPancelTypes(osztalyok)
|
||||
const allowedPajzs = AllowedPajzsTypes(osztalyok)
|
||||
const valasztottFegyverek = felszereles.fegyverIDk
|
||||
.map((id, idx) => ({idx, fegyver: fegyverek.data.find(f => f.Id === id)})).filter((x) => x.fegyver != null).map(({idx, fegyver}) => ({idx, fegyver: fegyver as Fegyver}))
|
||||
|
||||
const osztalyAllowedFegyverek = AllowedFegyver(osztaly)
|
||||
const osztalyAllowedFegyverek = AllowedFegyverek(osztalyok)
|
||||
const allowedFegyverek = [...osztalyAllowedFegyverek, ...valasztottFegyverek.filter(({idx, fegyver}) => !osztalyAllowedFegyverek.map(f => f.Id).includes(fegyver.Id)).map(({fegyver}) => fegyver)]
|
||||
const changeFegyver = (idx: number, newID: string) => {
|
||||
const found = fegyverek.data.find(x => x.Id === newID)
|
||||
@@ -51,6 +63,7 @@ function Felszereles(props: {felszereles: KarakterFelszereles, changeFelszereles
|
||||
>
|
||||
<option key={'nincs'} value={'nincs'}>Nincs</option>
|
||||
{
|
||||
allowedPancel.some(p => p.Type === "konnyu") &&
|
||||
<optgroup label={PancelTypeLabel("konnyu")}>
|
||||
{allowedPancel.filter(p => p.Type === "konnyu").map(p =>
|
||||
<option key={p.Id} value={p.Id}>{`${p.Name}${p.Size > 1 ? ` [${p.Size}]` : ''} (+${p.VO} VO) - ${p.Price} at`}</option>)}
|
||||
@@ -60,7 +73,7 @@ function Felszereles(props: {felszereles: KarakterFelszereles, changeFelszereles
|
||||
allowedPancel.some(p => p.Type === "nehez") &&
|
||||
<optgroup label={PancelTypeLabel("nehez")}>
|
||||
{allowedPancel.filter(p => p.Type === "nehez").map(p =>
|
||||
<option key={p.Id} value={p.Id}>{`${p.Name} (+${p.VO} VO) - ${p.Price} at`}</option>)}
|
||||
<option key={p.Id} value={p.Id}>{`${p.Name} [${p.Size}] (+${p.VO} VO) - ${p.Price} at`}</option>)}
|
||||
</optgroup>
|
||||
}
|
||||
</select>
|
||||
|
||||
@@ -41,7 +41,7 @@ function InternalKepzettsegekSelector(props: {
|
||||
for (let i = 0; i < numberOfKepzettseg; i++) {
|
||||
preCalculated.push({
|
||||
kepzettsegek: getKepzettsegListaN(i),
|
||||
selected: Kepzettsegek[kepzettsegek[i]],
|
||||
selected: Kepzettsegek[kepzettsegek[i]] || getKepzettsegListaN(i)[0],
|
||||
changeKepzettseg: (newKepzettseg: KepzettsegId) => changeKepzettsegek(arraySetN(kepzettsegek, i, newKepzettseg))
|
||||
})
|
||||
}
|
||||
|
||||
@@ -2,6 +2,10 @@ import {Fegyver} from "./felszereles";
|
||||
import fegyverDB from "./fegyver.json";
|
||||
import {Osztaly2E} from "./osztaly2E";
|
||||
|
||||
export function AllowedFegyverek(osztalyok: Osztaly2E[]): Fegyver[] {
|
||||
return [...new Set(osztalyok.flatMap(AllowedFegyver))]
|
||||
}
|
||||
|
||||
export function AllowedFegyver(o: Osztaly2E): Fegyver[] {
|
||||
const fegyverek = fegyverDB.data.map(x => x as Fegyver)
|
||||
const varazslo = fegyverek.filter(f => ['okol', 'bot', 'bot_vasalt' , 'bunko', 'tor', 'parittya', 'dobotu'].includes(f.Id))
|
||||
|
||||
@@ -1,12 +1,17 @@
|
||||
import {createSlice} from "@reduxjs/toolkit";
|
||||
import {Faj2E, TulajdonsagokFajjal} from "./faj2E";
|
||||
import {Faj2E} 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 {
|
||||
AdjustKepzettsegek,
|
||||
KepzettsegId,
|
||||
SetDefaultTolvajKepzettsegek
|
||||
} from "./kepzettsegek2E";
|
||||
import {BaseHP} from "./masodlagos_ertekek";
|
||||
import {KarakterFelszereles} from "./felszereles";
|
||||
|
||||
export const characterSlice = createSlice({
|
||||
name: "character2E",
|
||||
@@ -23,13 +28,12 @@ export const characterSlice = createSlice({
|
||||
},
|
||||
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.kepzettsegek = AdjustKepzettsegek(state)
|
||||
state.kepzettsegFajError = getKepzettsegErrorForFaj(action.payload, [...state.kepzettsegek, ...(state.tolvajKepzettsegek || [])])
|
||||
},
|
||||
rollAbilities: (state) => {
|
||||
state.tulajdonsagok = RollAllAbilities()
|
||||
state.kepzettsegek = AdjustKepzettsegek(state)
|
||||
},
|
||||
setEro: (state, action: {payload: number}) => {
|
||||
state.tulajdonsagok.t_ero = action.payload;
|
||||
@@ -42,9 +46,7 @@ export const characterSlice = createSlice({
|
||||
},
|
||||
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);
|
||||
state.kepzettsegek = AdjustKepzettsegek(state);
|
||||
},
|
||||
setBolcsesseg: (state, action: {payload: number}) => {
|
||||
state.tulajdonsagok.t_bol = action.payload;
|
||||
@@ -56,17 +58,17 @@ export const characterSlice = createSlice({
|
||||
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])
|
||||
}
|
||||
SetDefaultTolvajKepzettsegek(state, t => state.tolvajKepzettsegek = t)
|
||||
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
|
||||
SetDefaultTolvajKepzettsegek(state, t => state.tolvajKepzettsegek = t)
|
||||
const osztalyok = new Set(state.szintlepesek.map(x => x.osztaly))
|
||||
state.kepzettsegOsztalyError = getKepzettsegErrorForOsztaly(osztalyok, state.kepzettsegek);
|
||||
state.kepzettsegFajError = getKepzettsegErrorForFaj(action.payload.faj, action.payload.kepzettsegek)
|
||||
return state;
|
||||
},
|
||||
setHarcosSpecialization: (state, action: {payload: {szint: number, fegyver: string}}) => {
|
||||
@@ -85,8 +87,12 @@ export const characterSlice = createSlice({
|
||||
},
|
||||
setTolvajKepzettsegek: (state, action: {payload: KepzettsegId[]}) => {
|
||||
state.tolvajKepzettsegek = action.payload;
|
||||
// birodalmi
|
||||
state.kepzettsegFajError = getKepzettsegErrorForFaj(state.faj, [...state.kepzettsegek, ...action.payload])
|
||||
},
|
||||
setFelszereles: (state, action: {payload: KarakterFelszereles}) => {
|
||||
state.felszereles = action.payload;
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
@@ -140,6 +146,7 @@ export const {
|
||||
setHarcosSpecialization,
|
||||
setKepzettsegek,
|
||||
setTolvajKepzettsegek,
|
||||
setFelszereles,
|
||||
} = characterSlice.actions
|
||||
|
||||
export const characterSelector = characterSlice.selectSlice
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import {Osztaly2E} from "./osztaly2E";
|
||||
import {Faj2E} from "./faj2E";
|
||||
import {Faj2E, TulajdonsagokFajjal} from "./faj2E";
|
||||
import {Karakter2E} from "./karakter2E";
|
||||
import {Modifier, Tulajdonsag2E} from "./tulajdonsag2E";
|
||||
|
||||
@@ -213,6 +213,14 @@ export function AvailableKezpettsegList(...osztalyok: Osztaly2E[]): Kepzettseg[]
|
||||
return KepzettsegLista.filter(k => k.Osztalyok == null || k.Osztalyok.some(o => osztalyok.includes(o)))
|
||||
}
|
||||
|
||||
export function AvailableKezpettsegListFajjal(faj: Faj2E, ...osztalyok: Osztaly2E[]): Kepzettseg[] {
|
||||
const birodalmiKepzettsegek : KepzettsegId[] = ["k_alkimia", "k_meregkeveres", "k_okkultizmus"]
|
||||
return KepzettsegLista.filter(k =>
|
||||
k.Osztalyok == null || k.Osztalyok.some(o => osztalyok.includes(o))
|
||||
|| (faj === Faj2E.Birodalmi && birodalmiKepzettsegek.some(x => x === k.Id))
|
||||
)
|
||||
}
|
||||
|
||||
export function GetNumberOfKepzettsegek(t_int: number, faj: Faj2E, max: number = 11) {
|
||||
//max = 3 + 1 + 3 + 5 = 12 // 3 base, 1 human, 3 from max ability modifier, 5 from Thief at 9th level
|
||||
let numberOfKepzettseg = 3 + Modifier(t_int) + (faj === Faj2E.Ember ? 1 : 0)
|
||||
@@ -239,18 +247,16 @@ export function SetDefaultTolvajKepzettsegek(karakter: Pick<Karakter2E, 'szintle
|
||||
}
|
||||
}
|
||||
|
||||
export function GetKepzettsegAtN(karakter: Pick<Karakter2E, 'szintlepesek' | 'faj' | 'kepzettsegek' | 'tolvajKepzettsegek'>, n: number): Kepzettseg | undefined {
|
||||
const osztalyok = new Set(karakter.szintlepesek.map(x => x.osztaly))
|
||||
let availableKepzettsegList = AvailableKezpettsegListFajjal(karakter.faj, ...osztalyok)
|
||||
const kepzettsegekWithoutN = [...karakter.kepzettsegek.slice(0, n), ...karakter.kepzettsegek.slice(n + 1)]
|
||||
return availableKepzettsegList.find(x => !kepzettsegekWithoutN.includes(x.Id) && !karakter.tolvajKepzettsegek?.includes(x.Id))
|
||||
}
|
||||
|
||||
export function GetKepzettsegListaN(karakter: Pick<Karakter2E, 'szintlepesek' | 'faj' | 'kepzettsegek' | 'tolvajKepzettsegek'>) {
|
||||
const osztalyok = new Set(karakter.szintlepesek.map(x => x.osztaly))
|
||||
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]
|
||||
}
|
||||
let availableKepzettsegList = AvailableKezpettsegListFajjal(karakter.faj, ...osztalyok)
|
||||
return (n: number): Kepzettseg[] => {
|
||||
let available = [...availableKepzettsegList]
|
||||
// if (n === 0) {
|
||||
@@ -298,3 +304,22 @@ export function GetKepzettsegListaN(karakter: Pick<Karakter2E, 'szintlepesek' |
|
||||
return available.filter(x => !kepzettsegekWithoutN.includes(x.Id) && !karakter.tolvajKepzettsegek?.includes(x.Id))
|
||||
}
|
||||
}
|
||||
|
||||
export function AdjustKepzettsegek(karakter: Pick<Karakter2E, 'faj' | 'tulajdonsagok' | 'szintlepesek' | 'kepzettsegek' | 'tolvajKepzettsegek'>): KepzettsegId[] {
|
||||
const tulajdonsagokFajjal = TulajdonsagokFajjal(karakter.tulajdonsagok, karakter.faj)
|
||||
const numberOfKepzettsegek = GetNumberOfKepzettsegek(tulajdonsagokFajjal.t_int, karakter.faj)
|
||||
const diff = numberOfKepzettsegek - karakter.kepzettsegek.length
|
||||
if (diff > 0) {
|
||||
const kepzettsegek = [...karakter.kepzettsegek]
|
||||
for (let i = 0; i < diff; i++) {
|
||||
const next = GetKepzettsegAtN({
|
||||
...karakter,
|
||||
kepzettsegek,
|
||||
}, kepzettsegek.length + 1)!.Id;
|
||||
kepzettsegek.push(next)
|
||||
}
|
||||
return kepzettsegek;
|
||||
} else {
|
||||
return karakter.kepzettsegek.slice(0, numberOfKepzettsegek);
|
||||
}
|
||||
}
|
||||
@@ -8,7 +8,6 @@ import {Osztaly2E} from "../domain-models/osztaly2E";
|
||||
import KarakterKepzettsegek from "../components/KarakterKepzettsegek2E";
|
||||
import MasodlagosErtekek from "../components/MasodlagosErtekek";
|
||||
import Felszereles from "../components/Felszereles";
|
||||
import {KarakterFelszereles} from "../domain-models/felszereles";
|
||||
import LevelUps from "../components/LevelUps";
|
||||
import {LevelDown, LevelUp} from "../domain-models/szintlepes";
|
||||
import HarcosFegyverSpecializacio from "../components/HarcosFegyverSpec";
|
||||
@@ -38,9 +37,6 @@ function CreateCharacter2E(props: {
|
||||
const karakter = useSelector.withTypes<RootState>()(characterSelector)
|
||||
const setKarakter = (newState: Karakter2E) => dispatch(setCharacter(newState));
|
||||
|
||||
|
||||
const changeFelszereles = (f: KarakterFelszereles) => setKarakter({...karakter, felszereles: f})
|
||||
|
||||
let [showSaveModal, setShowSaveModal] = useState(false);
|
||||
let [newId, setNewId] = useState(null as string | null)
|
||||
let [showSaved, setShowSaved] = useState(false);
|
||||
@@ -126,11 +122,7 @@ function CreateCharacter2E(props: {
|
||||
⇩</button>}
|
||||
</div>
|
||||
<hr/>
|
||||
<Felszereles
|
||||
osztaly={karakter.szintlepesek[0].osztaly}
|
||||
felszereles={karakter.felszereles}
|
||||
changeFelszereles={changeFelszereles}
|
||||
/>
|
||||
<Felszereles />
|
||||
|
||||
<hr/>
|
||||
<div className='row'>
|
||||
|
||||
Reference in New Issue
Block a user