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)