diff --git a/src/components/Felszereles.tsx b/src/components/Felszereles.tsx
index 80ec2e1..c004f52 100644
--- a/src/components/Felszereles.tsx
+++ b/src/components/Felszereles.tsx
@@ -1,19 +1,21 @@
import React from "react";
import { KarakterFelszereles, PancelTypes, PancelTypeLabel } from "../domain-models/felszereles";
+import { Osztaly, OsztalyAllowedPancelTypes } from '../domain-models/osztaly'
import pancelok from '../domain-models/pancel.json'
import pajzsok from '../domain-models/pajzs.json'
-function Felszereles(props: {felszereles: KarakterFelszereles, changeFelszereles: (felszereles: KarakterFelszereles) => void}) {
- const { felszereles, changeFelszereles } = props;
+function Felszereles(props: {felszereles: KarakterFelszereles, changeFelszereles: (felszereles: KarakterFelszereles) => void, osztaly: Osztaly}) {
+ const { felszereles, changeFelszereles, osztaly } = props;
+ const allowedPancelTypes = OsztalyAllowedPancelTypes(osztaly)
return <>
>
diff --git a/src/domain-models/felszereles.ts b/src/domain-models/felszereles.ts
index d98d90f..960217c 100644
--- a/src/domain-models/felszereles.ts
+++ b/src/domain-models/felszereles.ts
@@ -1,13 +1,14 @@
-import pancel from "./pancel.json"
+import pancelok from './pancel.json'
+import pajzsok from './pajzs.json'
-export type PancelType = keyof typeof pancel
+export type PancelType = 'konnyu' | 'kozepes' | 'nehez'
export const PancelTypes: PancelType[] = ['konnyu', 'kozepes', 'nehez']
export interface Pancel {
ID: string,
Name: string,
- Type: 'konnyu' | 'kozepes' | 'nehez'
+ Type: PancelType
VO: number,
Price: number,
}
@@ -55,4 +56,29 @@ export function PancelTypeLabel(type: PancelType): string {
result = 'Egyéb páncél'
}
return result
+}
+
+export function GetPancel(id?: string): Pancel | undefined {
+ if (id == null) {
+ return undefined
+ }
+ const filteredPancel = pancelok['pancel'].filter(p => p.ID === id) as Pancel[]
+ return filteredPancel.length > 0 ? filteredPancel[0] : undefined
+}
+
+export function MaxAbilityVO(p: PancelType) {
+ switch(p){
+ case 'konnyu': return 3;
+ case 'kozepes': return 2;
+ case 'nehez': return 1;
+ default: return 9999;
+ }
+}
+
+export function GetPajzs(id?: string): Pajzs | undefined {
+ if (id == null) {
+ return undefined
+ }
+ const filtered = pajzsok['pajzs'].filter(p => p.ID === id) as Pajzs[]
+ return filtered.length > 0 ? filtered[0] : undefined
}
\ No newline at end of file
diff --git a/src/domain-models/masodlagos_ertekek.ts b/src/domain-models/masodlagos_ertekek.ts
index 819b566..d4e6455 100644
--- a/src/domain-models/masodlagos_ertekek.ts
+++ b/src/domain-models/masodlagos_ertekek.ts
@@ -4,6 +4,7 @@ import {KarakterInputs} from "./karakter";
import {Modifier} from "./tulajdonsag";
import {CelzoTB, KozelharciTB} from "./tamadas_bonusz";
import {Faj} from "./faj";
+import { GetPajzs, GetPancel, MaxAbilityVO } from "./felszereles";
export interface MasodlagosErtekekView {
HP: number
@@ -13,7 +14,7 @@ export interface MasodlagosErtekekView {
Mentok: Mentok
}
-export type KarakterpickForMasodlagosErtekek = Pick
+export type KarakterpickForMasodlagosErtekek = Pick
export function BaseHP(osztaly: Osztaly) {
let base = 4;
@@ -49,20 +50,29 @@ export function HP(karakter: Pick sum + val, 0)
}
-export function VO(karakter: Pick): number {
- let vo = 10 + Modifier(karakter.tulajdonsagok.t_ugy)
+export function VO(karakter: Pick): number {
+ const pancel = GetPancel(karakter.felszereles.pancelID)
+ const pancelVO = pancel?.VO ?? 0
+ const pajzsVO = GetPajzs(karakter.felszereles.pajzsID)?.VO ?? 0
+ let vo = 10 + pajzsVO + pancelVO
+ let abilityVO = Modifier(karakter.tulajdonsagok.t_ugy)
if (karakter.osztaly === Osztaly.Kaloz) {
vo += Math.floor(karakter.szint / 3)
}
if (karakter.osztaly === Osztaly.Amazon) {
if (karakter.tulajdonsagok.t_kar > karakter.tulajdonsagok.t_ugy) {
- vo = 10 + Modifier(karakter.tulajdonsagok.t_kar)
+ abilityVO = Modifier(karakter.tulajdonsagok.t_kar)
}
vo += Math.floor(karakter.szint / 2)
}
if (karakter.faj === Faj.Felszerzet){
vo += 1
}
+ if (pancel) {
+ abilityVO = Math.min(MaxAbilityVO(pancel.Type), abilityVO)
+ }
+ vo += abilityVO
+
return vo
}
diff --git a/src/domain-models/osztaly.ts b/src/domain-models/osztaly.ts
index e32634e..4b9ce15 100644
--- a/src/domain-models/osztaly.ts
+++ b/src/domain-models/osztaly.ts
@@ -1,3 +1,6 @@
+import { GetPancel, KarakterFelszereles, Pancel, PancelType } from "./felszereles";
+import pancelok from './pancel.json'
+
export enum Osztaly {
Harcos = 'o_harcos',
Ijasz = 'o_ijasz',
@@ -10,6 +13,31 @@ export enum Osztaly {
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 SetFelszerelesForChangedOsztaly(o: Osztaly, felszereles: KarakterFelszereles, changeFelszereles: (f: KarakterFelszereles) => void) {
+ const allowedPancelTypes = OsztalyAllowedPancelTypes(o)
+ const pancel = GetPancel(felszereles.pancelID)
+ if (pancel && !allowedPancelTypes.includes(pancel.Type)) {
+ changeFelszereles({...felszereles, pancelID: undefined})
+ }
+ if (allowedPancelTypes.length === 0 && !!felszereles.pajzsID){
+ changeFelszereles({...felszereles, pajzsID: undefined})
+ }
+}
+
export function OsztalyLabel(osztaly: Osztaly) : string {
switch (osztaly) {
case Osztaly.Amazon: return 'Amazon';
diff --git a/src/domain-models/pancel.json b/src/domain-models/pancel.json
index c79e195..4013181 100644
--- a/src/domain-models/pancel.json
+++ b/src/domain-models/pancel.json
@@ -1,5 +1,5 @@
{
- "konnyu": [
+ "pancel": [
{
"ID": "tomott",
"Name": "Tömött",
@@ -34,9 +34,7 @@
"Type": "konnyu",
"VO": 4,
"Price": 50
- }
- ],
- "kozepes": [
+ },
{
"ID": "pikkelyvert",
"Name": "Pikkelyvért",
@@ -57,9 +55,7 @@
"Type": "kozepes",
"VO": 5,
"Price": 100
- }
- ],
- "nehez": [
+ },
{
"ID": "racsvert",
"Name": "Rácsvért",
diff --git a/src/pages/CreateCharacter.tsx b/src/pages/CreateCharacter.tsx
index 31512eb..75e9f57 100644
--- a/src/pages/CreateCharacter.tsx
+++ b/src/pages/CreateCharacter.tsx
@@ -1,7 +1,7 @@
import React, {useState} from 'react';
import './CreateCharacter.css'
import {Faj} from "../domain-models/faj";
-import {Osztaly} from "../domain-models/osztaly"
+import {Osztaly, SetFelszerelesForChangedOsztaly} from "../domain-models/osztaly"
import FajSelector from "../components/FajSelector";
import Tulajdonsagok from "../components/Tulajdonsagok";
import OsztalySelector from "../components/OsztalySelector";
@@ -26,6 +26,7 @@ import {Card} from "react-bootstrap";
import LevelUps from "../components/LevelUps";
import HarcosFegyverSpecializacio from "../components/HarcosFegyverSpecializacio";
import Felszereles from '../components/Felszereles';
+import { KarakterFelszereles } from '../domain-models/felszereles';
function CreateCharacterPage() {
@@ -38,6 +39,8 @@ function CreateCharacterPage() {
SetDefaultTolvajKepzettsegek(karakter, changeTolvajKepzettseg)
SetDefaultKepzettsegek({...karakter, tulajdonsagok: tulajdonsagokFajjal}, changeKepzettseg)
const availableKepzettsegList = AvailableKezpettsegList(karakter.osztaly)
+ const setFelszereles = (f: KarakterFelszereles) => changeKarakter({...karakter, felszereles: f})
+ SetFelszerelesForChangedOsztaly(karakter.osztaly, karakter.felszereles, setFelszereles)
const levelUp = () => LevelUp(karakter, changeKarakter)
const levelDown = () => LevelDown(karakter, changeKarakter)
@@ -128,7 +131,7 @@ function CreateCharacterPage() {
- changeKarakter({...karakter, felszereles: f})} />
+
diff --git a/src/pdf/character.pdf.ts b/src/pdf/character.pdf.ts
index 8e5c7c8..b91b005 100644
--- a/src/pdf/character.pdf.ts
+++ b/src/pdf/character.pdf.ts
@@ -315,6 +315,21 @@ export async function CreatePDF(karakter: KarakterPdfView) {
DrawMagic(page, fontSizeBase, pdfFont, karakter.NapiMemorizalhatoVarazslatok, karakter.VarazslatMentokNF)
+ page.drawText(karakter.PancelVO.toString(), {
+ x: 512,
+ y: 515,
+ size: fontSizeBase * 2,
+ font: pdfFont,
+ color: rgb(0, 0, 0),
+ })
+ page.drawText(karakter.PajzsVO.toString(), {
+ x: 512,
+ y: 482,
+ size: fontSizeBase * 2,
+ font: pdfFont,
+ color: rgb(0, 0, 0),
+ })
+
const secondPage = pdfDoc.addPage()
DrawSecondPage(secondPage, pdfFont, karakter)
diff --git a/src/pdf/karakter_pdf_view.ts b/src/pdf/karakter_pdf_view.ts
index fab53ed..752dc47 100644
--- a/src/pdf/karakter_pdf_view.ts
+++ b/src/pdf/karakter_pdf_view.ts
@@ -16,6 +16,7 @@ import {CelzoTB, KozelharciTB} from "../domain-models/tamadas_bonusz";
import {KarakterInputs} from "../domain-models/karakter";
import {NapiVarazslatok, CalculateVarazslatMentokNF} from "../domain-models/memorizalt_varazslatok";
import {GetJellem} from "../domain-models/jellem";
+import {GetPancel, GetPajzs} from '../domain-models/felszereles'
export interface KepzettsegPdfView {
KepzettsegName: string
@@ -47,6 +48,9 @@ export interface KarakterPdfView {
TolvajKepzettsegek: KepzettsegPdfView[]
NapiMemorizalhatoVarazslatok: number[]
VarazslatMentokNF : number[]
+ Felszereles: string[]
+ PancelVO: number
+ PajzsVO: number
}
export function KarakterInputToPdfView(karakter: KarakterInputs): KarakterPdfView {
@@ -63,6 +67,9 @@ export function KarakterInputToPdfView(karakter: KarakterInputs): KarakterPdfVie
const NapiMemorizalhatoVarazslatok = NapiVarazslatok(karakter)
const VarazslatMentokNF = CalculateVarazslatMentokNF(karakter)
+ const pancel = GetPancel(karakter.felszereles.pancelID)
+ const pajzs = GetPajzs(karakter.felszereles.pajzsID)
+
return {
Faj: FajLabel(karakter.faj),
Isten: karakter.isten || "",
@@ -91,6 +98,9 @@ export function KarakterInputToPdfView(karakter: KarakterInputs): KarakterPdfVie
NapiMemorizalhatoVarazslatok,
VarazslatMentokNF,
+ Felszereles: [pajzs?.Name, pancel?.Name].filter(x => !!x) as string[],
+ PajzsVO: pajzs?.VO ?? 0,
+ PancelVO: pancel?.VO ?? 0,
}
}