From 95d777f0383ee8195d1bddfbbd54bb447f494902 Mon Sep 17 00:00:00 2001 From: Balint Morasz Date: Tue, 17 Oct 2023 00:25:01 +0200 Subject: [PATCH] WIP: fegyverek --- src/components/Felszereles.tsx | 35 ++- src/domain-models/fegyver.json | 467 +++++++++++++++++++++++++++++++ src/domain-models/felszereles.ts | 16 +- src/domain-models/osztaly.ts | 22 +- 4 files changed, 532 insertions(+), 8 deletions(-) create mode 100644 src/domain-models/fegyver.json diff --git a/src/components/Felszereles.tsx b/src/components/Felszereles.tsx index ad6df56..3c64b4f 100644 --- a/src/components/Felszereles.tsx +++ b/src/components/Felszereles.tsx @@ -1,12 +1,28 @@ import React from "react"; -import { KarakterFelszereles, PancelTypeLabel } from "../domain-models/felszereles"; -import { Osztaly, OsztalyAllowedPancelTypes } from '../domain-models/osztaly' +import {Fegyver, KarakterFelszereles, PancelTypeLabel} from "../domain-models/felszereles"; +import {Osztaly, OsztalyAllowedFegyver, OsztalyAllowedPancelTypes} from '../domain-models/osztaly' 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"; function Felszereles(props: {felszereles: KarakterFelszereles, changeFelszereles: (felszereles: KarakterFelszereles) => void, osztaly: Osztaly}) { const { felszereles, changeFelszereles, osztaly } = props; const allowedPancelTypes = OsztalyAllowedPancelTypes(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})) + + 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) + if (!found) { + console.log('Nem létező fegyver ID: ', newID) + return + } + changeFelszereles({...felszereles, fegyverIDk: arraySetN(felszereles.fegyverIDk, idx, newID)}) + } + return <>
@@ -28,6 +44,21 @@ function Felszereles(props: {felszereles: KarakterFelszereles, changeFelszereles {allowedPancelTypes.length > 0 && (pajzsok['pajzs'].map(p => ))}
+ {valasztottFegyverek.map(({idx, fegyver}) => ( +
+ + + +
+ ))} + } diff --git a/src/domain-models/fegyver.json b/src/domain-models/fegyver.json new file mode 100644 index 0000000..3391e1a --- /dev/null +++ b/src/domain-models/fegyver.json @@ -0,0 +1,467 @@ +{ + "fegyverek": [ + { + "ID": "alabard", + "Name": "Alabárd és más szálfegyverek", + "Type": "kozelharci", + "Ketkezes": true, + "Egzotikus": false, + "Rohamfelfogo": true, + "Price": 10, + "DamageDice": 10, + "NumberOfDamageDice": 1, + "CritRangeStart": 20, + "CritMultiplier": 3, + "Range": 0 + }, + { + "ID": "bot", + "Name": "Bot", + "Type": "kozelharci", + "Ketkezes": false, + "Egzotikus": false, + "Rohamfelfogo": false, + "Price": 0, + "DamageDice": 6, + "NumberOfDamageDice": 1, + "CritRangeStart": 20, + "CritMultiplier": 2, + "Range": 0 + }, + { + "ID": "bunko", + "Name": "Bunkó", + "Type": "kozelharci", + "Ketkezes": false, + "Egzotikus": false, + "Rohamfelfogo": false, + "Price": 0, + "DamageDice": 6, + "NumberOfDamageDice": 1, + "CritRangeStart": 20, + "CritMultiplier": 2, + "Range": 0 + }, + { + "ID": "buzogany", + "Name": "Buzogány és láncos buzogány", + "Type": "kozelharci", + "Ketkezes": false, + "Egzotikus": false, + "Rohamfelfogo": false, + "Price": 8, + "DamageDice": 8, + "NumberOfDamageDice": 1, + "CritRangeStart": 20, + "CritMultiplier": 2, + "Range": 0 + }, + { + "ID": "csatabard", + "Name": "Csatabárd", + "Type": "kozelharci", + "Ketkezes": false, + "Egzotikus": false, + "Rohamfelfogo": false, + "Price": 10, + "DamageDice": 8, + "NumberOfDamageDice": 1, + "CritRangeStart": 20, + "CritMultiplier": 3, + "Range": 0 + }, + { + "ID": "csatabard_2", + "Name": "Kétkezes csatabárd", + "Type": "kozelharci", + "Ketkezes": true, + "Egzotikus": false, + "Rohamfelfogo": false, + "Price": 20, + "DamageDice": 12, + "NumberOfDamageDice": 1, + "CritRangeStart": 20, + "CritMultiplier": 3, + "Range": 0 + }, + { + "ID": "csakany", + "Name": "Csákány", + "Type": "kozelharci", + "Ketkezes": true, + "Egzotikus": false, + "Rohamfelfogo": false, + "Price": 5, + "DamageDice": 6, + "NumberOfDamageDice": 1, + "CritRangeStart": 20, + "CritMultiplier": 4, + "Range": 0 + }, + { + "ID": "darda", + "Name": "Dárda", + "Type": "kozelharci", + "Ketkezes": true, + "Egzotikus": false, + "Rohamfelfogo": true, + "Price": 10, + "DamageDice": 8, + "NumberOfDamageDice": 1, + "CritRangeStart": 20, + "CritMultiplier": 3, + "Range": 0 + }, + { + "ID": "fejsze", + "Name": "Fejsze", + "Type": "kozelharci", + "Ketkezes": false, + "Egzotikus": false, + "Rohamfelfogo": false, + "Price": 6, + "DamageDice": 6, + "NumberOfDamageDice": 1, + "CritRangeStart": 20, + "CritMultiplier": 3, + "Range": 10 + }, + { + "ID": "torpe_fejsze", + "Name": "Törpe fejsze", + "Type": "kozelharci", + "Ketkezes": false, + "Egzotikus": true, + "Rohamfelfogo": false, + "Price": 30, + "DamageDice": 10, + "NumberOfDamageDice": 1, + "CritRangeStart": 20, + "CritMultiplier": 3, + "Range": 0 + }, + { + "ID": "handzsar", + "Name": "Handzsár", + "Type": "kozelharci", + "Ketkezes": true, + "Egzotikus": false, + "Rohamfelfogo": false, + "Price": 50, + "DamageDice": 4, + "NumberOfDamageDice": 2, + "CritRangeStart": 18, + "CritMultiplier": 2, + "Range": 0 + }, + { + "ID": "harci_kalapacs", + "Name": "Harci kalapács", + "Type": "kozelharci", + "Ketkezes": false, + "Egzotikus": false, + "Rohamfelfogo": false, + "Price": 12, + "DamageDice": 8, + "NumberOfDamageDice": 1, + "CritRangeStart": 20, + "CritMultiplier": 3, + "Range": 0 + }, + { + "ID": "harci_kalapacs_2", + "Name": "Kétkezes harci kalapács", + "Type": "kozelharci", + "Ketkezes": true, + "Egzotikus": false, + "Rohamfelfogo": false, + "Price": 25, + "DamageDice": 10, + "NumberOfDamageDice": 1, + "CritRangeStart": 20, + "CritMultiplier": 3, + "Range": 0 + }, + { + "ID": "fattyu_kard", + "Name": "Fattyú kard", + "Type": "kozelharci", + "Ketkezes": false, + "Egzotikus": true, + "Rohamfelfogo": false, + "Price": 35, + "DamageDice": 10, + "NumberOfDamageDice": 1, + "CritRangeStart": 19, + "CritMultiplier": 2, + "Range": 0 + }, + { + "ID": "rovid_kard", + "Name": "Rövid kard", + "Type": "kozelharci", + "Ketkezes": false, + "Egzotikus": false, + "Rohamfelfogo": false, + "Price": 10, + "DamageDice": 6, + "NumberOfDamageDice": 1, + "CritRangeStart": 19, + "CritMultiplier": 2, + "Range": 0 + }, + { + "ID": "hosszu_kard", + "Name": "Hosszú kard", + "Type": "kozelharci", + "Ketkezes": false, + "Egzotikus": false, + "Rohamfelfogo": false, + "Price": 15, + "DamageDice": 8, + "NumberOfDamageDice": 1, + "CritRangeStart": 19, + "CritMultiplier": 2, + "Range": 0 + }, + { + "ID": "kard_2", + "Name": "Kétkezes kard", + "Type": "kozelharci", + "Ketkezes": true, + "Egzotikus": false, + "Rohamfelfogo": false, + "Price": 50, + "DamageDice": 6, + "NumberOfDamageDice": 2, + "CritRangeStart": 19, + "CritMultiplier": 2, + "Range": 0 + }, + { + "ID": "kasza", + "Name": "Kasza", + "Type": "kozelharci", + "Ketkezes": true, + "Egzotikus": true, + "Rohamfelfogo": false, + "Price": 18, + "DamageDice": 4, + "NumberOfDamageDice": 2, + "CritRangeStart": 20, + "CritMultiplier": 4, + "Range": 0 + }, + { + "ID": "landzsa", + "Name": "Lándzsa", + "Type": "kozelharci", + "Ketkezes": false, + "Egzotikus": false, + "Rohamfelfogo": false, + "Price": 5, + "DamageDice": 8, + "NumberOfDamageDice": 1, + "CritRangeStart": 20, + "CritMultiplier": 2, + "Range": 20 + }, + { + "ID": "sarlo", + "Name": "Sarló", + "Type": "kozelharci", + "Ketkezes": false, + "Egzotikus": false, + "Rohamfelfogo": false, + "Price": 3, + "DamageDice": 6, + "NumberOfDamageDice": 1, + "CritRangeStart": 20, + "CritMultiplier": 2, + "Range": 0 + }, + { + "ID": "szablya", + "Name": "Szablya", + "Type": "kozelharci", + "Ketkezes": false, + "Egzotikus": false, + "Rohamfelfogo": false, + "Price": 15, + "DamageDice": 6, + "NumberOfDamageDice": 1, + "CritRangeStart": 18, + "CritMultiplier": 2, + "Range": 0 + }, + { + "ID": "szigony", + "Name": "Háromágú szigony", + "Type": "kozelharci", + "Ketkezes": false, + "Egzotikus": false, + "Rohamfelfogo": false, + "Price": 10, + "DamageDice": 8, + "NumberOfDamageDice": 1, + "CritRangeStart": 20, + "CritMultiplier": 2, + "Range": 10 + }, + { + "ID": "tor", + "Name": "Tőr", + "Type": "kozelharci", + "Ketkezes": false, + "Egzotikus": false, + "Rohamfelfogo": false, + "Price": 2, + "DamageDice": 4, + "NumberOfDamageDice": 1, + "CritRangeStart": 19, + "CritMultiplier": 2, + "Range": 10 + }, + { + "ID": "ostor", + "Name": "Ostor", + "Type": "kozelharci", + "Ketkezes": false, + "Egzotikus": true, + "Rohamfelfogo": false, + "Price": 1, + "DamageDice": 3, + "NumberOfDamageDice": 1, + "CritRangeStart": 20, + "CritMultiplier": 2, + "Range": 0 + }, + { + "ID": "okol", + "Name": "Ököl", + "Type": "kozelharci", + "Ketkezes": false, + "Egzotikus": false, + "Rohamfelfogo": false, + "Price": 0, + "DamageDice": 4, + "NumberOfDamageDice": 1, + "CritRangeStart": 20, + "CritMultiplier": 2, + "Range": 0 + }, + + { + "ID": "dobodarda", + "Name": "Dobódárda", + "Type": "lofegyver", + "Ketkezes": false, + "Egzotikus": false, + "Rohamfelfogo": false, + "Price": 0.1, + "DamageDice": 6, + "NumberOfDamageDice": 1, + "CritRangeStart": 20, + "CritMultiplier": 2, + "Range": 30 + }, + { + "ID": "dobotu", + "Name": "Dobótű", + "Type": "lofegyver", + "Ketkezes": false, + "Egzotikus": false, + "Rohamfelfogo": false, + "Price": 0.5, + "DamageDice": 4, + "NumberOfDamageDice": 1, + "CritRangeStart": 20, + "CritMultiplier": 2, + "Range": 20 + }, + { + "ID": "rovid_ij", + "Name": "Rövid íj", + "Type": "lofegyver", + "Ketkezes": true, + "Egzotikus": false, + "Rohamfelfogo": false, + "Price": 30, + "DamageDice": 6, + "NumberOfDamageDice": 1, + "CritRangeStart": 20, + "CritMultiplier": 3, + "Range": 60 + }, + { + "ID": "hosszu_ij", + "Name": "Hosszú íj", + "Type": "lofegyver", + "Ketkezes": true, + "Egzotikus": false, + "Rohamfelfogo": false, + "Price": 75, + "DamageDice": 8, + "NumberOfDamageDice": 1, + "CritRangeStart": 20, + "CritMultiplier": 3, + "Range": 70 + }, + { + "ID": "visszacsapo_ij", + "Name": "Visszacsapó íj", + "Type": "lofegyver", + "Ketkezes": true, + "Egzotikus": true, + "Rohamfelfogo": false, + "Price": 100, + "DamageDice": 8, + "NumberOfDamageDice": 1, + "CritRangeStart": 20, + "CritMultiplier": 3, + "Range": 110 + }, + { + "ID": "parittya", + "Name": "Parittya", + "Type": "lofegyver", + "Ketkezes": true, + "Egzotikus": false, + "Rohamfelfogo": false, + "Price": 0, + "DamageDice": 4, + "NumberOfDamageDice": 1, + "CritRangeStart": 20, + "CritMultiplier": 2, + "Range": 50 + }, + { + "ID": "konnyu_szamszerij", + "Name": "Könnyű számszeríj", + "Type": "lofegyver", + "Ketkezes": true, + "Egzotikus": false, + "Rohamfelfogo": false, + "Price": 35, + "DamageDice": 8, + "NumberOfDamageDice": 1, + "CritRangeStart": 19, + "CritMultiplier": 2, + "Range": 80 + }, + { + "ID": "nehez_szamszerij", + "Name": "Nehéz számszeríj", + "Type": "lofegyver", + "Ketkezes": true, + "Egzotikus": false, + "Rohamfelfogo": false, + "Price": 50, + "DamageDice": 10, + "NumberOfDamageDice": 1, + "CritRangeStart": 19, + "CritMultiplier": 2, + "Range": 120 + } + ] +} \ No newline at end of file diff --git a/src/domain-models/felszereles.ts b/src/domain-models/felszereles.ts index 960217c..4d724da 100644 --- a/src/domain-models/felszereles.ts +++ b/src/domain-models/felszereles.ts @@ -24,24 +24,30 @@ export interface Pajzs { export interface Fegyver { ID: string, Name: string, - Range: 'kozelharci' | 'tavolsagi' + Type: 'kozelharci' | 'lofegyver' Ketkezes: boolean, Egzotikus: boolean, - Rohamtoro: boolean, + Rohamfelfogo: boolean, + Price: number, + DamageDice: number, + NumberOfDamageDice: number, + CritRangeStart: number, + CritMultiplier: number, + Range: number } export interface KarakterFelszereles { pancelID?: string pajzsID?: string - FegyverIDk: string[] + fegyverIDk: string[] } export const DefaultFelszereles: KarakterFelszereles = { - FegyverIDk: [], + fegyverIDk: [], } export function PancelTypeLabel(type: PancelType): string { - let result = '' + let result: string switch(type) { case 'konnyu': result = 'Könnyű' diff --git a/src/domain-models/osztaly.ts b/src/domain-models/osztaly.ts index a43311d..cb2efe6 100644 --- a/src/domain-models/osztaly.ts +++ b/src/domain-models/osztaly.ts @@ -1,4 +1,5 @@ -import { GetPancel, KarakterFelszereles, PancelType } from "./felszereles"; +import {Fegyver, GetPancel, KarakterFelszereles, PancelType} from "./felszereles"; +import fegyverDB from './fegyver.json' export enum Osztaly { Harcos = 'o_harcos', @@ -26,6 +27,25 @@ export function OsztalyAllowedPancelTypes(o: Osztaly): PancelType[] { } } +export function OsztalyAllowedFegyver(o: Osztaly): Fegyver[] { + const fegyverek = fegyverDB.fegyverek.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.fegyverek.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) { const allowedPancelTypes = OsztalyAllowedPancelTypes(o) const pancel = GetPancel(felszereles.pancelID)