add pancel and pajzs VO to pdf
This commit is contained in:
@@ -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 <>
|
||||
<div className='row m-2'>
|
||||
<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})}>
|
||||
<option key={'nincs'} value={'nincs'}>Nincs</option>
|
||||
{
|
||||
PancelTypes.map(pancelType => (
|
||||
<optgroup label={PancelTypeLabel(pancelType)}>
|
||||
{pancelok[pancelType].map(p => <option key={p.ID} value={p.ID}>{`${p.Name} (+${p.VO} VO) - ${p.Price} at`}</option>)}
|
||||
allowedPancelTypes.map(pancelType => (
|
||||
<optgroup key={pancelType} label={PancelTypeLabel(pancelType)}>
|
||||
{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>
|
||||
))
|
||||
}
|
||||
@@ -23,7 +25,7 @@ function Felszereles(props: {felszereles: KarakterFelszereles, changeFelszereles
|
||||
<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})}>
|
||||
<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>
|
||||
</div>
|
||||
</>
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
@@ -56,3 +57,28 @@ export function PancelTypeLabel(type: PancelType): string {
|
||||
}
|
||||
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
|
||||
}
|
||||
@@ -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<KarakterInputs, 'osztaly' | 'hpRolls' | 'tulajdonsagok' | 'szint' | 'faj'>
|
||||
export type KarakterpickForMasodlagosErtekek = Pick<KarakterInputs, 'osztaly' | 'hpRolls' | 'tulajdonsagok' | 'szint' | 'faj' | 'felszereles'>
|
||||
|
||||
export function BaseHP(osztaly: Osztaly) {
|
||||
let base = 4;
|
||||
@@ -49,20 +50,29 @@ export function HP(karakter: Pick<KarakterInputs, 'osztaly' | 'tulajdonsagok' |
|
||||
.reduce((sum, val) => sum + val, 0)
|
||||
}
|
||||
|
||||
export function VO(karakter: Pick<KarakterInputs, 'tulajdonsagok' | 'faj' | 'osztaly' | 'szint'>): number {
|
||||
let vo = 10 + Modifier(karakter.tulajdonsagok.t_ugy)
|
||||
export function VO(karakter: Pick<KarakterInputs, 'tulajdonsagok' | 'faj' | 'osztaly' | 'szint' | 'felszereles'>): 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
|
||||
}
|
||||
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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() {
|
||||
|
||||
<hr />
|
||||
|
||||
<Felszereles felszereles={karakter.felszereles} changeFelszereles={(f) => changeKarakter({...karakter, felszereles: f})} />
|
||||
<Felszereles osztaly={karakter.osztaly} felszereles={karakter.felszereles} changeFelszereles={setFelszereles} />
|
||||
|
||||
<hr />
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user