add pancel and pajzs VO to pdf
This commit is contained in:
@@ -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>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -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,
|
||||||
}
|
}
|
||||||
@@ -55,4 +56,29 @@ export function PancelTypeLabel(type: PancelType): string {
|
|||||||
result = 'Egyéb páncél'
|
result = 'Egyéb páncél'
|
||||||
}
|
}
|
||||||
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
|
||||||
}
|
}
|
||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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 />
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|
||||||
|
|||||||
@@ -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,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user