allow harcos to wield specialized exotic weapon

This commit is contained in:
2023-10-22 23:59:54 +02:00
parent 49826d1059
commit 542c845c23
7 changed files with 45 additions and 34 deletions
+8 -4
View File
@@ -1,11 +1,12 @@
import React from "react"; import React from "react";
import {Fegyver, KarakterFelszereles, PancelTypeLabel} from "../domain-models/felszereles"; import {Fegyver, KarakterFelszereles, PancelTypeLabel} from "../domain-models/felszereles";
import {Osztaly, OsztalyAllowedFegyver} from '../domain-models/osztaly' import {Osztaly} from '../domain-models/osztaly'
import {AllowedPancelTypes} from '../domain-models/allowed-pancel-types' import {AllowedPancelTypes} from '../domain-models/allowed-pancel-types'
import pancelok from '../domain-models/pancel.json' import pancelok from '../domain-models/pancel.json'
import pajzsok from '../domain-models/pajzs.json' import pajzsok from '../domain-models/pajzs.json'
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";
export function FegyverLabel(fegyver: Fegyver): string { export function FegyverLabel(fegyver: Fegyver): string {
return `${fegyver.Name}${fegyver.Ketkezes ? '+' : ''}${fegyver.Egzotikus ? '(E)' : ''} | ${ return `${fegyver.Name}${fegyver.Ketkezes ? '+' : ''}${fegyver.Egzotikus ? '(E)' : ''} | ${
@@ -15,13 +16,13 @@ export function FegyverLabel(fegyver: Fegyver): string {
fegyver.Range > 0 ? ` | táv: ${fegyver.Range}` : ''}` fegyver.Range > 0 ? ` | táv: ${fegyver.Range}` : ''}`
} }
function Felszereles(props: {felszereles: KarakterFelszereles, changeFelszereles: (felszereles: KarakterFelszereles) => void, osztaly: Osztaly}) { function Felszereles(props: {felszereles: KarakterFelszereles, changeFelszereles: (felszereles: KarakterFelszereles) => void, osztaly: Osztaly, harcosSpec: Fegyver['Id'][]}) {
const { felszereles, changeFelszereles, osztaly } = props; const { felszereles, changeFelszereles, osztaly, harcosSpec } = props;
const allowedPancelTypes = AllowedPancelTypes([osztaly]) const allowedPancelTypes = AllowedPancelTypes([osztaly])
const valasztottFegyverek = felszereles.fegyverIDk 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})) .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 osztalyAllowedFegyverek = AllowedFegyver(osztaly, harcosSpec)
const allowedFegyverek = [...osztalyAllowedFegyverek, ...valasztottFegyverek.filter(({idx, fegyver}) => !osztalyAllowedFegyverek.map(f => f.Id).includes(fegyver.Id)).map(({fegyver}) => fegyver)] 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 changeFegyver = (idx: number, newID: string) => {
const found = fegyverek.data.find(x => x.Id === newID) const found = fegyverek.data.find(x => x.Id === newID)
@@ -33,6 +34,9 @@ function Felszereles(props: {felszereles: KarakterFelszereles, changeFelszereles
} }
return <> return <>
<div className='row'>
<h5 className='col align-self-center'>Felszerelés</h5>
</div>
<div className='row m-2'> <div className='row m-2'>
<label className='col-md-2 col-sm-3 col-form-label'>Viselt páncél</label> <label className='col-md-2 col-sm-3 col-form-label'>Viselt páncél</label>
<select className='col form-select' value={felszereles.pancelID} onChange={e => changeFelszereles({...felszereles, pancelID: e.target.value === 'nincs' ? undefined : e.target.value})}> <select className='col form-select' value={felszereles.pancelID} onChange={e => changeFelszereles({...felszereles, pancelID: e.target.value === 'nincs' ? undefined : e.target.value})}>
+3 -2
View File
@@ -1,5 +1,6 @@
import React from "react"; import React from "react";
import {Osztaly, OsztalyAllowedFegyver} from "../domain-models/osztaly"; import {Osztaly} from "../domain-models/osztaly";
import {AllowedFegyver} from "../domain-models/allowed-fegyver";
function KalozKritikus(props: { function KalozKritikus(props: {
kritFegyverId: string, kritFegyverId: string,
@@ -14,7 +15,7 @@ function KalozKritikus(props: {
szint szint
} = props } = props
const hasError = existingKrits.filter(x => x === kritFegyverId).length > (szint < 9 ? 1 : 2) const hasError = existingKrits.filter(x => x === kritFegyverId).length > (szint < 9 ? 1 : 2)
const fegyverek = OsztalyAllowedFegyver(Osztaly.Kaloz) const fegyverek = AllowedFegyver(Osztaly.Kaloz, [])
return <> return <>
<div className='row m-2'> <div className='row m-2'>
<label className='col-md-2 col-sm-3 col-form-label'>Kritikus</label> <label className='col-md-2 col-sm-3 col-form-label'>Kritikus</label>
+24
View File
@@ -0,0 +1,24 @@
import {Fegyver, GetFegyver} from "./felszereles";
import fegyverDB from "./fegyver.json";
import {Osztaly} from "./osztaly";
export function AllowedFegyver(o: Osztaly, harcosSpec: string[]): 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))
switch (o) {
case Osztaly.Harcos:
const harcosSpecFegyverek = harcosSpec.map(GetFegyver).filter(x => x != null && x.Egzotikus).map(x => x as Fegyver)
return [...nemEgzotikus, ...harcosSpecFegyverek]
case Osztaly.Amazon:
case Osztaly.Barbar:
case Osztaly.Kaloz: return nemEgzotikus;
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;
case Osztaly.Illuzionista:
case Osztaly.Varazslo: return varazslo;
}
}
+1 -1
View File
@@ -88,7 +88,7 @@
"Id": "csakany", "Id": "csakany",
"Name": "Csákány", "Name": "Csákány",
"Type": "kozelharci", "Type": "kozelharci",
"Ketkezes": true, "Ketkezes": false,
"Egzotikus": false, "Egzotikus": false,
"Rohamfelfogo": false, "Rohamfelfogo": false,
"Price": 5, "Price": 5,
+1 -21
View File
@@ -1,5 +1,4 @@
import {Fegyver, GetPancel, KarakterFelszereles} from "./felszereles"; import {GetPancel, KarakterFelszereles} from "./felszereles";
import fegyverDB from './fegyver.json'
import {AllowedPancelTypes} from "./allowed-pancel-types"; import {AllowedPancelTypes} from "./allowed-pancel-types";
export enum Osztaly { export enum Osztaly {
@@ -14,25 +13,6 @@ export enum Osztaly {
Illuzionista = 'o_illuzionista', Illuzionista = 'o_illuzionista',
} }
export function OsztalyAllowedFegyver(o: Osztaly): 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))
switch (o) {
case Osztaly.Amazon:
case Osztaly.Harcos:
case Osztaly.Barbar:
case Osztaly.Kaloz: return nemEgzotikus;
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;
case Osztaly.Illuzionista:
case Osztaly.Varazslo: return varazslo;
}
}
export function SetFelszerelesForChangedOsztaly(o: Osztaly, felszereles: KarakterFelszereles, changeFelszereles: (f: KarakterFelszereles) => void) { export function SetFelszerelesForChangedOsztaly(o: Osztaly, felszereles: KarakterFelszereles, changeFelszereles: (f: KarakterFelszereles) => void) {
const allowedPancelTypes = AllowedPancelTypes([o]) const allowedPancelTypes = AllowedPancelTypes([o])
const pancel = GetPancel(felszereles.pancelID) const pancel = GetPancel(felszereles.pancelID)
+5 -4
View File
@@ -131,10 +131,6 @@ function CreateCharacterPage() {
<hr /> <hr />
<Felszereles osztaly={karakter.osztaly} felszereles={karakter.felszereles} changeFelszereles={setFelszereles} />
<hr />
<LevelUps key={'level-ups'} karakter={karakter} changeKarakter={changeKarakter} /> <LevelUps key={'level-ups'} karakter={karakter} changeKarakter={changeKarakter} />
{karakter.szint > 1 && <hr />} {karakter.szint > 1 && <hr />}
@@ -145,6 +141,11 @@ function CreateCharacterPage() {
{karakter.szint > 1 && <button className='btn btn-dark btn-lg' type='button' onClick={levelDown}>Visszalépés! </button> } {karakter.szint > 1 && <button className='btn btn-dark btn-lg' type='button' onClick={levelDown}>Visszalépés! </button> }
</div> </div>
<hr />
<Felszereles osztaly={karakter.osztaly} felszereles={karakter.felszereles} changeFelszereles={setFelszereles} harcosSpec={karakter.harcosSpecializaciok} />
<div className='d-grid gap-2 m-5'> <div className='d-grid gap-2 m-5'>
<button className='btn btn-danger btn-lg' type='button' onClick={async () => await CreatePDF(KarakterInputToPdfView(karakter))}>Létrehozás</button> <button className='btn btn-danger btn-lg' type='button' onClick={async () => await CreatePDF(KarakterInputToPdfView(karakter))}>Létrehozás</button>
</div> </div>
+3 -2
View File
@@ -1,6 +1,6 @@
{ {
"compilerOptions": { "compilerOptions": {
"target": "es2015", "target": "es5",
"lib": [ "lib": [
"dom", "dom",
"dom.iterable", "dom.iterable",
@@ -18,7 +18,8 @@
"resolveJsonModule": true, "resolveJsonModule": true,
"isolatedModules": true, "isolatedModules": true,
"noEmit": true, "noEmit": true,
"jsx": "react-jsx" "jsx": "react-jsx",
"downlevelIteration": true
}, },
"include": [ "include": [
"src" "src"