fegyver specializations should use fegyver DB
This commit is contained in:
@@ -1,21 +1,30 @@
|
|||||||
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, 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 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";
|
||||||
|
|
||||||
|
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}) {
|
function Felszereles(props: {felszereles: KarakterFelszereles, changeFelszereles: (felszereles: KarakterFelszereles) => void, osztaly: Osztaly}) {
|
||||||
const { felszereles, changeFelszereles, osztaly } = props;
|
const { felszereles, changeFelszereles, osztaly } = props;
|
||||||
const allowedPancelTypes = OsztalyAllowedPancelTypes(osztaly)
|
const allowedPancelTypes = AllowedPancelTypes([osztaly])
|
||||||
const valasztottFegyverek = felszereles.fegyverIDk
|
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 osztalyAllowedFegyverek = OsztalyAllowedFegyver(osztaly)
|
||||||
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.fegyverek.find(x => x.ID === newID)
|
const found = fegyverek.data.find(x => x.ID === newID)
|
||||||
if (!found) {
|
if (!found) {
|
||||||
console.log('Nem létező fegyver ID: ', newID)
|
console.log('Nem létező fegyver ID: ', newID)
|
||||||
return
|
return
|
||||||
@@ -49,10 +58,10 @@ function Felszereles(props: {felszereles: KarakterFelszereles, changeFelszereles
|
|||||||
<label className='col-md-2 col-sm-3 col-form-label'>Fegyver</label>
|
<label className='col-md-2 col-sm-3 col-form-label'>Fegyver</label>
|
||||||
<select className='col form-select' value={fegyver.ID} onChange={e => changeFegyver(idx, e.target.value)}>
|
<select className='col form-select' value={fegyver.ID} onChange={e => changeFegyver(idx, e.target.value)}>
|
||||||
<optgroup label="Közelharci">
|
<optgroup label="Közelharci">
|
||||||
{allowedFegyverek.filter(f => f.Type === 'kozelharci').map(f => <option key={f.ID} value={f.ID}>{`${f.Name}`}</option>)}
|
{allowedFegyverek.filter(f => f.Type === 'kozelharci').map(f => <option key={f.ID} value={f.ID}>{FegyverLabel(f)}</option>)}
|
||||||
</optgroup>
|
</optgroup>
|
||||||
<optgroup label="Távolsági">
|
<optgroup label="Távolsági">
|
||||||
{allowedFegyverek.filter(f => f.Type === 'lofegyver').map(f => <option key={f.ID} value={f.ID}>{`${f.Name}`}</option>)}
|
{allowedFegyverek.filter(f => f.Type === 'lofegyver').map(f => <option key={f.ID} value={f.ID}>{FegyverLabel(f)}</option>)}
|
||||||
</optgroup>
|
</optgroup>
|
||||||
</select>
|
</select>
|
||||||
<button className='col-md-2 col-sm-3 btn btn-outline-dark btn-lg ms-2' type='button' onClick={() => changeFelszereles({...felszereles, fegyverIDk: [...felszereles.fegyverIDk.slice(0, idx), ...felszereles.fegyverIDk.slice(idx+1)]})}>Elvesz</button>
|
<button className='col-md-2 col-sm-3 btn btn-outline-dark btn-lg ms-2' type='button' onClick={() => changeFelszereles({...felszereles, fegyverIDk: [...felszereles.fegyverIDk.slice(0, idx), ...felszereles.fegyverIDk.slice(idx+1)]})}>Elvesz</button>
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
|
import fegyverek from "../domain-models/fegyver.json"
|
||||||
|
import {defaultFegyverID, GetFegyver} from "../domain-models/felszereles";
|
||||||
|
|
||||||
function HarcosFegyverSpecializacio(props: {
|
function HarcosFegyverSpecializacio(props: {
|
||||||
specialization: string,
|
specialization: string,
|
||||||
@@ -12,13 +14,20 @@ function HarcosFegyverSpecializacio(props: {
|
|||||||
changeSpecialization,
|
changeSpecialization,
|
||||||
szint
|
szint
|
||||||
} = props
|
} = props
|
||||||
|
const fegyver = GetFegyver(specialization)
|
||||||
const hasError = existingSpecializations.filter(x => x === specialization).length > (szint < 9 ? 1 : 2)
|
const hasError = existingSpecializations.filter(x => x === specialization).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>
|
||||||
<input className='col form-control'
|
<select className='col form-select' value={fegyver?.ID || defaultFegyverID} onChange={e => changeSpecialization(e.target.value)}>
|
||||||
value={specialization}
|
<optgroup label="Közelharci">
|
||||||
onChange={(e) => changeSpecialization(e.target.value)}/>
|
{fegyverek.data.filter(f => f.Type === 'kozelharci').map(f => <option key={f.ID} value={f.ID}>{f.Name}</option>)}
|
||||||
|
</optgroup>
|
||||||
|
<optgroup label="Távolsági">
|
||||||
|
{fegyverek.data.filter(f => f.Type === 'lofegyver').map(f => <option key={f.ID} value={f.ID}>{f.Name}</option>)}
|
||||||
|
</optgroup>
|
||||||
|
</select>
|
||||||
|
{fegyver == null && <span className='form-field-error'>Ismeretlen fegyver: {specialization}</span>}
|
||||||
{hasError && <span className='form-field-error'>Már {szint < 9 ? '' : 'kétszer is'} választottad ezt a fegyvert!</span>}
|
{hasError && <span className='form-field-error'>Már {szint < 9 ? '' : 'kétszer is'} választottad ezt a fegyvert!</span>}
|
||||||
</div>
|
</div>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
|
import fegyverek from "../domain-models/fegyver.json"
|
||||||
|
|
||||||
function KalozKritikus(props: {
|
function KalozKritikus(props: {
|
||||||
krit: string,
|
krit: string,
|
||||||
existingKrits: string[],
|
existingKrits: string[],
|
||||||
changeKrit: (specialization: string) => void,
|
changeKrit: (krit: string) => void,
|
||||||
szint: number
|
szint: number
|
||||||
}) {
|
}) {
|
||||||
const {
|
const {
|
||||||
@@ -16,9 +17,14 @@ function KalozKritikus(props: {
|
|||||||
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>
|
||||||
<input className='col form-control'
|
<select className='col form-select' value={krit} onChange={e => changeKrit(e.target.value)}>
|
||||||
value={krit}
|
<optgroup label="Közelharci">
|
||||||
onChange={(e) => changeKrit(e.target.value)}/>
|
{fegyverek.data.filter(f => f.Type === 'kozelharci').map(f => <option key={f.ID} value={f.ID}>{f.Name}</option>)}
|
||||||
|
</optgroup>
|
||||||
|
<optgroup label="Távolsági">
|
||||||
|
{fegyverek.data.filter(f => f.Type === 'lofegyver').map(f => <option key={f.ID} value={f.ID}>{f.Name}</option>)}
|
||||||
|
</optgroup>
|
||||||
|
</select>
|
||||||
{hasError && <span className='form-field-error'>Már {szint < 9 ? '' : 'kétszer is'} választottad ezt a fegyvert!</span>}
|
{hasError && <span className='form-field-error'>Már {szint < 9 ? '' : 'kétszer is'} választottad ezt a fegyvert!</span>}
|
||||||
</div>
|
</div>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -29,7 +29,9 @@ function LevelUp(props: {
|
|||||||
console.log('Specialization index: ' + specializationIndex.toString())
|
console.log('Specialization index: ' + specializationIndex.toString())
|
||||||
const specialization = karakter.harcosSpecializaciok[specializationIndex]
|
const specialization = karakter.harcosSpecializaciok[specializationIndex]
|
||||||
console.log(specialization)
|
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 <div key={`level-up-${szint}`}>
|
return <div key={`level-up-${szint}`}>
|
||||||
<div className='row mt-3'>
|
<div className='row mt-3'>
|
||||||
@@ -54,7 +56,7 @@ function LevelUp(props: {
|
|||||||
szint={szint}
|
szint={szint}
|
||||||
/>
|
/>
|
||||||
}
|
}
|
||||||
{karakter.osztaly === Osztaly.Kaloz && szint % 3 === 0 &&
|
{karakter.osztaly === Osztaly.Kaloz && szint % 3 === 0 && !!krit &&
|
||||||
<KalozKritikus
|
<KalozKritikus
|
||||||
krit={krit}
|
krit={krit}
|
||||||
existingKrits={karakter.kalozKritikus}
|
existingKrits={karakter.kalozKritikus}
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
import {PancelType} from "./felszereles";
|
||||||
|
import {Osztaly} from "./osztaly";
|
||||||
|
|
||||||
|
export function AllowedPancelTypes(osztalyok: Osztaly[]): PancelType[] {
|
||||||
|
return [...new Set(osztalyok.flatMap(osztalyAllowedPancelTypes))]
|
||||||
|
}
|
||||||
|
|
||||||
|
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']
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"fegyverek": [
|
"data": [
|
||||||
{
|
{
|
||||||
"ID": "alabard",
|
"ID": "alabard",
|
||||||
"Name": "Alabárd és más szálfegyverek",
|
"Name": "Alabárd és más szálfegyverek",
|
||||||
|
|||||||
@@ -91,9 +91,11 @@ export function GetPajzs(id?: string): Pajzs | undefined {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function GetFegyver(id: string): Fegyver | undefined {
|
export function GetFegyver(id: string): Fegyver | undefined {
|
||||||
return fegyverek.fegyverek.find(f => f.ID === id) as Fegyver | undefined
|
return fegyverek.data.find(f => f.ID === id) as Fegyver | undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
export function GetFegyverek(ids: string[]): Fegyver[] {
|
export function GetFegyverek(ids: string[]): Fegyver[] {
|
||||||
return ids.map(GetFegyver).filter(x => x != null).map(x => x as Fegyver)
|
return ids.map(GetFegyver).filter(x => x != null).map(x => x as Fegyver)
|
||||||
}
|
}
|
||||||
|
export const defaultFegyverID = 'okol'
|
||||||
|
export const defaultFegyver = GetFegyver('okol')!
|
||||||
@@ -24,11 +24,11 @@ export function LevelUp(karakter: KarakterInputs, changeKarakter: (input: Karakt
|
|||||||
}
|
}
|
||||||
let harcosSpecializaciok = karakter.harcosSpecializaciok
|
let harcosSpecializaciok = karakter.harcosSpecializaciok
|
||||||
if(karakter.osztaly === Osztaly.Harcos && szint % 2 === 1) {
|
if(karakter.osztaly === Osztaly.Harcos && szint % 2 === 1) {
|
||||||
harcosSpecializaciok = [...harcosSpecializaciok, "Csatabárd"]
|
harcosSpecializaciok = [...harcosSpecializaciok, "csatabard"]
|
||||||
}
|
}
|
||||||
let kalozKritikus = karakter.kalozKritikus
|
let kalozKritikus = karakter.kalozKritikus
|
||||||
if(karakter.osztaly === Osztaly.Kaloz && szint % 3 === 0) {
|
if(karakter.osztaly === Osztaly.Kaloz && szint % 3 === 0) {
|
||||||
kalozKritikus = [...kalozKritikus, "Szablya"]
|
kalozKritikus = [...kalozKritikus, "szablya"]
|
||||||
}
|
}
|
||||||
changeKarakter({...karakter, szint, hpRolls, tulajdonsagNovelesek, harcosSpecializaciok, kalozKritikus})
|
changeKarakter({...karakter, szint, hpRolls, tulajdonsagNovelesek, harcosSpecializaciok, kalozKritikus})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import {Fegyver, GetPancel, KarakterFelszereles, PancelType} from "./felszereles";
|
import {Fegyver, GetPancel, KarakterFelszereles} from "./felszereles";
|
||||||
import fegyverDB from './fegyver.json'
|
import fegyverDB from './fegyver.json'
|
||||||
|
import {AllowedPancelTypes} from "./allowed-pancel-types";
|
||||||
|
|
||||||
export enum Osztaly {
|
export enum Osztaly {
|
||||||
Harcos = 'o_harcos',
|
Harcos = 'o_harcos',
|
||||||
@@ -13,22 +14,8 @@ export enum Osztaly {
|
|||||||
Illuzionista = 'o_illuzionista',
|
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[] {
|
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 nemEgzotikus = fegyverek.filter(f => !f.Egzotikus)
|
||||||
const varazslo = fegyverek.filter(f => ['okol', 'bot', 'bunko', 'tor', 'parittya', 'dobotu'].includes(f.ID))
|
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))
|
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.Harcos:
|
||||||
case Osztaly.Barbar:
|
case Osztaly.Barbar:
|
||||||
case Osztaly.Kaloz: return nemEgzotikus;
|
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
|
// Note: Isteni fegyver barmi lehet istentol foggoen
|
||||||
case Osztaly.Pap: return fegyverek;
|
case Osztaly.Pap: return fegyverek;
|
||||||
case Osztaly.Tolvaj: return tolvaj;
|
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) {
|
export function SetFelszerelesForChangedOsztaly(o: Osztaly, felszereles: KarakterFelszereles, changeFelszereles: (f: KarakterFelszereles) => void) {
|
||||||
const allowedPancelTypes = OsztalyAllowedPancelTypes(o)
|
const allowedPancelTypes = AllowedPancelTypes([o])
|
||||||
const pancel = GetPancel(felszereles.pancelID)
|
const pancel = GetPancel(felszereles.pancelID)
|
||||||
if (pancel && !allowedPancelTypes.includes(pancel.Type)) {
|
if (pancel && !allowedPancelTypes.includes(pancel.Type)) {
|
||||||
changeFelszereles({...felszereles, pancelID: undefined})
|
changeFelszereles({...felszereles, pancelID: undefined})
|
||||||
|
|||||||
@@ -105,7 +105,7 @@ function CreateCharacterPage() {
|
|||||||
changeKarakter({
|
changeKarakter({
|
||||||
...karakter,
|
...karakter,
|
||||||
osztaly: o,
|
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 &&
|
{karakter.osztaly === Osztaly.Harcos &&
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"target": "es5",
|
"target": "es2015",
|
||||||
"lib": [
|
"lib": [
|
||||||
"dom",
|
"dom",
|
||||||
"dom.iterable",
|
"dom.iterable",
|
||||||
|
|||||||
Reference in New Issue
Block a user