mirror of
https://github.com/morbalint/kemkas.git
synced 2026-07-17 19:03:46 +00:00
allow harcos to wield specialized exotic weapon
This commit is contained in:
@@ -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})}>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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,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)
|
||||||
|
|||||||
@@ -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
@@ -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"
|
||||||
|
|||||||
Reference in New Issue
Block a user