From 40d53467b32a6f11a4c3c0a43ff2c07e7d53ba35 Mon Sep 17 00:00:00 2001 From: Balint Morasz Date: Sun, 22 Oct 2023 11:09:51 +0200 Subject: [PATCH] fegyver specializations should use fegyver DB --- src/components/Felszereles.tsx | 21 ++++++++++++----- src/components/HarcosFegyverSpecializacio.tsx | 19 +++++++++++---- src/components/KalozKritikus.tsx | 14 +++++++---- src/components/LevelUps.tsx | 6 +++-- src/domain-models/allowed-pancel-types.ts | 20 ++++++++++++++++ src/domain-models/fegyver.json | 2 +- src/domain-models/felszereles.ts | 6 +++-- src/domain-models/level.ts | 4 ++-- src/domain-models/osztaly.ts | 23 ++++--------------- src/pages/CreateCharacter.tsx | 2 +- tsconfig.json | 2 +- 11 files changed, 77 insertions(+), 42 deletions(-) create mode 100644 src/domain-models/allowed-pancel-types.ts diff --git a/src/components/Felszereles.tsx b/src/components/Felszereles.tsx index 3c64b4f..7ee16bd 100644 --- a/src/components/Felszereles.tsx +++ b/src/components/Felszereles.tsx @@ -1,21 +1,30 @@ import React from "react"; import {Fegyver, KarakterFelszereles, PancelTypeLabel} from "../domain-models/felszereles"; -import {Osztaly, OsztalyAllowedFegyver, OsztalyAllowedPancelTypes} from '../domain-models/osztaly' +import {Osztaly, OsztalyAllowedFegyver} from '../domain-models/osztaly' +import {AllowedPancelTypes} from '../domain-models/allowed-pancel-types' import pancelok from '../domain-models/pancel.json' import pajzsok from '../domain-models/pajzs.json' import fegyverek from '../domain-models/fegyver.json' import {arraySetN} from "../util"; +export function FegyverLabel(fegyver: Fegyver): string { + return `${fegyver.Name}${fegyver.Ketkezes ? '+' : ''}${fegyver.Egzotikus ? '(E)' : ''} | ${ + fegyver.NumberOfDamageDice}d${fegyver.DamageDice} ${ + fegyver.CritRangeStart < 20 ? `${fegyver.CritRangeStart}-20` : ''}x${fegyver.CritMultiplier}${ + fegyver.Price > 0 ? ` | ár: ${fegyver.Price} at ` : ''}${ + fegyver.Range > 0 ? ` | táv: ${fegyver.Range}` : ''}` +} + function Felszereles(props: {felszereles: KarakterFelszereles, changeFelszereles: (felszereles: KarakterFelszereles) => void, osztaly: Osztaly}) { const { felszereles, changeFelszereles, osztaly } = props; - const allowedPancelTypes = OsztalyAllowedPancelTypes(osztaly) + const allowedPancelTypes = AllowedPancelTypes([osztaly]) const valasztottFegyverek = felszereles.fegyverIDk - .map((id, idx) => ({idx, fegyver: fegyverek.fegyverek.find(f => f.ID === id)})).filter((x) => x.fegyver != null).map(({idx, fegyver}) => ({idx, fegyver: fegyver as Fegyver})) + .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 = OsztalyAllowedFegyver(osztaly) 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.fegyverek.find(x => x.ID === newID) + const found = fegyverek.data.find(x => x.ID === newID) if (!found) { console.log('Nem létező fegyver ID: ', newID) return @@ -49,10 +58,10 @@ function Felszereles(props: {felszereles: KarakterFelszereles, changeFelszereles diff --git a/src/components/HarcosFegyverSpecializacio.tsx b/src/components/HarcosFegyverSpecializacio.tsx index b92de64..91899c2 100644 --- a/src/components/HarcosFegyverSpecializacio.tsx +++ b/src/components/HarcosFegyverSpecializacio.tsx @@ -1,4 +1,6 @@ import React from "react"; +import fegyverek from "../domain-models/fegyver.json" +import {defaultFegyverID, GetFegyver} from "../domain-models/felszereles"; function HarcosFegyverSpecializacio(props: { specialization: string, @@ -12,16 +14,23 @@ function HarcosFegyverSpecializacio(props: { changeSpecialization, szint } = props - const hasError = existingSpecializations.filter(x => x === specialization).length > (szint < 9 ? 1 : 2) + const fegyver = GetFegyver(specialization) + const hasError = existingSpecializations.filter(x => x === specialization).length > (szint < 9 ? 1 : 2) return <>
- changeSpecialization(e.target.value)}/> + + {fegyver == null && Ismeretlen fegyver: {specialization}} {hasError && Már {szint < 9 ? '' : 'kétszer is'} választottad ezt a fegyvert!}
} -export default HarcosFegyverSpecializacio \ No newline at end of file +export default HarcosFegyverSpecializacio diff --git a/src/components/KalozKritikus.tsx b/src/components/KalozKritikus.tsx index 1fa2352..b606e4b 100644 --- a/src/components/KalozKritikus.tsx +++ b/src/components/KalozKritikus.tsx @@ -1,9 +1,10 @@ import React from "react"; +import fegyverek from "../domain-models/fegyver.json" function KalozKritikus(props: { krit: string, existingKrits: string[], - changeKrit: (specialization: string) => void, + changeKrit: (krit: string) => void, szint: number }) { const { @@ -16,9 +17,14 @@ function KalozKritikus(props: { return <>
- changeKrit(e.target.value)}/> + {hasError && Már {szint < 9 ? '' : 'kétszer is'} választottad ezt a fegyvert!}
diff --git a/src/components/LevelUps.tsx b/src/components/LevelUps.tsx index 635824c..5401393 100644 --- a/src/components/LevelUps.tsx +++ b/src/components/LevelUps.tsx @@ -29,7 +29,9 @@ function LevelUp(props: { console.log('Specialization index: ' + specializationIndex.toString()) const specialization = karakter.harcosSpecializaciok[specializationIndex] console.log(specialization) - const krit = karakter.kalozKritikus[Math.floor(szint/3)-1] + const kritIndex = Math.floor(szint/3)-1 + const krit = karakter.kalozKritikus[kritIndex] + console.log(`kaloz krit @${szint}: ${krit}`) return
@@ -54,7 +56,7 @@ function LevelUp(props: { szint={szint} /> } - {karakter.osztaly === Osztaly.Kaloz && szint % 3 === 0 && + {karakter.osztaly === Osztaly.Kaloz && szint % 3 === 0 && !!krit && f.ID === id) as Fegyver | undefined + return fegyverek.data.find(f => f.ID === id) as Fegyver | undefined } export function GetFegyverek(ids: string[]): Fegyver[] { return ids.map(GetFegyver).filter(x => x != null).map(x => x as Fegyver) -} \ No newline at end of file +} +export const defaultFegyverID = 'okol' +export const defaultFegyver = GetFegyver('okol')! \ No newline at end of file diff --git a/src/domain-models/level.ts b/src/domain-models/level.ts index 6327158..d6278ed 100644 --- a/src/domain-models/level.ts +++ b/src/domain-models/level.ts @@ -24,11 +24,11 @@ export function LevelUp(karakter: KarakterInputs, changeKarakter: (input: Karakt } let harcosSpecializaciok = karakter.harcosSpecializaciok if(karakter.osztaly === Osztaly.Harcos && szint % 2 === 1) { - harcosSpecializaciok = [...harcosSpecializaciok, "Csatabárd"] + harcosSpecializaciok = [...harcosSpecializaciok, "csatabard"] } let kalozKritikus = karakter.kalozKritikus if(karakter.osztaly === Osztaly.Kaloz && szint % 3 === 0) { - kalozKritikus = [...kalozKritikus, "Szablya"] + kalozKritikus = [...kalozKritikus, "szablya"] } changeKarakter({...karakter, szint, hpRolls, tulajdonsagNovelesek, harcosSpecializaciok, kalozKritikus}) } diff --git a/src/domain-models/osztaly.ts b/src/domain-models/osztaly.ts index 58e4eb4..5e72c65 100644 --- a/src/domain-models/osztaly.ts +++ b/src/domain-models/osztaly.ts @@ -1,5 +1,6 @@ -import {Fegyver, GetPancel, KarakterFelszereles, PancelType} from "./felszereles"; +import {Fegyver, GetPancel, KarakterFelszereles} from "./felszereles"; import fegyverDB from './fegyver.json' +import {AllowedPancelTypes} from "./allowed-pancel-types"; export enum Osztaly { Harcos = 'o_harcos', @@ -13,22 +14,8 @@ export enum Osztaly { Illuzionista = 'o_illuzionista', } -export function OsztalyAllowedPancelTypes(o: Osztaly): PancelType[] { - switch (o) { - case Osztaly.Amazon: return ['konnyu']; - case Osztaly.Barbar: return ['konnyu', 'kozepes', 'nehez']; - case Osztaly.Pap: return ['konnyu', 'kozepes', 'nehez']; - case Osztaly.Illuzionista: return []; - case Osztaly.Varazslo: return []; - case Osztaly.Harcos: return ['konnyu', 'kozepes', 'nehez']; - case Osztaly.Ijasz: return ['konnyu', 'kozepes']; - case Osztaly.Kaloz: return ['konnyu', 'kozepes']; - case Osztaly.Tolvaj: return ['konnyu'] - } -} - export function OsztalyAllowedFegyver(o: Osztaly): Fegyver[] { - const fegyverek = fegyverDB.fegyverek.map(x => x as Fegyver) + const fegyverek = fegyverDB.data.map(x => x as Fegyver) const nemEgzotikus = fegyverek.filter(f => !f.Egzotikus) const varazslo = fegyverek.filter(f => ['okol', 'bot', 'bunko', 'tor', 'parittya', 'dobotu'].includes(f.ID)) const tolvaj = fegyverek.filter(f => ['okol', 'tor', 'parittya', 'rovid_ij', 'dobotu', 'konnyu_szamszerij', 'nehez_szamszerij', 'szablya', 'hosszu_kard', 'rovid_kard' ].includes(f.ID)) @@ -37,7 +24,7 @@ export function OsztalyAllowedFegyver(o: Osztaly): Fegyver[] { case Osztaly.Harcos: case Osztaly.Barbar: case Osztaly.Kaloz: return nemEgzotikus; - case Osztaly.Ijasz: return [...nemEgzotikus, fegyverDB.fegyverek.find(f => f.ID === 'visszacsapo_ij') as Fegyver] + case Osztaly.Ijasz: return [...nemEgzotikus, fegyverDB.data.find(f => f.ID === 'visszacsapo_ij') as Fegyver] // Note: Isteni fegyver barmi lehet istentol foggoen case Osztaly.Pap: return fegyverek; case Osztaly.Tolvaj: return tolvaj; @@ -47,7 +34,7 @@ export function OsztalyAllowedFegyver(o: Osztaly): Fegyver[] { } export function SetFelszerelesForChangedOsztaly(o: Osztaly, felszereles: KarakterFelszereles, changeFelszereles: (f: KarakterFelszereles) => void) { - const allowedPancelTypes = OsztalyAllowedPancelTypes(o) + const allowedPancelTypes = AllowedPancelTypes([o]) const pancel = GetPancel(felszereles.pancelID) if (pancel && !allowedPancelTypes.includes(pancel.Type)) { changeFelszereles({...felszereles, pancelID: undefined}) diff --git a/src/pages/CreateCharacter.tsx b/src/pages/CreateCharacter.tsx index 75e9f57..dbb9711 100644 --- a/src/pages/CreateCharacter.tsx +++ b/src/pages/CreateCharacter.tsx @@ -105,7 +105,7 @@ function CreateCharacterPage() { changeKarakter({ ...karakter, osztaly: o, - harcosSpecializaciok: (o === Osztaly.Harcos && karakter.harcosSpecializaciok.length === 0) ? ['Kard'] : karakter.harcosSpecializaciok, + harcosSpecializaciok: (o === Osztaly.Harcos && karakter.harcosSpecializaciok.length === 0) ? ['hosszu_kard'] : karakter.harcosSpecializaciok, })} /> {karakter.osztaly === Osztaly.Harcos && diff --git a/tsconfig.json b/tsconfig.json index a273b0c..d48d3f4 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "es5", + "target": "es2015", "lib": [ "dom", "dom.iterable",