add pancel and pajzs VO to pdf

This commit is contained in:
2023-10-10 20:13:07 +00:00
parent 199127843b
commit 4d58cc2b6a
8 changed files with 112 additions and 22 deletions
+8 -6
View File
@@ -1,19 +1,21 @@
import React from "react"; import React from "react";
import { KarakterFelszereles, PancelTypes, PancelTypeLabel } from "../domain-models/felszereles"; import { KarakterFelszereles, PancelTypes, PancelTypeLabel } from "../domain-models/felszereles";
import { Osztaly, OsztalyAllowedPancelTypes } from '../domain-models/osztaly'
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'
function Felszereles(props: {felszereles: KarakterFelszereles, changeFelszereles: (felszereles: KarakterFelszereles) => void}) { function Felszereles(props: {felszereles: KarakterFelszereles, changeFelszereles: (felszereles: KarakterFelszereles) => void, osztaly: Osztaly}) {
const { felszereles, changeFelszereles } = props; const { felszereles, changeFelszereles, osztaly } = props;
const allowedPancelTypes = OsztalyAllowedPancelTypes(osztaly)
return <> return <>
<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})}>
<option key={'nincs'} value={'nincs'}>Nincs</option> <option key={'nincs'} value={'nincs'}>Nincs</option>
{ {
PancelTypes.map(pancelType => ( allowedPancelTypes.map(pancelType => (
<optgroup label={PancelTypeLabel(pancelType)}> <optgroup key={pancelType} label={PancelTypeLabel(pancelType)}>
{pancelok[pancelType].map(p => <option key={p.ID} value={p.ID}>{`${p.Name} (+${p.VO} VO) - ${p.Price} at`}</option>)} {pancelok['pancel'].filter(p => p.Type === pancelType).map(p => <option key={p.ID} value={p.ID}>{`${p.Name} (+${p.VO} VO) - ${p.Price} at`}</option>)}
</optgroup> </optgroup>
)) ))
} }
@@ -23,7 +25,7 @@ function Felszereles(props: {felszereles: KarakterFelszereles, changeFelszereles
<label className='col-md-2 col-sm-3 col-form-label'>Hordott pajzs</label> <label className='col-md-2 col-sm-3 col-form-label'>Hordott pajzs</label>
<select className='col form-select' value={felszereles.pajzsID} onChange={e => changeFelszereles({...felszereles, pajzsID: e.target.value === 'nincs' ? undefined : e.target.value})}> <select className='col form-select' value={felszereles.pajzsID} onChange={e => changeFelszereles({...felszereles, pajzsID: e.target.value === 'nincs' ? undefined : e.target.value})}>
<option key={'nincs'} value={'nincs'}>Nincs</option> <option key={'nincs'} value={'nincs'}>Nincs</option>
{pajzsok['pajzs'].map(p => <option key={p.ID} value={p.ID}>{`${p.Name} (+${p.VO} VO) - ${p.Price} at`}</option>)} {allowedPancelTypes.length > 0 && (pajzsok['pajzs'].map(p => <option key={p.ID} value={p.ID}>{`${p.Name} (+${p.VO} VO) - ${p.Price} at`}</option>))}
</select> </select>
</div> </div>
</> </>
+29 -3
View File
@@ -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 const PancelTypes: PancelType[] = ['konnyu', 'kozepes', 'nehez']
export interface Pancel { export interface Pancel {
ID: string, ID: string,
Name: string, Name: string,
Type: 'konnyu' | 'kozepes' | 'nehez' Type: PancelType
VO: number, VO: number,
Price: number, Price: number,
} }
@@ -56,3 +57,28 @@ export function PancelTypeLabel(type: PancelType): string {
} }
return result 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
}
+14 -4
View File
@@ -4,6 +4,7 @@ import {KarakterInputs} from "./karakter";
import {Modifier} from "./tulajdonsag"; import {Modifier} from "./tulajdonsag";
import {CelzoTB, KozelharciTB} from "./tamadas_bonusz"; import {CelzoTB, KozelharciTB} from "./tamadas_bonusz";
import {Faj} from "./faj"; import {Faj} from "./faj";
import { GetPajzs, GetPancel, MaxAbilityVO } from "./felszereles";
export interface MasodlagosErtekekView { export interface MasodlagosErtekekView {
HP: number HP: number
@@ -13,7 +14,7 @@ export interface MasodlagosErtekekView {
Mentok: Mentok Mentok: Mentok
} }
export type KarakterpickForMasodlagosErtekek = Pick<KarakterInputs, 'osztaly' | 'hpRolls' | 'tulajdonsagok' | 'szint' | 'faj'> export type KarakterpickForMasodlagosErtekek = Pick<KarakterInputs, 'osztaly' | 'hpRolls' | 'tulajdonsagok' | 'szint' | 'faj' | 'felszereles'>
export function BaseHP(osztaly: Osztaly) { export function BaseHP(osztaly: Osztaly) {
let base = 4; let base = 4;
@@ -49,20 +50,29 @@ export function HP(karakter: Pick<KarakterInputs, 'osztaly' | 'tulajdonsagok' |
.reduce((sum, val) => sum + val, 0) .reduce((sum, val) => sum + val, 0)
} }
export function VO(karakter: Pick<KarakterInputs, 'tulajdonsagok' | 'faj' | 'osztaly' | 'szint'>): number { export function VO(karakter: Pick<KarakterInputs, 'tulajdonsagok' | 'faj' | 'osztaly' | 'szint' | 'felszereles'>): number {
let vo = 10 + Modifier(karakter.tulajdonsagok.t_ugy) 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) { if (karakter.osztaly === Osztaly.Kaloz) {
vo += Math.floor(karakter.szint / 3) vo += Math.floor(karakter.szint / 3)
} }
if (karakter.osztaly === Osztaly.Amazon) { if (karakter.osztaly === Osztaly.Amazon) {
if (karakter.tulajdonsagok.t_kar > karakter.tulajdonsagok.t_ugy) { 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) vo += Math.floor(karakter.szint / 2)
} }
if (karakter.faj === Faj.Felszerzet){ if (karakter.faj === Faj.Felszerzet){
vo += 1 vo += 1
} }
if (pancel) {
abilityVO = Math.min(MaxAbilityVO(pancel.Type), abilityVO)
}
vo += abilityVO
return vo return vo
} }
+28
View File
@@ -1,3 +1,6 @@
import { GetPancel, KarakterFelszereles, Pancel, PancelType } from "./felszereles";
import pancelok from './pancel.json'
export enum Osztaly { export enum Osztaly {
Harcos = 'o_harcos', Harcos = 'o_harcos',
Ijasz = 'o_ijasz', Ijasz = 'o_ijasz',
@@ -10,6 +13,31 @@ 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 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 { export function OsztalyLabel(osztaly: Osztaly) : string {
switch (osztaly) { switch (osztaly) {
case Osztaly.Amazon: return 'Amazon'; case Osztaly.Amazon: return 'Amazon';
+3 -7
View File
@@ -1,5 +1,5 @@
{ {
"konnyu": [ "pancel": [
{ {
"ID": "tomott", "ID": "tomott",
"Name": "Tömött", "Name": "Tömött",
@@ -34,9 +34,7 @@
"Type": "konnyu", "Type": "konnyu",
"VO": 4, "VO": 4,
"Price": 50 "Price": 50
} },
],
"kozepes": [
{ {
"ID": "pikkelyvert", "ID": "pikkelyvert",
"Name": "Pikkelyvért", "Name": "Pikkelyvért",
@@ -57,9 +55,7 @@
"Type": "kozepes", "Type": "kozepes",
"VO": 5, "VO": 5,
"Price": 100 "Price": 100
} },
],
"nehez": [
{ {
"ID": "racsvert", "ID": "racsvert",
"Name": "Rácsvért", "Name": "Rácsvért",
+5 -2
View File
@@ -1,7 +1,7 @@
import React, {useState} from 'react'; import React, {useState} from 'react';
import './CreateCharacter.css' import './CreateCharacter.css'
import {Faj} from "../domain-models/faj"; 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 FajSelector from "../components/FajSelector";
import Tulajdonsagok from "../components/Tulajdonsagok"; import Tulajdonsagok from "../components/Tulajdonsagok";
import OsztalySelector from "../components/OsztalySelector"; import OsztalySelector from "../components/OsztalySelector";
@@ -26,6 +26,7 @@ import {Card} from "react-bootstrap";
import LevelUps from "../components/LevelUps"; import LevelUps from "../components/LevelUps";
import HarcosFegyverSpecializacio from "../components/HarcosFegyverSpecializacio"; import HarcosFegyverSpecializacio from "../components/HarcosFegyverSpecializacio";
import Felszereles from '../components/Felszereles'; import Felszereles from '../components/Felszereles';
import { KarakterFelszereles } from '../domain-models/felszereles';
function CreateCharacterPage() { function CreateCharacterPage() {
@@ -38,6 +39,8 @@ function CreateCharacterPage() {
SetDefaultTolvajKepzettsegek(karakter, changeTolvajKepzettseg) SetDefaultTolvajKepzettsegek(karakter, changeTolvajKepzettseg)
SetDefaultKepzettsegek({...karakter, tulajdonsagok: tulajdonsagokFajjal}, changeKepzettseg) SetDefaultKepzettsegek({...karakter, tulajdonsagok: tulajdonsagokFajjal}, changeKepzettseg)
const availableKepzettsegList = AvailableKezpettsegList(karakter.osztaly) 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 levelUp = () => LevelUp(karakter, changeKarakter)
const levelDown = () => LevelDown(karakter, changeKarakter) const levelDown = () => LevelDown(karakter, changeKarakter)
@@ -128,7 +131,7 @@ function CreateCharacterPage() {
<hr /> <hr />
<Felszereles felszereles={karakter.felszereles} changeFelszereles={(f) => changeKarakter({...karakter, felszereles: f})} /> <Felszereles osztaly={karakter.osztaly} felszereles={karakter.felszereles} changeFelszereles={setFelszereles} />
<hr /> <hr />
+15
View File
@@ -315,6 +315,21 @@ export async function CreatePDF(karakter: KarakterPdfView) {
DrawMagic(page, fontSizeBase, pdfFont, karakter.NapiMemorizalhatoVarazslatok, karakter.VarazslatMentokNF) 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() const secondPage = pdfDoc.addPage()
DrawSecondPage(secondPage, pdfFont, karakter) DrawSecondPage(secondPage, pdfFont, karakter)
+10
View File
@@ -16,6 +16,7 @@ import {CelzoTB, KozelharciTB} from "../domain-models/tamadas_bonusz";
import {KarakterInputs} from "../domain-models/karakter"; import {KarakterInputs} from "../domain-models/karakter";
import {NapiVarazslatok, CalculateVarazslatMentokNF} from "../domain-models/memorizalt_varazslatok"; import {NapiVarazslatok, CalculateVarazslatMentokNF} from "../domain-models/memorizalt_varazslatok";
import {GetJellem} from "../domain-models/jellem"; import {GetJellem} from "../domain-models/jellem";
import {GetPancel, GetPajzs} from '../domain-models/felszereles'
export interface KepzettsegPdfView { export interface KepzettsegPdfView {
KepzettsegName: string KepzettsegName: string
@@ -47,6 +48,9 @@ export interface KarakterPdfView {
TolvajKepzettsegek: KepzettsegPdfView[] TolvajKepzettsegek: KepzettsegPdfView[]
NapiMemorizalhatoVarazslatok: number[] NapiMemorizalhatoVarazslatok: number[]
VarazslatMentokNF : number[] VarazslatMentokNF : number[]
Felszereles: string[]
PancelVO: number
PajzsVO: number
} }
export function KarakterInputToPdfView(karakter: KarakterInputs): KarakterPdfView { export function KarakterInputToPdfView(karakter: KarakterInputs): KarakterPdfView {
@@ -63,6 +67,9 @@ export function KarakterInputToPdfView(karakter: KarakterInputs): KarakterPdfVie
const NapiMemorizalhatoVarazslatok = NapiVarazslatok(karakter) const NapiMemorizalhatoVarazslatok = NapiVarazslatok(karakter)
const VarazslatMentokNF = CalculateVarazslatMentokNF(karakter) const VarazslatMentokNF = CalculateVarazslatMentokNF(karakter)
const pancel = GetPancel(karakter.felszereles.pancelID)
const pajzs = GetPajzs(karakter.felszereles.pajzsID)
return { return {
Faj: FajLabel(karakter.faj), Faj: FajLabel(karakter.faj),
Isten: karakter.isten || "", Isten: karakter.isten || "",
@@ -91,6 +98,9 @@ export function KarakterInputToPdfView(karakter: KarakterInputs): KarakterPdfVie
NapiMemorizalhatoVarazslatok, NapiMemorizalhatoVarazslatok,
VarazslatMentokNF, VarazslatMentokNF,
Felszereles: [pajzs?.Name, pancel?.Name].filter(x => !!x) as string[],
PajzsVO: pajzs?.VO ?? 0,
PancelVO: pancel?.VO ?? 0,
} }
} }