so far: faj2E, osztaly2E, kepzettsegek2E (with some bugs)
This commit is contained in:
2024-01-09 22:58:50 +01:00
committed by Bálint Mórász
parent e51bde66da
commit d56d7c9899
31 changed files with 1883 additions and 95 deletions
@@ -1,3 +1,4 @@
// TODO: move to shared!
export function SignedNumberToText(val: number) : string {
return val === 0 ? " 0" : (val > 0 ? '+'+val : val.toString())
}
@@ -3,10 +3,9 @@ import {
KarakterTulajdonsagok,
RollAllAbilities,
Tulajdonsag,
TulajdonsagModositokFajokra
} from "../domain-models/tulajdonsag";
import TulajdonsagInput from "./TulajdonsagInput";
import {Faj} from "../domain-models/faj";
import {Faj, TulajdonsagModositokFajokra} from "../domain-models/faj";
function Tulajdonsagok(props: {
currentFaj: Faj,
@@ -1,10 +1,5 @@
import {
KarakterTulajdonsagok,
Tulajdonsag,
TulajdonsagModositokFajokra,
} from "./tulajdonsag";
import {Osztaly} from "./osztaly";
import {KarakterTulajdonsagok, Tulajdonsag} from "./tulajdonsag";
export enum Faj {
Ember = 'f_ember',
@@ -141,6 +136,77 @@ export function GetFajDetails(faj: Faj): FajDetails {
}
}
// noinspection OverlyComplexFunctionJS,FunctionTooLongJS
function tulajdonsagModositokPerFaj(tul: Tulajdonsag, faj: Faj) : number {
switch (faj) {
case Faj.Birodalmi: switch (tul) {
case Tulajdonsag.Egeszseg: return -1;
case Tulajdonsag.Intelligencia: return +1;
default: return 0;
}
case Faj.Eszaki: switch (tul) {
case Tulajdonsag.Ero: return +1;
case Tulajdonsag.Bolcsesseg: return -1;
default: return 0;
}
case Faj.Etuniai: switch (tul) {
case Tulajdonsag.Egeszseg: return +1;
case Tulajdonsag.Bolcsesseg: return -1;
default: return 0
}
case Faj.Osember: switch (tul) {
case Tulajdonsag.Ero: return +1;
case Tulajdonsag.Egeszseg: return +1;
case Tulajdonsag.Intelligencia: return -1;
case Tulajdonsag.Bolcsesseg: return -1;
default: return 0
}
case Faj.Elf: switch (tul) {
case Tulajdonsag.Egeszseg: return -1;
case Tulajdonsag.Ugyesseg: return +1;
default: return 0;
}
case Faj.Felork: switch (tul) {
case Tulajdonsag.Ero: return +1;
case Tulajdonsag.Egeszseg: return +1;
case Tulajdonsag.Karizma: return -2;
default: return 0;
}
case Faj.Felszerzet: switch (tul) {
case Tulajdonsag.Ero: return -1;
case Tulajdonsag.Ugyesseg: return +1;
default: return 0;
}
case Faj.Gnom: switch (tul) {
case Tulajdonsag.Ero: return -1;
case Tulajdonsag.Intelligencia: return +1;
default: return 0;
}
case Faj.Torpe: switch (tul) {
case Tulajdonsag.Egeszseg: return +1;
case Tulajdonsag.Karizma: return -1;
default: return 0;
}
default: return 0;
}
}
export function TulajdonsagModositokFajokra(tul: Tulajdonsag) {
return (faj: Faj) => tulajdonsagModositokPerFaj(tul, faj);
}
export function TulajdonsagokFajjal(tulajdonsagok: KarakterTulajdonsagok, faj: Faj): KarakterTulajdonsagok {
return {
[Tulajdonsag.Ero]: tulajdonsagok.t_ero + tulajdonsagModositokPerFaj(Tulajdonsag.Ero, faj),
[Tulajdonsag.Ugyesseg]: tulajdonsagok.t_ugy + tulajdonsagModositokPerFaj(Tulajdonsag.Ugyesseg, faj),
[Tulajdonsag.Egeszseg]: tulajdonsagok.t_egs + tulajdonsagModositokPerFaj(Tulajdonsag.Egeszseg, faj),
[Tulajdonsag.Intelligencia]: tulajdonsagok.t_int + tulajdonsagModositokPerFaj(Tulajdonsag.Intelligencia, faj),
[Tulajdonsag.Bolcsesseg]: tulajdonsagok.t_bol + tulajdonsagModositokPerFaj(Tulajdonsag.Bolcsesseg, faj),
[Tulajdonsag.Karizma]: tulajdonsagok.t_kar + tulajdonsagModositokPerFaj(Tulajdonsag.Karizma, faj),
}
}
function fajiTulajdonsagModositok(faj: Faj): KarakterTulajdonsagok {
return {
[Tulajdonsag.Ero]: TulajdonsagModositokFajokra(Tulajdonsag.Ero)(faj),
@@ -1,9 +1,9 @@
import {Faj} from "./faj";
import {Osztaly} from "./osztaly";
import {KarakterTulajdonsagok, Tulajdonsag, TulajdonsagDefaults} from "./tulajdonsag";
import {KepzettsegId} from "./kepzettsegek";
import {JellemID} from "./jellem";
import { DefaultFelszereles, KarakterFelszereles } from './felszereles'
import {KarakterTulajdonsagok, Tulajdonsag, TulajdonsagDefaults} from "./tulajdonsag";
export interface KarakterInputs {
name: string,
@@ -1,7 +1,7 @@
import {Modifier, Tulajdonsag} from "./tulajdonsag";
import {Osztaly} from "./osztaly";
import {Faj} from "./faj";
import {KarakterInputs} from "./karakter";
import {Modifier, Tulajdonsag} from "./tulajdonsag";
export type KepzettsegId = 'k_alkimia' | 'k_alcazas' | 'k_allatidomitas' | 'k_csapdak' | 'k_csillagjoslas' | 'k_egyensulyozas' | 'k_eloadas' | 'k_ertekbecsles' | 'k_gyogyitas' | 'k_hajozas' | 'k_hallgatozas' | 'k_hamisitas' | 'k_jelek_olvasasa' | 'k_koncentracio' | 'k_lovaglas' | 'k_maszas' | 'k_megfigyeles' | 'k_meregkeveres' | 'k_mesterseg' | 'k_nyomkereses' | 'k_osonas' | 'k_rejtozes' | 'k_szabadulomuveszet' | 'k_tudas' | 'k_ugras' | 'k_uszas' | 'k_varazslatismeret' | 'k_zarnyitas' | 'k_zsebmetszes'
@@ -1,8 +0,0 @@
export function dAny(sides: number) {
return Math.floor(Math.random() * sides) + 1;
}
export function d6() {
return dAny(6)
}
@@ -1,11 +1,12 @@
import {BaseHP} from "./masodlagos_ertekek";
import {dAny} from "./kockak";
import {TulajdonsagIDs, TulajdonsagokTotal} from "./tulajdonsag";
import {KarakterInputs} from "./karakter";
import {GetFajDetails} from "./faj";
import {Osztaly} from "./osztaly";
import fegyverek from "./fegyver.json"
import {AllowedFegyver} from "./allowed-fegyver";
import {TulajdonsagokTotal} from "./tulajdonsag";
import {dAny} from "../../shared/domain-models/kockak";
import {TulajdonsagIDs} from "./tulajdonsag";
export function PickableSpecializationFilter(existingSpecilizations: string[], szint: number) {
return (fegyver: {Id: string}) => existingSpecilizations.filter(x => x === fegyver.Id).length < (szint < 9 ? 1 : 2)
@@ -1,10 +1,10 @@
import {Mentok, MentokTotal} from "./mentok";
import {Osztaly} from "./osztaly";
import {KarakterInputs} from "./karakter";
import {Modifier} from "./tulajdonsag";
import {CelzoTB, KozelharciTB} from "./tamadas_bonusz";
import {Faj} from "./faj";
import { GetPajzs, GetPancel, MaxAbilityVO } from "./felszereles";
import {Modifier} from "./tulajdonsag";
export interface MasodlagosErtekekView {
HP: number
@@ -1,6 +1,6 @@
import {Osztaly} from "./osztaly";
import {KarakterTulajdonsagok, TulajdonsagModosito} from "./tulajdonsag";
import {KarakterInputs} from "./karakter";
import {KarakterTulajdonsagok, TulajdonsagModosito} from "./tulajdonsag";
export interface Mentok {
kitartas: number
@@ -1,7 +1,7 @@
import {Osztaly} from "./osztaly";
import TamadasBonuszTabla from "./tamadas_bonus_tabla.json";
import {Modifier} from "./tulajdonsag";
import {KarakterInputs} from "./karakter";
import {Modifier} from "./tulajdonsag";
export function TamadasBonusz(osztaly: Osztaly, szint: number = 1) : number[] {
let base = []
@@ -1,7 +1,8 @@
import {d6} from "./kockak";
import {Faj} from "./faj";
import {TulajdonsagokFajjal} from "./faj";
import {KarakterInputs} from "./karakter";
import {d6} from "../../shared/domain-models/kockak";
export enum Tulajdonsag {
Ero = 't_ero',
Ugyesseg = 't_ugy',
@@ -77,80 +78,10 @@ export function TulajdonsagModosito(tulajdonsagok: KarakterTulajdonsagok): Karak
return response
}
// noinspection OverlyComplexFunctionJS,FunctionTooLongJS
function tulajdonsagModositokPerFaj(tul: Tulajdonsag, faj: Faj) : number {
switch (faj) {
case Faj.Birodalmi: switch (tul) {
case Tulajdonsag.Egeszseg: return -1;
case Tulajdonsag.Intelligencia: return +1;
default: return 0;
}
case Faj.Eszaki: switch (tul) {
case Tulajdonsag.Ero: return +1;
case Tulajdonsag.Bolcsesseg: return -1;
default: return 0;
}
case Faj.Etuniai: switch (tul) {
case Tulajdonsag.Egeszseg: return +1;
case Tulajdonsag.Bolcsesseg: return -1;
default: return 0
}
case Faj.Osember: switch (tul) {
case Tulajdonsag.Ero: return +1;
case Tulajdonsag.Egeszseg: return +1;
case Tulajdonsag.Intelligencia: return -1;
case Tulajdonsag.Bolcsesseg: return -1;
default: return 0
}
case Faj.Elf: switch (tul) {
case Tulajdonsag.Egeszseg: return -1;
case Tulajdonsag.Ugyesseg: return +1;
default: return 0;
}
case Faj.Felork: switch (tul) {
case Tulajdonsag.Ero: return +1;
case Tulajdonsag.Egeszseg: return +1;
case Tulajdonsag.Karizma: return -2;
default: return 0;
}
case Faj.Felszerzet: switch (tul) {
case Tulajdonsag.Ero: return -1;
case Tulajdonsag.Ugyesseg: return +1;
default: return 0;
}
case Faj.Gnom: switch (tul) {
case Tulajdonsag.Ero: return -1;
case Tulajdonsag.Intelligencia: return +1;
default: return 0;
}
case Faj.Torpe: switch (tul) {
case Tulajdonsag.Egeszseg: return +1;
case Tulajdonsag.Karizma: return -1;
default: return 0;
}
default: return 0;
}
}
export function TulajdonsagModositokFajokra(tul: Tulajdonsag) {
return (faj: Faj) => tulajdonsagModositokPerFaj(tul, faj);
}
export function TulajdonsagokFajjal(tulajdonsagok: KarakterTulajdonsagok, faj: Faj): KarakterTulajdonsagok {
return {
[Tulajdonsag.Ero]: tulajdonsagok.t_ero + tulajdonsagModositokPerFaj(Tulajdonsag.Ero, faj),
[Tulajdonsag.Ugyesseg]: tulajdonsagok.t_ugy + tulajdonsagModositokPerFaj(Tulajdonsag.Ugyesseg, faj),
[Tulajdonsag.Egeszseg]: tulajdonsagok.t_egs + tulajdonsagModositokPerFaj(Tulajdonsag.Egeszseg, faj),
[Tulajdonsag.Intelligencia]: tulajdonsagok.t_int + tulajdonsagModositokPerFaj(Tulajdonsag.Intelligencia, faj),
[Tulajdonsag.Bolcsesseg]: tulajdonsagok.t_bol + tulajdonsagModositokPerFaj(Tulajdonsag.Bolcsesseg, faj),
[Tulajdonsag.Karizma]: tulajdonsagok.t_kar + tulajdonsagModositokPerFaj(Tulajdonsag.Karizma, faj),
}
}
export function TulajdonsagokTotal(karakter: Pick<KarakterInputs, 'tulajdonsagok' | 'faj' | 'tulajdonsagNovelesek'>): KarakterTulajdonsagok {
const response = TulajdonsagokFajjal(karakter.tulajdonsagok, karakter.faj)
for (const tulajdonsag of karakter.tulajdonsagNovelesek) {
// @ts-ignore // Trust me bro!
response[tulajdonsag] += 1
}
return response
@@ -1,12 +1,11 @@
import React, {useContext, useState} from 'react';
import './CreateCharacter.css'
import {Faj} from "../domain-models/faj";
import {Faj, TulajdonsagokFajjal} from "../domain-models/faj";
import {Osztaly, SetFelszerelesForChangedOsztaly} from "../domain-models/osztaly"
import FajSelector from "../components/FajSelector";
import Tulajdonsagok from "../components/Tulajdonsagok";
import OsztalySelector from "../components/OsztalySelector";
import KarakterKepzettsegek from "../components/KarakterKepzettsegek";
import {KarakterTulajdonsagok, TulajdonsagokFajjal} from "../domain-models/tulajdonsag";
import MasodlagosErtekek from "../components/MasodlagosErtekek";
import {
AvailableKezpettsegList,
@@ -32,6 +31,7 @@ import {StoreNewCharacter, UpdateCharacter} from "../api/character.api";
import {useLoaderData, useParams} from "react-router-dom";
import saveOverlayTooltip from "../components/SaveOverlayTooltip";
import {UserContext} from "../../shared/contexts/UserContext";
import {KarakterTulajdonsagok} from "../domain-models/tulajdonsag";
function CreateCharacterPage(props: {
faro?: Faro,
@@ -94,7 +94,7 @@ function CreateCharacterPage(props: {
return (
<div>
<div className='container-fluid p-5 bg-black text-white text-center'>
<h1>Karakter {initialKarakterInputs ? "szerkesztése" : "létrehozása"}</h1>
<h1>Karakter {!!id ? "szerkesztése" : "létrehozása"}</h1>
</div>
<ToastContainer className="position-fixed" position="top-end">
<Toast show={showSaved} onClose={hideSaved} bg="success">
@@ -1,4 +1,4 @@
import {KarakterTulajdonsagok, Modifier, TulajdonsagModosito, TulajdonsagokTotal} from "../domain-models/tulajdonsag";
import {TulajdonsagokTotal} from "../domain-models/tulajdonsag";
import {Mentok, MentokAlap, MentoModositok} from "../domain-models/mentok";
import {Kepzettseg, Kepzettsegek} from "../domain-models/kepzettsegek";
import {CalculateMasodlagosErtekek} from "../domain-models/masodlagos_ertekek";
@@ -11,6 +11,11 @@ import {GetJellem} from "../domain-models/jellem";
import {Fegyver, GetFegyverek, GetPajzs, GetPancel} from '../domain-models/felszereles'
import {SignedNumberToText} from "../components/Helpers";
import {OsztalySkillsTordelt} from "./osztaly_skills";
import {
KarakterTulajdonsagok,
Modifier,
TulajdonsagModosito
} from "../domain-models/tulajdonsag";
export interface KepzettsegPdfView {
KepzettsegName: string
@@ -112,7 +117,7 @@ export function KarakterInputToPdfView(karakter: KarakterInputs): KarakterPdfVie
function mapKepzettsegToPdfView(kepzettseg: Kepzettseg, tulajdonsagok: KarakterTulajdonsagok, szint: number) {
const tulajdonsagErtek = kepzettseg.Tulajdonsag.reduce((maxTulajdonsagErtek, currentTulajdonsag) =>
(tulajdonsagok[currentTulajdonsag] > maxTulajdonsagErtek)
tulajdonsagok[currentTulajdonsag] > maxTulajdonsagErtek
? tulajdonsagok[currentTulajdonsag]
: maxTulajdonsagErtek,
tulajdonsagok[kepzettseg.Tulajdonsag[0]])
@@ -1,6 +1,6 @@
import {PDFFont, PDFPage, rgb} from "pdf-lib";
import {KarakterTulajdonsagok, Modifier} from "../domain-models/tulajdonsag";
import {SignedNumberToText} from "../components/Helpers";
import {KarakterTulajdonsagok, Modifier} from "../domain-models/tulajdonsag";
export function DrawTulajdonsagok(page: PDFPage, tulajdonsagok: KarakterTulajdonsagok, fontSizeBase: number, pdfFont: PDFFont) {
page.drawText(tulajdonsagok.t_ero.toString(), {